std::string的c_str()不是会自动添加\0吗?

时间:2022-07-20 22:26:16
char a[] = { 'a','b','c'};
string str1( a );
cout<<str1.c_str()<<endl;
为什么输出的结果abc后面还有乱码显示?

11 个解决方案

#1


因为你的第一行就不对

#2


因为你的a没有结束符,所以在构造str1的时候就构造错了

#3


char a[] = { 'a','b','c'};
string str1( a,3); // 如果本身char数组没有'\0',构造函数里要指明个数
cout<<str1.c_str()<<endl;

#4


引用 3 楼 wzf906819823 的回复:
char a[] = { 'a','b','c'};
string str1( a,3); // 如果本身char数组没有'\0',构造函数里要指明个数
cout<<str1.c_str()<<endl;

++

#5


string (const char* s);
string (const char* s, size_t n);

第一个构造函数参数需要字符串, 而你的实参不是一个字符串。 

#6


关键还是0字符的问题
详解可以看我的视频教程

#7


构造函数使用错误,可以看一下string构造函数的所有重载,cplusplus.com

#8


char a[] = { 'a','b','c'};  因为这个没有\0结尾.
导致string str1( a );在构造的时候就会一直往"c"后面继续读取, 直到遇到\0, 这时乱码就已经出现.
然后你再cout<<str1.c_str()<<endl;输出肯定就是乱码了.

#9


char a[] = { 'a','b','c', 0};  //这样修改就可以了,  (注意:  没有引号)

#10


第一步就出现了错误

#11


谢谢大家的指点

#1


因为你的第一行就不对

#2


因为你的a没有结束符,所以在构造str1的时候就构造错了

#3


char a[] = { 'a','b','c'};
string str1( a,3); // 如果本身char数组没有'\0',构造函数里要指明个数
cout<<str1.c_str()<<endl;

#4


引用 3 楼 wzf906819823 的回复:
char a[] = { 'a','b','c'};
string str1( a,3); // 如果本身char数组没有'\0',构造函数里要指明个数
cout<<str1.c_str()<<endl;

++

#5


string (const char* s);
string (const char* s, size_t n);

第一个构造函数参数需要字符串, 而你的实参不是一个字符串。 

#6


关键还是0字符的问题
详解可以看我的视频教程

#7


构造函数使用错误,可以看一下string构造函数的所有重载,cplusplus.com

#8


char a[] = { 'a','b','c'};  因为这个没有\0结尾.
导致string str1( a );在构造的时候就会一直往"c"后面继续读取, 直到遇到\0, 这时乱码就已经出现.
然后你再cout<<str1.c_str()<<endl;输出肯定就是乱码了.

#9


char a[] = { 'a','b','c', 0};  //这样修改就可以了,  (注意:  没有引号)

#10


第一步就出现了错误

#11


谢谢大家的指点