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

一直以来都是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,可以实现以上功能。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值