我对此很新。我想,以去除在线路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