为什么我需要在数组中附加一个 NUL 字符?

斯坦利
#include <stdio.h>
#include <string.h>

int main()
{
    char x[] = "Happy birthday to You";
    char y[25]; 
    char z[15];

    printf("The string in array x is: %s\nThe string in array y is: %s\n", x, strcpy(y, x));

    strncpy(z, x, 14);

    z[14] = '\0'; // Why do I need to do this?
    printf("The string in array z is: %s\n", z);
    return 0; 
}
  1. 为什么我需要在数组中附加一个 NUL 字符z
  2. 我也评论了那行,输出没有改变,为什么?
  3. 如果我做一些类似z[20] = '\0';事情,它会编译并显示结果而没有任何错误。当我声明我的z数组大小为 15 时,这不是非法访问内存吗?
HS

C 语言没有本地字符串类型。在 C 中,字符串实际上是由空字符终止的一维字符数组\0

为什么我需要NUL在数组中附加一个字符z

C 库函数,如strcpy()/strncpy()对以空字符结尾的字符数组进行操作。strncpy()最多将count 个字符从源复制到目标。如果找到终止空字符,则将其复制到目的地并返回。如果在复制整个源数组之前达到计数,则生成的字符数组不是空终止字符,您需要在目标末尾显式添加空终止字符。

我也评论了那行,输出没有改变,为什么?

我只能说你很幸运。也许目的地的最后一个字符(即z[14])可以包含所有位0但是每次运行程序时可能不会发生这种情况。确保在使用strncpy()或使用其他 C 库函数时显式添加空终止字符,这些函数会自动为您执行此操作snprintf()

如果我做类似的事情z[20] = '\0'它正在编译并向我显示结果,没有任何错误。当我声明我的z数组大小为 15 时,这不是非法访问内存吗?

数组的大小z15并且您正在访问,z[20]即访问z超出其大小的数组在 C 中,越界访问数组是未定义的行为。未定义的行为包括程序可能不正确地执行(崩溃或静默地生成不正确的结果),或者它可能偶然地完全按照程序员的意图执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从字节中删除NUL字符

来自分类Dev

这些`NUL`字符的目的是什么?

来自分类Dev

为什么要在数组中为var返回一个字符串索引?

来自分类Dev

删除“ NUL”字符

来自分类Dev

C ++中的字符串中的NUL char

来自分类Dev

C 中的 NUL 字符和静态字符数组/字符串文字

来自分类Dev

删除从文本文件导入的 SSIS 中的“NUL”字符

来自分类Dev

“NUL”字符(“\0”)字节是分隔的还是分配给带有字符串的字符数组?

来自分类Linux

为什么要在POSIX sh的`test` /`[`字符串比较中附加一个额外的字符?

来自分类Dev

删除“ NUL”字符(在R内)

来自分类Dev

为什么我需要在此Powershell此处字符串中转义最后一个单引号?

来自分类Java

如何从Java中的字符串中删除nul字符(\ 0)

来自分类Dev

带nul字符的R字符串

来自分类Dev

为什么node.js将我的数组中的字符串值附加为true到数组中的另一个对象?

来自分类Dev

为什么用NUL字符打开Notepad ++时,我的计算机为什么会发出刺耳的声音?

来自分类Dev

将包含NUL的字节数组转换为字符串

来自分类Dev

curlMultiperform(multihandle)中的错误:字符串中嵌入了nul

来自分类Dev

使用Stack Overflow API时,getURL返回“字符串中嵌入的nul”错误

来自分类Dev

如何从二进制文件中读取以nul结尾的字符串

来自分类Dev

初学者尝试读取带R的CSV:字符串中嵌入nul

来自分类Linux

如何解决从mmap()返回的字符串中缺少NUL终止符的问题?

来自分类Dev

如何使用Windows批处理脚本在变量中存储NULL ASCII字符(nul)?

来自分类Dev

C编译器的区别?Char 中的 NUL 控制字符

来自分类Dev

SQLite选择带有NUL字符的Blob

来自分类Dev

通过批量输入更改字符NUL

来自分类Dev

我需要在 classList 模板字符串 javascript 中增加一个数字

来自分类Dev

我需要在数据文件中搜索一个字符串。但字符串写在另一个文件中

来自分类Dev

为什么这些nul出现

来自分类Dev

在数组中添加长度或每个字符串,并创建一个新数组,并附加结果

Related 相关文章

  1. 1

    从字节中删除NUL字符

  2. 2

    这些`NUL`字符的目的是什么?

  3. 3

    为什么要在数组中为var返回一个字符串索引?

  4. 4

    删除“ NUL”字符

  5. 5

    C ++中的字符串中的NUL char

  6. 6

    C 中的 NUL 字符和静态字符数组/字符串文字

  7. 7

    删除从文本文件导入的 SSIS 中的“NUL”字符

  8. 8

    “NUL”字符(“\0”)字节是分隔的还是分配给带有字符串的字符数组?

  9. 9

    为什么要在POSIX sh的`test` /`[`字符串比较中附加一个额外的字符?

  10. 10

    删除“ NUL”字符(在R内)

  11. 11

    为什么我需要在此Powershell此处字符串中转义最后一个单引号?

  12. 12

    如何从Java中的字符串中删除nul字符(\ 0)

  13. 13

    带nul字符的R字符串

  14. 14

    为什么node.js将我的数组中的字符串值附加为true到数组中的另一个对象?

  15. 15

    为什么用NUL字符打开Notepad ++时,我的计算机为什么会发出刺耳的声音?

  16. 16

    将包含NUL的字节数组转换为字符串

  17. 17

    curlMultiperform(multihandle)中的错误:字符串中嵌入了nul

  18. 18

    使用Stack Overflow API时,getURL返回“字符串中嵌入的nul”错误

  19. 19

    如何从二进制文件中读取以nul结尾的字符串

  20. 20

    初学者尝试读取带R的CSV:字符串中嵌入nul

  21. 21

    如何解决从mmap()返回的字符串中缺少NUL终止符的问题?

  22. 22

    如何使用Windows批处理脚本在变量中存储NULL ASCII字符(nul)?

  23. 23

    C编译器的区别?Char 中的 NUL 控制字符

  24. 24

    SQLite选择带有NUL字符的Blob

  25. 25

    通过批量输入更改字符NUL

  26. 26

    我需要在 classList 模板字符串 javascript 中增加一个数字

  27. 27

    我需要在数据文件中搜索一个字符串。但字符串写在另一个文件中

  28. 28

    为什么这些nul出现

  29. 29

    在数组中添加长度或每个字符串,并创建一个新数组,并附加结果

热门标签

归档