我知道在 C 中,\0
终止字符串。
我们可以将字符串和字符数组都赋值给字符数组吗?
char c1[] = "hello";
char c2[] = {'h','e','l','l','o'};
但是,我意识到字符数组没有 \0
作为终止字符:
printf("%d\n",sizeof(c1)); //6
printf("%d\n",sizeof(c2)); //5
但是当我打印它们时,我看到这样的东西:
printf("%s\n",c1); //hello
printf("%s\n",c2); //helloV
Q1。如果我重新运行它,第二行有时会打印 helloU
,有时会打印 helloV
。为什么会这样?
第二季度。另外,字符数组可以包含 \0
终止字符串而不包含 \0
终止字符数组,这怎么可以?
第三季度。我知道 printf
在遇到 \0
时终止。当 printf
没有遇到 \0
时,它会如何表现?
最佳答案
c2
不是字符串,因此将其传递给printf
%s
具有未定义的行为。未定义的行为是未定义的。从技术上讲,不需要打印任何内容。它还可能删除您的所有文件或进入无限循环或......- 并非所有字符数组都是字符串。只要您不将其传递给需要字符串的函数,您就可以在字符数组中存储您想要的任何内容。
- 它具有未定义的行为。
关于C中的字符数组和字符串终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53598771/