C++ 数组输出

C++ 数组输出,c++,arrays,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); } #包括 void main(

如果我设置一个数组变量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);
}
#包括
void main(){
字符a[]=“abc”;
字符b[]={'d','e','f'};
printf(“%s”,b);
}
输出为“defabc”。
数组b的字符串长度是7为什么?

在两个字符串的末尾都需要一个空终止符。第二个字符串没有将其定义为字符数组。

两个字符串的末尾都需要一个空终止符。第二个字符串没有将其定义为字符数组。

在C中,所有字符串都应以null结尾(即
\0
),因此第二个变量应如下所示:

char b[] = {'d', 'e', 'f', '\0'};
您可能会好奇为什么
“defabc”
与您的代码一起打印。答案是,所有局部变量都存储在一个数据库中。因此,您的内存布局如下所示:

|'d' | <-- b
|'e' |
|'f' |
|'a' | <-- a
|'b' |
|'c' |
|'\0'|

C中的
|'d'|所有字符串都应以null结尾(即
\0
),因此第二个变量应如下所示:

char b[] = {'d', 'e', 'f', '\0'};
您可能会好奇为什么
“defabc”
与您的代码一起打印。答案是,所有局部变量都存储在一个数据库中。因此,您的内存布局如下所示:

|'d' | <-- b
|'e' |
|'f' |
|'a' | <-- a
|'b' |
|'c' |
|'\0'|

|'d'|声明字符串的正确方法

char b[] = { 'd', 'e', 'f', '\0' };    // null terminator required

因此,此代码将打印
def
作为输出

#include <stdio.h>

int main() {
    char a[] = "abc";
    char b[] = { 'd', 'e', 'f', '\0' };
    printf("%s", b);
    return 0;
}
#包括
int main(){
字符a[]=“abc”;
字符b[]={'d','e','f','\0'};
printf(“%s”,b);
返回0;
}

声明字符串的正确方法

char b[] = { 'd', 'e', 'f', '\0' };    // null terminator required

因此,此代码将打印
def
作为输出

#include <stdio.h>

int main() {
    char a[] = "abc";
    char b[] = { 'd', 'e', 'f', '\0' };
    printf("%s", b);
    return 0;
}
#包括
int main(){
字符a[]=“abc”;
字符b[]={'d','e','f','\0'};
printf(“%s”,b);
返回0;
}

我不认为“defabc”是输出。在b中没有空终止符,所以函数读取过去的缓冲区,碰巧堆栈上的下一个是a@AdityaK当程序员做错事时,这就是未定义行为的乐趣您需要
charb[]={'d','e','f','\0'}我看不到“defabc”作为输出。在b中并没有空终止符,所以函数读取过去的缓冲区,碰巧堆栈上的下一个是a@AdityaK当程序员做错事时,这就是未定义行为的乐趣您需要
charb[]={'d','e','f','\0'}我不想提及堆栈数据结构,但。数据结构不相关here@OlegBogdanov你说得对,“数据结构”有不同的用途!这意味着a=“abc”它的真正值是“abc\0”对吗?@Pulsar是的<代码>“abc”
以4个字节的形式存储在内存中
'a''b''c'\0'
。我不想提及堆栈数据结构,但是。数据结构不相关here@OlegBogdanov你说得对,“数据结构”有不同的用途!这意味着a=“abc”它的真正值是“abc\0”对吗?@Pulsar是的<代码>“abc”
以4字节的形式存储在内存中
'a''b''c'\0'