Warum dieser Fehler: incompatible pointer zu integer Umwandlung?
Bitte haben Sie einen Blick auf den code, schrillen bei mir die Fehlermeldung "incompatible pointer to integer conversion", warum ist es passiert?
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char* name;
name = malloc (sizeof(char) * 6);
*name = "david";
return 0;
}
InformationsquelleAutor daNullSet | 2012-12-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was auch immer geschieht, geschieht in dieser Zeile:
Den Typ der
*name
wärechar
werden, sind Sie wie die Dereferenzierung von derchar
Spitzen, vonname
. Die Art der"david"
istchar[6]
, da es eine string-literal von 6 chars (5 + null-terminator). Ein array-Typ zerfällt in einen Zeiger und einechar
ist ein integral-Typ; Ihre Zuordnung versucht, einen Zeiger auf ein integer, daherincompatible pointer to integer conversion
.Selbst wenn die linke Seite der Zuweisung hatte die richtige Art, Sie konnte nicht einfach kopieren von arrays mit dem Zuweisungsoperator. Wenn Sie festlegen möchten
name
zu"david"
haben, dann sollten Sie mitstrcpy( name, "david" )
.InformationsquelleAutor K-ballo
In C-Programmierung können Sie nie kopieren/zuweisen der string in einen Zeiger direkt wie
Können Sie nur kopieren Sie eine Zeichenfolge mit
memcpy()
(eingebaute Funktion).Um das Problem zu beheben, ersetzen Sie die Zeile*name = "david";
mitmemcpy(name,"david",sizeof("david"));
sizeof () - Funktion gibt die Größe der Zeichenfolge zusammen mit dem abschließenden null-Zeichen strlen() zählt nicht die NULL-Zeichen, die anwesend sein wird am Ende der Zeichenfolge.Also das Plus einer nach sizeof("david") ist nicht erforderlich.
Oh ja, du hast Recht. Es ist so viele Jahre das Letzte mal, dass ich codiert haben in C#, ich hab jetzt vergessen, seine grundlegenden Prinzipien. Sorry!
InformationsquelleAutor Keerthi Ranganath
Diese Zeile:
Lesen sollte
*name ist ein Synonym (in diesem Kontext) mit name[0] (d.h. das erste Zeichen in einem string zeigte auf, indem Sie die name-variable). Sie möchten, dass der name der variable und nicht den Inhalt des Zeigers zugewiesen werden, auf die gleiche Sache, die das string-literal "david" gerichtet ist.
InformationsquelleAutor Travis Griggs
suchen hier name nicht ein Zeiger auf Zeichen
mithilfe der library-Funktion malloc Sie haben es ein array von Zeichen
so können Sie einfach zeigen Sie es an eine beliebige Adresse wie ein Zeiger
verwenden Sie die library-Funktion strcpy(p,"david")
nur dann wird es Ihnen die gewünschten Ergebnisse
InformationsquelleAutor abhay jain