参考资料:
(备注:此处说的string肯定是std::string啦)
(1)char *转换到string:
char *cs= "char* "; string s=cs; //直接用string的构造函数搞定!
(2)string转换到char*:
string s= "string ";
char *cs = s.c_str();
(3)char cs[10]转string:
使用sprintf函数,
MSDN上面的例子:
Example
#include
void main( void
)
{
char
buffer[200],
s[] = "computer ", c =
'l ';
int
i
= 35, j;
float
fp = 1.7320534f;
j
= sprintf(
buffer, "tString:
%sn ", s );
j
+= sprintf(
buffer + j, "tCharacter: %cn ",
c );
j
+= sprintf(
buffer + j, "tInteger: %dn ", i
);
j
+= sprintf(
buffer + j, "tReal: %fn ", fp
);
printf(
"Output:n%sncharacter count
= %dn ", buffer, j );
}
Output
Output:
String:
computer
Character:
l
Integer:
35
Real:
1.732053
character count =
71
(3)string转CString:CString转string:
CString cs;...
string
====================================================================================
(4)char 数组和char指针与字符串常量的比较
如题:
int isequiv(char *t)
{
if (t == "char")
return 1;
else
return 0;
}
int main()
{
char test[] = "char";
char *temp = "char";
printf("%d", isequiv(test));//输出 0
printf("%d", isequiv(temp));//输出 1return 0;
}
为什么test与temp同"char"的比较结果不一样呢?
回答:
(1)char指针比较的是指针的地址。
函数里的t=="char"是进行指针的比较,temp是指针,指向"char"这个字符串常量的内存首地址,所以和"char"进行指针比较是相等的。
但是要注意的是:好的编译器,会把相同的常量字符串仅仅存一份拷贝,各个指针都指向这个拷贝。所以楼主的程序使用temp做实参时会得到比较相等(返回1)。但这也是建立在编译器会把相同的常量字符串存放一份拷贝的基础上的。要是编译器存放多份拷贝,这里比较也可能不同。
而test是在栈里分配的字符数组的首地址,和"char"的地址不同,所以不相等。
可以用strcmp函数!
直接用string就可以用“==”这个符号进行比较
======================================
网友总结:
以char* temp = “xxxxx”这样的字符串实际上是指针
printf("%d", isequiv(temp));输出 1 实际上不是必须的
有的编译器会把相同的字符串放到同一个地方,但不是必须的
而test是数组,他有自己的存储空间,所以地址和temp的地址不一样
所以printf("%d", isequiv(test));输出
0是必须的