2017-08-22 3 views
-1

Im 2D-Array, direkte Zuordnung von String zu Char-Array, erhalten einen Fehler.Direkte Zeichenkette an Char-Array in C zuweisen

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

Aber mit strcpy, kopieren Sie die String-Array adaequat verkohlen.

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

Warum der erste Fall nicht funktioniert?

+3

Es gibt Unmengen von Fragen wie diese auf SO. – Michi

+1

Können wir bitte einen besseren Betrogenen haben? Das ist zu sehr zu C++ geneigt. –

+3

Das ist kein DUP – Michi

Antwort

2

Da ein Array-Typ kein modifizierbarer L-Wert ist, kann er daher nicht "zugewiesen" werden.

Ein Zuweisungsoperator benötigt einen modifizierbaren Lvalue als LHS-Operanden.

Related unter Angabe C11 Kapitel §6.5.16

einen Zuweisungsoperator hat einen änderbaren lvalue als seine linken Operanden haben.

und Kapitel §6.3.2.1

[....] A modifizierbaren lvalue ein L-Wert ist, dass nicht-Array-Typ hat, nicht ein unvollständiges Typ haben, nicht haben einen constqualified Typ, und wenn es eine Struktur oder Union ist, hat kein Mitglied (einschließlich, rekursiv, jedes Mitglied oder Element aller enthaltenen Aggregate oder Vereinigungen) mit einem constqualified Typ.

In Ihrem Fall für eine Anordnung wie definiert

char name[5][10]; 

das Element name[0] vom Typ char [10], das heißt, ein Array von 10 char s.

+0

Wahrscheinlich wird es interessant sein über "strcpy" und wie es funktioniert zu erwähnen. Vielleicht wird das OP dann klarer verstehen, warum es mit 'strcpy' arbeitet und warum es nicht mit seinem Ansatz funktioniert. :) – Michi

+2

@Michi gut, das wäre zu viel (zu breit). OP behauptet bereits zu wissen, warum strcpy funktioniert, aber keine direkte Zuordnung. –

1

Da C nicht zu einem Array zuweisen kann. Es ist eine Einschränkung in der Sprache.

Beachten Sie, dass zu einem struct zuweisen können, auch wenn es enthält ein Array:

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

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