gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:45:49 25 4
gpt4 key购买 nike

我知道在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com