在二維數組中,將直接字符串分配給字符數組,得到錯誤。將直接字符串分配給C中的字符數組
char name[5][10];
name[0] = "hello";
但是,使用strcpy
,將字符串複製到字符數組工作正常。
char name[5][10];
strcpy(name[0],"hello");
爲什麼第一種情況不起作用?
在二維數組中,將直接字符串分配給字符數組,得到錯誤。將直接字符串分配給C中的字符數組
char name[5][10];
name[0] = "hello";
但是,使用strcpy
,將字符串複製到字符數組工作正常。
char name[5][10];
strcpy(name[0],"hello");
爲什麼第一種情況不起作用?
因爲數組類型不是可修改的左值,因此不能被「分配」。
賦值運算符需要一個可修改的左值作爲LHS操作數。
相關,報價C11
,章§6.5.16
賦值操作員有修改的左值作爲其左操作數。
和,章§6.3.2.1
[....]一種修改的左值是一個左值即 不具有陣列型,不具有不完整的類型,不具有constqualified 類型,並且如果它是一個結構或聯合,沒有任何構件(包括, 遞歸,任何成員或所有的元件包含聚集體或聯合)與constqualified 類型。
在你的情況下,對於數組定義像
char name[5][10];
元件name[0]
是char [10]
類型的,也就是10 char
秒的陣列。
可能有趣的是提及'strcpy'及其工作原理。也許那麼OP會更清楚地理解爲什麼它會與'strcpy'一起工作,以及爲什麼它不適用於它的方法。 :) – Michi
@Michi很好,那會太多(太寬泛)。 OP已經聲稱知道爲什麼strcpy可以工作,但不能直接分配。 –
因爲C不允許分配給一個數組。這是語言的一個限制。
請注意,您可以分配爲struct
,即使包含數組:
#include <stdio.h>
struct x
{
char s[20];
};
int main(void)
{
struct x x;
x = (struct x){ "test" };
puts(x.s);
}
有無數這樣的做題的。 – Michi
我們可以請一個更好的欺騙?這太過於傾向於C++。 –
那不是一個DUP – Michi