C++ 字符数组中的编译器提供额外的空间来存储空字符,但以字符串形式存储它';显示错误
char ch[5]={'a','b','c','d','e'};这不显示任何错误,但char ch[5]=“abcde”显示错误。为什么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]
#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。