将字符串赋值给字符数组

将字符串赋值给字符数组

我对以下情况感到有点惊讶。


例1:


char s[100] = "abcd"; // declare and initialize - WORKS

例2:


char s[100]; // declare

s = "hello"; // initalize - DOESN'T WORK ('lvalue required' error)

我想知道为什么第二种方法行不通。这似乎是很自然的,它应该(它与其他数据类型一起工作)?有人能解释一下背后的逻辑吗?


汪汪一只猫
浏览 664回答 3
3回答

宝慕林4294392

初始化数组时,C允许用值填充数组。所以char s[100] = "abcd";基本上和int s[3] = { 1, 2, 3 };但是它不允许你做这个任务,因为s是数组而不是空闲指针。意义s = "abcd"的指针值。abcd到s但你不能改变s从那时起,任何东西都不会指向数组。如果s是char*-可以指向任何东西的指针。如果要复制字符串,请简单使用strcpy.

蝴蝶刀刀

在C中没有所谓的“字符串”,在C中,字符串是char,以空字符结尾。\0..由于不能在C中分配数组,所以也不能分配字符串。字面上的“hello”是句法糖const char x[] = {'h','e','l','l','o','\0'};正确的方法是:char s[100];strncpy(s, "hello", 100);或者更好:#define STRMAX 100char    s[STRMAX];size_t  len;len = strncpy(s, "hello", STRMAX);

撒科打诨

1    char s[100];2    s = "hello";在您提供的示例中,s实际上是在第1行初始化的,而不是在第2行初始化的。在第2行,您正在执行赋值操作,并且不能将一个字符数组分配给另一个字符数组,如以下所示。您必须使用strcpy()或某种循环来分配数组的每个元素。
打开App,查看更多内容
随时随地看视频慕课网APP