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;
string str1( a,3); // 如果本身char数组没有'\0',构造函数里要指明个数
cout<<str1.c_str()<<endl;
#4
++
#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;输出肯定就是乱码了.
导致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;
string str1( a,3); // 如果本身char数组没有'\0',构造函数里要指明个数
cout<<str1.c_str()<<endl;
#4
++
#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;输出肯定就是乱码了.
导致string str1( a );在构造的时候就会一直往"c"后面继续读取, 直到遇到\0, 这时乱码就已经出现.
然后你再cout<<str1.c_str()<<endl;输出肯定就是乱码了.
#9
char a[] = { 'a','b','c', 0}; //这样修改就可以了, (注意: 没有引号)
#10
第一步就出现了错误
#11
谢谢大家的指点