如何在C中声明字符串


How to declare strings in C

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Memory Allocation char* and char[]

有人能给我解释一下这些代码行之间的区别吗

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

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


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

基本上(忘记第三个例子,这很糟糕),1和2之间的区别是1为指向数组的指针分配空间。

但是在代码中,您可以将它们作为指针来操作,这是唯一的一点,您不能重新分配第二个指针。


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

1
char *p ="String";

根据C编程语言2ed,您声明的指针指向存储在程序中某些位置的字符串(修改该字符串是未定义的行为)。

1
char p2[] ="String";

您要声明一个由字符串"string"初始化的char数组,该字符串将作业留给编译器来计算数组的大小。

1
char p3[5] ="String";

您要声明一个大小为5的数组,并用"string"初始化它。这是一个错误,因为"字符串"不适合5个元素。

char p3[7] ="String";是正确的声明(""是C字符串中的终止字符)。

http://c-faq.com/~scs/cclass/notes/sx8.html(中文)


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

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


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

char p3[5] ="String"表示您正在预先定义数组的大小,使其不超过5个元素。注意,对于字符串,空值"0"也被视为元素。因此,由于元素数为7,所以此语句将给出错误,因此它应该是:

1
char p3[7]="String";