c++ - 数组输出

标签 c++ arrays

如果我设置一个数组变量 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/

相关文章:

C 程序数组超过 1 个字

Javascript 对象与数组性能

c# - 第一个元素作为快速排序中的枢轴

c++ - auto 与 auto&& 函数返回值

java - 将 List<int[]> .get() 函数与数组进行比较的 boolean 表达式出现问题

javascript - 为什么将子数组/对象的属性设置为其索引最高的 sibling 的值?

c++ - `-fno-semantic-interposition` 与 `-fvisibility=protected` 究竟有何不同?

c++ - 将十进制转换为二进制的C++循环的逻辑是什么

c++ - 在 C++20 中,什么时候应该使用 `iterator_traits<I>::value_type` ,什么时候应该使用 `iter_value_t` ?

javascript - 测序产品列表