我對此很新。我想,以去除在線路12 + 19我該如何解決這個簡單的C溢出問題?
#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);
}
拿起如果有人能提供接近這一目標的最佳途徑一些有識之士的緩衝區溢出來重新編寫代碼?會非常感謝你。
C <> C++。這不是C++代碼。請不要隨意添加標籤,因爲它們看起來很熟悉。標籤在此具有特定的含義和相關性。如果你不清楚你正在編寫哪種語言的代碼,你應該從鍵盤上取下你的手指,並在嘗試做其他事情之前弄清楚。另外,如果你想弄清楚如何解決這個問題,你應該有一些關於你如何嘗試這樣做的細節。這就像一個家庭作業,你試圖讓我們爲你回答。你覺得你應該怎麼做? –
您正在讀取BUF_SIZE字符,然後將BUF_SIZE + 15寫入outbuf。另外,您不檢查讀取的結果。 – stark
另外,'read'不會生成有效的C字符串。也就是說,它不會爲您添加NUL終結符。自己做:'r = read(0,inBuf,BUF_SIZE-1); inBuf [r] ='\ 0';'。請注意,這會在字符串的末尾留下換行符。 – kaylum