我一直在读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";
你能解释一下这本书中的单词的含义吗?我误解了那个词的含义吗?
答案 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缓冲区并在其中复制文本相同。请从其他地方读取字符串初始化和字符串文字。