2017-08-22 129 views
-1

在二維數組中,將直接字符串分配給字符數組,得到錯誤。將直接字符串分配給C中的字符數組

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

但是,使用strcpy,將字符串複製到字符數組工作正常。

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

爲什麼第一種情況不起作用?

+3

有無數這樣的做題的。 – Michi

+1

我們可以請一個更好的欺騙?這太過於傾向於C++。 –

+3

那不是一個DUP – Michi

回答

2

因爲數組類型不是可修改的左值,因此不能被「分配」。

賦值運算符需要一個可修改的左值作爲LHS操作數。

相關,報價C11,章§6.5.16

賦值操作員有修改的左值作爲其左操作數。

和,章§6.3.2.1

[....]一種修改的左值是一個左值即 不具有陣列型,不具有不完整的類型,不具有constqualified 類型,並且如果它是一個結構或聯合,沒有任何構件(包括, 遞歸,任何成員或所有的元件包含聚集體或聯合)與constqualified 類型。

在你的情況下,對於數組定義像

char name[5][10]; 

元件name[0]char [10]類型的,也就是10 char秒的陣列。

+0

可能有趣的是提及'strcpy'及其工作原理。也許那麼OP會更清楚地理解爲什麼它會與'strcpy'一起工作,以及爲什麼它不適用於它的方法。 :) – Michi

+2

@Michi很好,那會太多(太寬泛)。 OP已經聲稱知道爲什麼strcpy可以工作,但不能直接分配。 –

1

因爲C不允許分配給一個數組。這是語言的一個限制。

請注意,您可以分配struct,即使包含數組:

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

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