C中的char数组声明

时间:2014-08-04 09:55:03

标签: c

我一直在读K& R的C书。我碰到了这个词

字符数组是初始化的特例;可以使用字符串代替大括号和逗号表示法:

char pattern = "ould";

是较长但等效的简写

char pattern[] = { 'o', 'u', 'l', 'd', '\0' };

在这种情况下,数组大小为五(四个字符加上终止'\ 0')。

我编写了一个简单的程序来测试它

#include<stdio.h>
int main()
{
    char c= "Hello";
    printf("%s",c);
    return 0;
}

根据那本书,应该没有错误,但它会返回错误

`cannot convert char * to char` 

根据我之前对数组的了解,数组语句应该像char *c="Hello";   你能解释一下这本书中的单词的含义吗?我误解了那个词的含义吗?

2 个答案:

答案 0 :(得分:2)

嗯,它缺少两个括号。 char pattern[] = "ould";可以正常使用。是时候把那本书弄丢了!

答案 1 :(得分:1)

应该是:

char pattern[] =  "ould" ;

还要小心:

char* pattern = "ould";  

请注意,使用“”定义一个const字符数组。在应用程序执行期间,它应该不再更改。如果你这样做:

pattern[2] = '9'; 

您的应用可能会崩溃。

正确的是:

const char* pattern = "ould";

为什么?您的编译器可能会在受保护的只读内存块中分配“ould”,而模式只是指向它的指针。但是,如果您定义:

char pattern[] = { 'o', 'u', 'l', 'd', '\0' };

完全不同。它是本地程序堆栈中的可修改缓冲区。你可以写出模式[2] ='9';在这种情况下。它与定义大小为5的char缓冲区并在其中复制文本相同。请从其他地方读取字符串初始化和字符串文字。