Entschuldigung im Voraus für das Schreien, aber KOMPILIEREN SIE C NICHT ALS C++. Sie sind nicht dieselbe Sprache.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
24. Februar 11 um 2:36 Uhr
Diese Frage ist mit beiden markiert c und c++. Wählen Sie bitte eines aus und entfernen Sie dann das andere Tag.
– Leichtigkeitsrennen im Orbit
17. Mai ’11 um 19:44 Uhr
Karl Philipp
In C++ müssen Sie die Rückgabe von umwandeln malloc()
char *foo = (char*)malloc(1);
Wenn Sie C-Code schreiben (und das tun Sie), dann verwenden Sie die Erweiterung .c für den Dateinamen, und Sie werden gut sein.
– Karl Philipp
24. Februar 11 um 2:22 Uhr
@lost_with_coding – Wenn Sie C++ verwenden, markieren Sie es bitte nicht [c]. Du bist nicht dasselbe, wie diese Antwort deutlich zeigt.
– Chris Lutz
24. Februar 11 um 2:34 Uhr
Ich wollte nur darauf hinweisen, dass viele Leute es bevorzugen, dass die Besetzung auch in C aus Stilgründen explizit gemacht wird, insbesondere Arbeitsgruppen mit Programmierern, die viel zwischen C und C++ wechseln.
– Karl Bielefeldt
24. Februar 11 um 2:44 Uhr
@Karl Bielefeldt, aber es ist das Falsche, es in C zu tun, wenn es aus Stilgründen gemacht wird. Das Nichteinschließen von stdlib.h würde dazu führen, dass malloc implizit definiert wird und ein int zurückgibt. Dies zeigt Fehler an, wenn die Umwandlung zwischen int und einem Zeiger implizit ist, zeigt jedoch keine Fehler an, wenn eine explizite Umwandlung in den richtigen Typ vorliegt. Es ist sicherlich besser, die sicherere C-Form zu verwenden?
– James Greenhalgh
17. Mai ’11 um 22:34 Uhr
Eigentlich sollten Sie in C++ nicht benutzen malloc aber new
– Basile Starynkevitch
20. März 15 um 16:47 Uhr
Marlon
C++ ist typsicherer als C, daher können Sie nicht (automatisch) konvertieren vonvoid*zu ein anderer Zeigertyp. Da es sich bei Ihrer Datei um eine .cpperwartet Ihr Compiler C++-Code und, wie bereits erwähnt, wird Ihr Aufruf von malloc nicht kompiliert, da Sie a zuweisen char* zu einem void*.
Wenn Sie Ihre Datei in a ändern .c dann erwartet es C-Code. In C muss kein Cast between angegeben werden void* und ein anderer Zeigertyp. Wenn Sie Ihre Datei in a ändern .c es wird erfolgreich kompiliert.
Ich nehme an, das ist die Zeile mit malloc. Gießen Sie dann einfach das Ergebnis – char *foo = (char*)...
Also, was war Ihre Absicht? Versuchen Sie, ein C-Programm oder ein C++-Programm zu schreiben?
Wenn Sie ein C-Programm benötigen, dann kompilieren Sie es nicht als C++, dh geben Sie Ihrer Datei entweder keine “.cpp”-Erweiterung oder bitten Sie den Compiler explizit, Ihre Datei als C zu behandeln. In C-Sprache sollten Sie das Ergebnis nicht umwandeln von malloc. Ich gehe davon aus, dass Sie dies benötigen, da Sie Ihre Frage als markiert haben [C].
Wenn Sie ein C++-Programm benötigen, das mallocdann haben Sie keine andere Wahl, als den Rückgabewert von explizit umzuwandeln malloc zum richtigen Typ.
.
7579000cookie-checkUngültige Konvertierung von `void*’ nach `char*’ bei Verwendung von malloc?yes
Ja, es ist wichtig. Sehen david.tribble.com/text/cdiffs.htm#C99-void-ptr .
– Adam Rosenfield
24. Februar 11 um 2:34 Uhr
Entschuldigung im Voraus für das Schreien, aber KOMPILIEREN SIE C NICHT ALS C++. Sie sind nicht dieselbe Sprache.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
24. Februar 11 um 2:36 Uhr
Diese Frage ist mit beiden markiert
c
undc++
. Wählen Sie bitte eines aus und entfernen Sie dann das andere Tag.– Leichtigkeitsrennen im Orbit
17. Mai ’11 um 19:44 Uhr