Initialisieren ein array von char-Pointer mit malloc
typedef struct {
char * array[10];
} List;
int main(void) {
List input;
input.array = (char **)malloc(10 * sizeof(char));
if (input.array == NULL)
exit(EXIT_FAILURE);
for (i = 0; i < 10; i++) {
input.array[i] = (char *)malloc(10 * sizeof(char));
if (input.array[i] == NULL)
exit(EXIT_FAILURE);
}
}
Ich bin versucht zu initialisieren Sie ein array von 10 char-Zeiger, die jeder Punkt zu einem anderen string der Länge 10.
Erhalte ich die folgende Fehlermeldung vom gcc:
incompatible types when assigning to type ‘char *[10]’ from type ‘char **’
Mein Aufruf von malloc muss nicht richtig sein, aber wie so?
Einfach, Sie können nicht zuweisen arrays. Fallen die
Ah, und Leute, bitte nicht upvote diese Frage, es ist eine schlechte dupe.
Vielen Dank für das feedback.
input.array = (char **)malloc(10 * sizeof(char));
Linie. Auch, nicht immer wandeln Sie die return-Wert malloc()
!Ah, und Leute, bitte nicht upvote diese Frage, es ist eine schlechte dupe.
Vielen Dank für das feedback.
InformationsquelleAutor airietis | 2013-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
char *array[10]
deklariert ein array von 10 Zeigern aufchar
. Es ist nicht notwendig, ummalloc
Speicher für dieses array werden; es ist eingebettet instruct List
. So, den ersten Anruf zumalloc
unnötig ist, so ist die Prüfung unmittelbar danach.Den Aufruf
malloc
innerhalb der Schleife, und prüfen Sie nach, korrekt sind.Auch in C, nicht umgewandelt den Rückgabewert von
malloc
; es kann tatsächlich verbergen bugs.Zudem auch
sizeof(char)
1 per definition und deshalb sollte man niemals schreiben.InformationsquelleAutor zwol
malloc(10 * sizeof(char*));
müssen Sie reservieren 10 char-Zeiger (4 byte /8byte) und nicht 10 Zeichen (1 byte)
//Edit: ich ignorierte die struct. erste malloc ist nicht notwendig. Siehe die andere Antwort.
10 * sizeof(*pointeer)
) ist sicherer. Aber das ist immer noch falsch, siehe die andere Antwort.oh, ich völlig ignoriert das struct, sorry. Du hast Recht.
InformationsquelleAutor robin.koch