0
int main() {
    int in = STDIN_FILENO;
    int out = STDOUT_FILENO;
    char word[100];
    int count;

    while ((count = read(in, word, 100)) != 0) {
        write(out, word, strlen(word));
        memset(word, 0, 255);
        count = read(in, word, 5);
    }
}

私が手に入れたコンソールで

hello world
hello world
hello stackoverflow
 stackoverflow
abcd
efgh
efgh

このプログラムが書かれたとおりにエコーバックしないのはなぜですか?

4

2 に答える 2

5

memset(word, 0, 255);未定義の動作を引き起こしています。ワードの範囲外のインデックスにアクセスしています。strlenまた、on word を使用しているため、read はそれを行わないため、常にゼロ終端する必要があることに注意してください。

于 2013-03-18T16:04:20.737 に答える
1

ループcount = read(in, word, 5);の最後に呼び出しました。whileその 5 バイトがドロップされます。そのため、"hello"イン"hello stackoverflow""abcd\n"イン"abcd\nefgh"はドロップされます。

于 2013-03-18T16:07:16.873 に答える