为何如此输出?

时间:2014-08-02 05:02:18

标签: c

我正在做一个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);
}

3 个答案:

答案 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";