如果我设置一个数组变量 a[]="abc",然后设置另一个数组变量 b[]={'d','e','f'} ,我最后的输出代码是 printf("% "s",b) ,它的输出值是"defabc",为什么?我的输出是数组 b 但输出值会先输出数组 b 然后再输出数组 a。 整个代码在下面。
#include<stdio.h>
void main(){
char a[]="abc";
char b[]={'d','e','f'};
printf("%s",b);
}
输出是“defabc”。 为什么数组b的字符串长度是7?
最佳答案
在 C 中,所有字符串都应为空(即 \0
)终止,因此您的第二个变量应如下所示:
char b[] = {'d', 'e', 'f', '\0'};
您可能很好奇为什么 "defabc"
会与您的代码一起打印。答案是,所有局部变量都存储在一个 stack-based memory layout 中。 .所以你的内存布局看起来像这样:
|'d' | <-- b
|'e' |
|'f' |
|'a' | <-- a
|'b' |
|'c' |
|'\0'|
还要注意 printf("%s", ...)
一直读取到 \0
,所以 printf("%s", a)
按预期工作,但 printf("%s", b)
打印 "defabc"
。
关于c++ - 数组输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41457712/