C++中字符串问题
先看代码,[code=C/C++][/
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char cstr[]="C++";
char cpstr[]={'C','+','+'};
cout<<strlen(cstr)<<":"<<cstr<<endl<<strlen(cpstr)<<":"<<cpstr;
return 0;
}]
我用g++编译执行结果是这个样子
3:C++
6:C++C++
而用vs2010直接是乱码
结果如下
3:C++
15:C++烫烫烫烫++请按任意键继续. . .
俩个结果都不对啊。
[解决办法]
//strlen函数大概实现代码
int strlen(const char *str)
{
ASSERT(str!=NULL);
int len=0;
while(*str++!='\0')
len++;
return len;
}
如果字符串没有结束标志的话,那么strlen函数输出的就是错误的值
[解决办法]
字符串string都有一个结束符'\o',用cout输出字符数组,是从首字符开始,一直到'\0'前面一个字符。
char cstr[]="C++"; 它在内存中存储是'C', ‘+’, '+', '\0'。
输出C++,遇到'\0'停止
char cpstr[]={'C','+','+'}; 它在内存中存储是'C', ‘+’, '+'
输出C++,没遇到'\0',继续往下读,直到读到'\0'
[解决办法]
字符串是一种特殊的字符数组。
字符串可用以下两种方式表示:
方法1: char a[]={'C','+','+','\0'};注意需要自己加结束符。
方法2: char a[]="C++";这种方式表达的意思和方式1的相同,会在末尾自动加上'\0'结束符。