首页 > 解决方案 > C中的字符数组和字符串终止字符

问题描述

我知道在 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。为什么会这样?

Q2。另外,字符数组可以包含\0终止字符串以及没有\0终止字符数组如何?

Q3。我知道printf遇到\0. printf不遇到时表现如何\0

代码

标签: carraysstringprintf

解决方案


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

推荐阅读