C语言cstring转换为char数组,[转载]char到string与CString怎么互相转换?以及char数组 、c...

参考资料:

(备注:此处说的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是必须的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值