【问题标题】:Assigning direct string to char array in C [duplicate]在C中将直接字符串分配给char数组[重复]
【发布时间】:2018-01-30 15:56:28
【问题描述】:

在二维数组中,直接将字符串赋值给char数组,报错。

char name[5][10];
name[0] = "hello";

但是,使用strcpy,将字符串复制到 char 数组工作正常。

char name[5][10];
strcpy(name[0],"hello");

为什么第一个案例不起作用?

【问题讨论】:

  • SO上有很多这样的问题。
  • 我们能不能有一个更好的欺骗?这太倾向于 C++了。
  • 那不是 DUP
  • @Michi 确实如此,但现在它已经关闭并且我正在考虑它,必须有一个......
  • 希望将欺骗链接修复到合适的地方

标签: c arrays string variable-assignment


【解决方案1】:

因为数组类型不是可修改的左值,因此不能“赋值”。

赋值运算符需要一个可修改的左值作为 LHS 操作数。

相关,引用C11,第 6.5.16 章

赋值运算符应该有一个可修改的左值作为它的左操作数。

以及第 §6.3.2.1 章

[....] 可修改的左值是一个左值 没有数组类型,没有不完整的类型,没有 constqualified 类型,如果它是结构或联合,则没有任何成员(包括, 递归地,所有包含的聚合或联合的任何成员或元素)具有 constqualified 输入。

在您的情况下,对于定义为的数组

char name[5][10];

元素name[0]的类型为char [10],即10个chars的数组。

【讨论】:

  • 提到strcpy 及其工作原理可能会很有趣。也许那时 OP 会更清楚地理解为什么它与 strcpy 一起工作以及为什么它不能与它的方法一起工作。 :)
  • @Michi 好吧,那太多了(太宽泛了)。 OP 已经声称知道为什么 strcpy 有效但不直接分配。
【解决方案2】:

因为 C 不允许分配给数组。这是语言的限制。

请注意,您可以分配给struct,即使它包含一个数组:

#include <stdio.h>
struct x
{
    char s[20];
};

int main(void)
{
    struct x x;
    x = (struct x){ "test" };
    puts(x.s);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 2012-05-03
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2012-01-11
    相关资源
    最近更新 更多