Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符数组中的编译器提供额外的空间来存储空字符,但以字符串形式存储它';显示错误_C++_String - Fatal编程技术网

C++ 字符数组中的编译器提供额外的空间来存储空字符,但以字符串形式存储它';显示错误

C++ 字符数组中的编译器提供额外的空间来存储空字符,但以字符串形式存储它';显示错误,c++,string,C++,String,char ch[5]={'a','b','c','d','e'};这不显示任何错误,但char ch[5]=“abcde”显示错误。为什么 #include <iostream> using namespace std; int main() { char ch[5] = {'a', 'b', 'c', 'd', 'e'}; int i; for( i = 0; ch[i] != '\0'; i++){ cout << ch[i]

char ch[5]={'a','b','c','d','e'};这不显示任何错误,但char ch[5]=“abcde”显示错误。为什么

#include <iostream>
using namespace std;
int main() {
    char ch[5] = {'a', 'b', 'c', 'd', 'e'};
    int i;
    for( i = 0; ch[i] != '\0'; i++){
        cout << ch[i] << ' ';
    }
return 0;
}
#包括
使用名称空间std;
int main(){
char ch[5]={'a','b','c','d','e'};
int i;
对于(i=0;ch[i]!='\0';i++){
库特
循环终止意味着有空字符,但因为我已经给出了大小5,所以它在哪里存储了这个空字符

这个数组中没有空字符,使用双引号时只会得到一个空字符(就像在第二个代码段中一样)

您越界访问了数组并获得了幸运(内存中的下一个字节恰好为空,这次调用失败)

但是char ch[5]=“abcde”显示错误。为什么

#include <iostream>
using namespace std;
int main() {
    char ch[5] = {'a', 'b', 'c', 'd', 'e'};
    int i;
    for( i = 0; ch[i] != '\0'; i++){
        cout << ch[i] << ' ';
    }
return 0;
}
因为没有空字符的空间



FYI,C++在这方面比C++更严格,允许<代码> char ch[5 ] =“abcDE”;< /C>。在这种情况下没有添加空字符。< /P>我尝试CHARCH [5 ]={“a”、“b”、“c”、“d”、“e”};(i=0;ch[i]='\';i++);{cout@Deeksha越界访问数组是一种未定义的行为,句号。如果您了解汇编,您可以查看编译器生成的汇编,以了解为什么它总是工作,但最终它仍然是UB。