string,char*,char数组的区别
望各位高人指点!!!!!!!!!
#include <iostream>
using namespace std;
#include <string>
#include <cstring>
struct candybar{
string name;
double weight;
int kaluli;
};
int main()
{
candybar snack={"wowo",1.2,100};//这句为什么编译通不过?
string a;
strcpy(a,"my");//为什么编译也通不过?
char *b="hello";
char *c="world";
strcpy(b,c);//????为什么编译能通过,不能执行?
return 0;
}
能详细说一下string, char[], char* 这三者的区别吗???
[解决办法]
string: c++帮你做好的一个类类型,是以NULL为结束标志的字符数组
char[]: 字符数组
char* : 字符指针
char *b="hello"; --字面值字符串,const类型,不能被修改
char *c="world"; --同上
哈哈,本人初学,这只是俺的理解,不知是否正确!
[解决办法]
string 这个是个类,不能称之为数据类型
char[] char型数组
char* 指向char类型的指针
[解决办法]
[解决办法]
struct candybar{
string name;
double weight;
int kaluli;
};
1、candybar snack={"wowo",1.2,100};//这句为什么编译通不过?
要看 string 的持造函,如果不行的,你可以改成明匹配型candybar snack={string("wowo"),1.2,100};
string a;
2、strcpy(a,"my");//为什么编译也通不过?
型不,strcpy需要的是 char * , 真想做的,可以成strcpy(&*a.begin(),"my"); 但是要保障 a 中有足的空,否越界,且a的度要好"my"一,否,取string a 的度可能不上(版本相)。也就是,的代是不定的,不做。
char *b="hello";
char *c="world";
3、strcpy(b,c);//????为什么编译能通过,不能执行?
是於常字符串的,常字符串於未定行。可能引常或其他,因字符串常量在不同的器中,可能被存放於不同的段上,而且相同的字符串常量,可能被化,之是未定行,不同的器可能有不同的行果。
string 是个类,也有叫,也是可以作一数据类型的。只是叫法不一。
std::string 然於准的一,但是不同的器,其是不一的具也是有些差的。
你的的初始化法 candybar snack={"wowo",1.2,100}; 型明匹配要好一些,否免在一些器上通不,印象中,一些特殊的的初始化法好象是有的,gcc vc bcb 就不大一。
char *a="hello";
char b[]="hello";
是不一的,b可以修改,而a存放於常量,是只的,修改它,致未定行,要理解。
[解决办法]
candybar snack={"wowo",1.2,100};
这个应该可以编译,你用的是什么编译器?
- C/C++ code
#include <iostream>using namespace std;#include <string>#include <cstring>struct candybar{string name;double weight;int kaluli;};int main(){candybar snack={"wowo",1.2,100};//这句为什么编译通不过?string a;a="my";char *b="hello";char *c="world";b=c;return 0;}
[解决办法]
PPower回答的非常详细,可作参考。。。
关于:1、candybar snack={"wowo",1.2,100};
在我这边测试结论是跟编译器有关,环境为:IDE VC6, 编译器为默认时会出错,换为intel C++编译器时,编译通过,所以请换用较新的编译器试下
[解决办法]
对一些古老的编译器来说(VC6.0实在是太古老了,2008MS的产品,十几年了,现在都出VS2011了),C++的一些新标准不可使用。如果类中(对C++来说struct是特殊的class)有非基本类型(如类),它就不能初始化。
如果你一定要用vc6.0,可以这样:
#include <iostream>
using namespace std;
#include <string>
#include <cstring>
struct candybar{
string name;
double weight;
int kaluli;
candybar(string x,double y,int z)
{
name=x;
weight=y;
kaluli=z;
}
};
int main()
{
//candybar snack={"wowo",1.2,100};//这句为什么编译通不过?
candybar snack("wowo",1.2,100);
return 0;
}
当然,用
snack.name="wowo";
更方便些。
[解决办法]
看一下社区的帮助。有关结贴在第三点的第4小点
http://community.csdn.net/Help/HelpCenter.htm