【发布时间】:2019-07-02 03:20:01
【问题描述】:
我一直在想有什么区别
char[] = "hello world"
和
char[20] = "hello world"
我试着写这个短代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
char str[20] = "hello world";
for( i = 0; i<20; i++){
if(str[i]=='\n')
printf("\nExit character newline");
else if(str[i]=='\0')
printf("\nNull terminated..");
else
printf("\nCur: %c", str[i]);
}
return 0;
}
哪个输出:
Cur: h
Cur: e
Cur: l
Cur: l
Cur: o
Cur:
Cur: w
Cur: o
Cur: r
Cur: l
Cur: d
Null terminated..
Null terminated..
Null terminated..
Null terminated..
Null terminated..
Null terminated..
Null terminated..
Null terminated..
Null terminated..
另一方面,当我没有专门定义数组大小而只是使用时
char[] = "hello world"
它给了我这个输出:
Cur: h
Cur: e
Cur: l
Cur: l
Cur: o
Cur:
Cur: w
Cur: o
Cur: r
Cur: l
Cur: d
Null terminated..
Cur:
Null terminated..
Null terminated..
Null terminated..
Cur:
Cur:
Cur: a
Null terminated..
我对上述输出感到困惑。 char[] = "hello world" 不只是以 12 个元素结束,最后一个元素填充了一个空终止符吗?另外,如果我 printf char 和 %s,我的假设是否正确?
【问题讨论】:
-
您能展示一下您用于
char[]版本的代码吗? -
您的循环正在查看 20 个字符,而不是字符串的长度。为什么你认为
char[] = "hello world"和数字 20 之间有任何关系?%s使用 0 个终止的字符串。如果这就是您所拥有的,printf将起作用。 -
@John3136 我正在尝试找出并理解在 hello world 中的 'd' 之后可能超出空终止符的内容。我期待 str[] 的其余部分会填充空终止符,就像 str[20] 观察到的一样,所以我只是随机地进行了 20 次迭代。
-
@jdoecs420 数组之后没有什么有趣的。这只是不确定的值。访问它们会导致未定义的行为(google that)。
-
@Jabberwocky 那里可能有一些“有趣”的东西,例如对保持程序的正常执行路径至关重要的其他变量,现在已被覆盖。