我正在做一个C语言的例子,并尝试了如下所示的示例。我认为它应该打印字符串 Study Tonight strings
,但是输出 Study Tonight stringsStudyTonight
为什么会这样?我认为即使是char str[7]
数组大小也是正确的。
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
int main() {
char ch[20]="Study Tonight ";
printf("%s",ch);
char str[7]="strings";
printf("%s",str);
return (EXIT_SUCCESS);
}
答案 0 :(得分:2)
此:
char str[7]="strings";
已经是未定义的行为,因为初始化程序是7个字符的文本加上1个null终止符,所以你需要8个字节的存储空间,而不是7个。请打开你的编译器警告,它会为你捕获这些微不足道的问题。如果你使用GCC或Clang,就像这样:
gcc -Wall -Wextra -Werror
答案 1 :(得分:2)
你错过了算空字符。对于null终止符,数组的大小应为no + 1。所以在这种情况下它应该是char char str[8] = "strings"
。
答案 2 :(得分:1)
在字符串NULL
末尾有必要使用终结符。如果您不为NULL
分配空格,则会导致未定义的行为。
char str[7]="strings"; // Undefined Behavior
在此作业中,您只为字符串分配了空格(7个字符)。但是在字符串NULL
的末尾是必要的。
请尝试以下任何更改 -
char str[8]="strings";
或
char str[]="strings";