C中的char[]与C++中的string

来源:互联网 发布:c语言代码表白玫瑰花 编辑:程序博客网 时间:2024/06/04 18:07

一直以来都是C和C++不分的混用(也主要是因为一直以来都没有写过什么程序。。。),今天在写一个反转输入字符串的小程序时,发现了格外多的bug,也着实学到了不少东西。起初是写的如下代码(片段):

#include <stdio.h>#include <string>#include <iostream>using namespace std;int main(){string s = "jack is a good boy!";printf("%s",s);        return 0;}


刚开始都没有加以下语句:

#include <iostream>using namespace std;


后来即使加上了,也于事无补,编译器仍然报错:

warning: cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime

这个警告真心看不懂,Google说是printf()无法识别string定义的s,printf()是C的函数,可以用printf("%s",str);来打印字符串,但是无法识别string变量,因为C中没有定义string!

string是C++中才有的。string是一个类,具体请看这里。所以以上程序段改成这样就可以运行了:


#include <stdio.h>#include <string>#include <iostream>using namespace std;int main(){string s = "jack is a good boy!";cout >> s >> endl;        return 0;}

那么,才C中怎么操作字符串呢?先来一个出错的:

#include <stdio.h>#include <string.h>int main(){char s[100];s[0] = "jack is a good boy!\n";printf("%s",s);return 0;}

这个时候编译器会报错:

warning: assignment makes integer from pointer without a cast

(警告:未经剪切将指针变为了整型)在Google了一阵之后,我发现后半部分(即“jack.....”)是一个指针,而s[0]需要的,是一个整数,所以这样的赋值是错误的,对s[0]的赋值应该是如下这种样子的:

s[0] = 'a';

但是想要对字符数组整个赋值怎么办?有两种办法,在建立数组时即赋值,或者,建立一个指针*ss,见如下代码:

#include <stdio.h>#include <string.h>int main(){char s[100] = "jack is a good boy!\n";char *ss;ss = "jack is a bad boy!\n";printf("%s",s);printf("%s",ss);return 0;}

这样就可以正常实现了。


在百度知道里见到了如下一种解决办法,可行:

#include <stdio.h>#include <string.h>typedef char* string;int main(){string ss;ss = "jack is a bad boy!\n";printf("%s",ss);return 0;}

就是通过语句

typedef char* string;
自己定义一个string,可以实现以上功能。

原创粉丝点击