Ich bin sehr neu dazu. Ich versuche, diesen Code, um neu zu schreiben den Pufferüberlauf zu entfernen, dieWie kann ich diesen einfachen C-Überlauf beheben?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE (1024)
int main(int argc, char* argv[]) {
char* inBuf;
char* outBuf;
char* fmt = "the winner is: %s";
inBuf = (char*) malloc(BUF_SIZE);
if (inBuf == NULL) {
return -1;
}
read(0, inBuf, BUF_SIZE);
outBuf = (char*) malloc(BUF_SIZE);
if (outBuf == NULL) {
return -1;
}
sprintf(outBuf, fmt, inBuf);
fprintf(stdout, "%s\n", outBuf);
fprintf(stderr, "%s\n", outBuf);
free(inBuf);
free(outBuf);
}
in den Zeilen 12 + 19 aufgenommen wird, wenn jemand einen Einblick über den besten Weg, diesen Ansatz bieten könnte? wäre sehr dankbar, danke.
C <> C++. Dies ist kein C++ - Code. Bitte fügen Sie keine Tags nach dem Zufallsprinzip hinzu, weil sie Ihnen bekannt vorkommen. Tags haben hier eine spezifische Bedeutung und Relevanz. Wenn Sie nicht wissen, in welcher Sprache Sie Code schreiben, sollten Sie Ihre Finger von der Tastatur nehmen und das herausfinden, bevor Sie versuchen, etwas anderes zu tun. Wenn Sie herausfinden möchten, * wie Sie dieses Problem beheben können, sollten Sie einige Details darüber wissen, wie Sie dies versucht haben. Das liest sich wie eine Hausaufgabe, die Sie uns beantworten lassen wollen. Wie denkst du, dass du fortfahren solltest? –
Sie lesen BUF_SIZE Zeichen und schreiben dann BUF_SIZE + 15 in outbuf. Außerdem überprüfen Sie nicht das Leseergebnis. – stark
Außerdem erzeugt 'read' keine gültige C-Zeichenfolge. Das heißt, es fügt keinen NUL-Terminator für Sie hinzu. Tun Sie das selbst: 'r = lesen (0, inBuf, BUF_SIZE-1); inBuf [r] = '\ 0'; '. Beachten Sie, dass am Ende der Zeichenfolge ein Newline-Zeichen verbleibt. – kaylum