c中的字符串初始化
String Initialization in c
我是 C 编程的新手,请随时纠正我,我坚持。我对 C 中的字符串的基本理解是,当我们初始化一个字符串时,一个空字符会自动分配到字符串的末尾,并且该空字符无法读取或写入,但仅在内部使用。
所以当我创建一个大小为 4 的字符串作为 char str[3]
并为其分配一个词 "RED" 并使用 puts 函数或 printf("%s",str)
打印它时,我得到了一个不寻常的输出打印为 RED(SMIILEY FACE)
然后我再次将字符串的大小减小到 char str[2]
并将 RED 分配给它,然后编译它,然后再次收到一个输出 RE(Smiley face)
如果有人能向我解释一下,我将不胜感激。在下面发布 C 代码
int main()
{
char s1[3]="RED";
char s2[]="RED";
puts(s1);
puts(s2);
printf("%s",s1);
return 0;
}
空字符占用一个exra字符(字节)。所以除了要初始化的单词的字符数之外,还需要使用额外的space
char s1[4]="RED"; //3 for RED and 1 for the null character
另一方面
char s2[3]="RED";
空字符没有space。 "RED" 在那里,但打印时会遇到 I/O 问题,因为末尾没有存储空字符。您的数据存储良好,但 printf
无法正确识别,因为没有空字符。
char s2[]="RED";
这会起作用,因为自动分配了 4(字节)的内存,其中包括 space 作为终止空字符。
char s1[3] = "RED";
是一个valid statement。它将 3 个字符从常量字符串文字 "RED"
(长度为 4 个字符)复制到字符数组 s1
中。 s1
中没有终止符 '[=14=]'
,因为没有空间容纳它。
注意 copy,因为 s1
是可变的,而 "RED"
不是。这使得声明不同于例如const char *s1 = "RED";
,其中字符串 未 复制。
puts(s1)
和 printf("%s", s1)
的结果都未定义。 s1
中没有终止符 '[=14=]'
。将其视为带有 1 的字符串会导致任意行为。
char s2[] = "RED";
这里,sizeof(s2) == 4
,因为"RED"
有四个字符,所以在计算space的时候需要把尾部的'[=14=]'
算进去。
我是 C 编程的新手,请随时纠正我,我坚持。我对 C 中的字符串的基本理解是,当我们初始化一个字符串时,一个空字符会自动分配到字符串的末尾,并且该空字符无法读取或写入,但仅在内部使用。
所以当我创建一个大小为 4 的字符串作为 char str[3]
并为其分配一个词 "RED" 并使用 puts 函数或 printf("%s",str)
打印它时,我得到了一个不寻常的输出打印为 RED(SMIILEY FACE)
然后我再次将字符串的大小减小到 char str[2]
并将 RED 分配给它,然后编译它,然后再次收到一个输出 RE(Smiley face)
如果有人能向我解释一下,我将不胜感激。在下面发布 C 代码
int main()
{
char s1[3]="RED";
char s2[]="RED";
puts(s1);
puts(s2);
printf("%s",s1);
return 0;
}
空字符占用一个exra字符(字节)。所以除了要初始化的单词的字符数之外,还需要使用额外的space
char s1[4]="RED"; //3 for RED and 1 for the null character
另一方面
char s2[3]="RED";
空字符没有space。 "RED" 在那里,但打印时会遇到 I/O 问题,因为末尾没有存储空字符。您的数据存储良好,但 printf
无法正确识别,因为没有空字符。
char s2[]="RED";
这会起作用,因为自动分配了 4(字节)的内存,其中包括 space 作为终止空字符。
char s1[3] = "RED";
是一个valid statement。它将 3 个字符从常量字符串文字 "RED"
(长度为 4 个字符)复制到字符数组 s1
中。 s1
中没有终止符 '[=14=]'
,因为没有空间容纳它。
注意 copy,因为 s1
是可变的,而 "RED"
不是。这使得声明不同于例如const char *s1 = "RED";
,其中字符串 未 复制。
puts(s1)
和 printf("%s", s1)
的结果都未定义。 s1
中没有终止符 '[=14=]'
。将其视为带有 1 的字符串会导致任意行为。
char s2[] = "RED";
这里,sizeof(s2) == 4
,因为"RED"
有四个字符,所以在计算space的时候需要把尾部的'[=14=]'
算进去。