首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

string,char*char数组的区别解决方法

2012-03-05 
string,char*,char数组的区别望各位高人指点!!!!!!!!!#include iostreamusing namespace std#include

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类型的指针
[解决办法]

探讨
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

热点排行