C 自动将空字符附加到字符串中?

Sha*_*Kim 4 c arrays initialization string-literals zero-initialization

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    int i;
    char s1[100] = "Computer Programming Class";
    char s2[100] = "ECE";
    
    int length = (int)strlen(s1);
    for (i = 0; i < length; i++) {
        s2[i] = s1[length - 1 - i];
    }
    
    s2[i] = '\n';
    printf("%s", s2);
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的一项测试,我不明白为什么它会按预期工作。就是一段代码,将s1的顺序颠倒过来,存到s2中,然后打印出来。在我看来,当 s1 向后存储时,s2 中的空字符将被覆盖,而且 s1 中的空字符永远不会写入 s2 中,因为它是从最后一个字符开始的。但打印出来效果很好。为什么?

Gov*_*mar 5

  1. strlen返回字符串的长度(以不包括空终止符的字符为单位),因此i < length在其迭代中不包括空终止符s1

  2. 当您部分初始化数组时,就像您对其余元素所做的那样,char s2[100] = "ECE";其余元素已经初始化为零。换句话说,您对s2long 的写入length < 99保证以空终止。

  • 如果 OP 未初始化“s2”,则行为将是未定义的。 (5认同)