Typkonvertierung die dritte
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du kannst sprintf auf diese Art nicht benutzen; stell dir mal vor, pCharTemp beinhaltet ein Prozentzeichen, etwa
char const *pCharTemp = "Ich bin eine Benutzereingabe %s %d %x, die ein %s Cracker so präpariert" "hat, dass %g sie dir den Stack zerlegt %s %s %c";
Richtig wäre
snprintf(charTemp, 100, "%s", pCharTemp);
@sudo: sprintf_s ist eine Microsoft-Erweiterung. snprintf ist im C99-Standard enthalten und macht so ziemlich das selbe.
-
danke, funktioniert wunderbar!
-
seldon schrieb:
snprintf(charTemp, 100, "%s", pCharTemp);
Huh? Warum nicht strncpy() nehmen?
-
strncpy geht natürlich auch, nur musst du da zur Sicherheit halt von Hand null-terminieren (strncpy macht das nicht, falls der Eingabestring länger ist als der Ausgabebuffer). Also
strncpy(charTemp, pCharTemp, 99); charTemp[99] = '\0';
-
du meinst so:
char *bla; char blub[500]; bla = argv[1]; strncpy(blub, bla, 500); blub[500] = '\0';
???
-
So gibt es immer einen schönen seg.fault
-
Feuerklinge schrieb:
So gibt es immer einen schönen seg.fault
Oder auch nicht.
-
Array-Indices laufen von 0 bis Länge - 1, also kannst du
char blub[500]; blub[500] = '\0'; // KAWUMM!
nicht machen. Du kannst prinzipiell zwar
strncpy(blub, bla, 500); blub[499] = '\0';
schreiben, aber das letzte Zeichen des Buffers mitauszunutzen, bringt nicht wirklich etwas, wenn du es danach sowieso überschreibst.
-
seldon schrieb:
Du kannst prinzipiell zwar
strncpy(blub, bla, 500); blub[499] = '\0';
schreiben, aber das letzte Zeichen des Buffers mitauszunutzen, bringt nicht wirklich etwas, wenn du es danach sowieso überschreibst.
Verstehe ich nicht.