如何在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中的终止字符)。
你不应该使用第三个,因为它错了。 “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";