C中的字符数组和字符串终止符

标签 c arrays string printf

我知道在 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 时,它会如何表现?

Code

最佳答案

  1. c2 不是字符串,因此将其传递给 printf %s 具有未定义的行为。未定义的行为是未定义的。从技术上讲,不需要打印任何内容。它还可能删除您的所有文件或进入无限循环或......
  2. 并非所有字符数组都是字符串。只要您不将其传递给需要字符串的函数,您就可以在字符数组中存储您想要的任何内容。
  3. 它具有未定义的行为。

关于C中的字符数组和字符串终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53598771/

相关文章:

通过 PPM 在 C 中创建标志

c - 在将指针传递给外部库方法后释放内存时 RtlFreeHeap 无效地址

java - 从android中的自定义适配器获取复选框的ID?

javascript - 动态访问数组值

Java String.replaceAll 正则表达式

python - 使用分隔符分割带有转义分隔符的字符串

c - fork()系统调用的工作(C程序)

c - N个节点的完全二叉树的高度是多少?

python - 在 python 中迭代 JSON 并根据键过滤值以获得所需的结果

string - 如何将 int slice 的字符串转换为 int slice ?