如何在C中声明string

可能重复:
内存分配char *和char []

任何人都可以解释这些代码行之间有什么区别

char *p = "String"; char p2[] = "String"; char p3[7] = "String"; 

我应该在什么情况下使用上面的每一个?

这个链接应该满足你的好奇心。

基本上(忘记你的第三个例子是坏的),1和2之间的不同是1为指向数组的空间分配空间。

但是在代码中,你可以像指针一样操作它们 – 唯一的事情是,你不能重新分配第二个指针。

C中的string表示为字符数组。

 char *p = "String"; 

你正在声明一个指向一个string的指针,它存储在你的程序的某个地方(修改这个string是未定义的行为),根据C语言编程。

 char p2[] = "String"; 

你正在声明一个用string“String”初始化的字符数组,给作为编译器的作业计算数组的大小。

 char p3[5] = "String"; 

你正在声明一个大小为5的数组,并用“String”初始化它。 这是一个错误,因为“string”不适合5个元素。

char p3[7] = "String"; 是正确的声明('\ 0'是Cstring中的终止字符)。

http://c-faq.com/~scs/cclass/notes/sx8.html

你不应该使用第三个,因为它错了。 “string”需要7个字节,而不是5个。

第一个是指针(可以被重新分配到不同的地址),另外两个被声明为数组,并且不能被重新分配到不同的内存位置(但是它们的内容可能改变,使用const来避免)。

 char *p = "String"; means pointer to a string type variable. 

char p3[5] = "String" ; 意味着您预先定义了数组的大小不超过5个元素。 请注意,对于string空“\ 0”也被视为一个元素。所以,这个语句会给出一个错误,因为元素的数量是7,所以它应该是:

 char p3[7]= "String";