私はこれに非常に新しいです。私は誰かがこれをアプローチする最良の方法にいくつかの洞察を提供することができればライン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