前几天在做网络通信时,遇到一个小问题,里面有一个要把字符串转化为字符指针的需求。
要把字符指针赋值给字符串很简单,直接赋值就可以了。
char *a="abcd";///自动开辟了存放5个字符的内存空间
string b=a;///把指针变量a的首地址赋值给了b的首地址(因为string是c++的类型,所以该表达式只在c++中可行,c中不可行)
这样做不会出现错误,把指针变量a的首地址赋值给了b的首地址。在c++中,字符串在内存的存储方式就是和字符指针的存储方式一样的。但如果你要复制给一个字符数组就不对了,如
char *a="abcd";
char b[5];///开辟了五个字符的内存空间
b=a;
因为b在此处是一个常量,表示的是一个地址,常量是不能被赋值的。
但是如果这样复制却是可以的
char b[5]="abcd";
这相当于对字符数组初始化,这是c语言中字符数组初始化的方式。
在c++字符串类中有一个成员函数c_str(),这个函数可以把字符串转为为字符指针,但是最后转化成的字符指针是const char* 类型的,如果你直接这么赋值会出现错误:
string test_str="abcd";
char* a=new char[256];///定义字符指针时一定要开辟内存空间,否则程序容易崩!
a=test_str.c_str();
这是因为两边的类型不匹配。要把字符串转为字符指针代码如下:
///字符串转为字符指针
char* str_to_c(string& s)
{
char *result = &s[0];
for (int i = 1; i < s.length() + 1; i++)
{
*(result + i) = s[i];
}
return result;
}
c++中string转int
string str="12345";
int b=atoi(str.c_str());
c++中string转double
string str="123.45";
int b=atof(str.c_str());
将int转化为string
int n;
char buffer[4];
sprintf_s(buffer, "%d", n);
str = buffer;