2013-03-18 4 views
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 

Почему не эта программа вторя назад точно так, как это было написано?

+2

и вы ожидали? – luchosrock

+7

'memset (слово, 0, 255);', но 'char word [100];' ??? –

+0

Мусор в, мусор. – Jens

ответ

5

memset(word, 0, 255); вызывает неопределенное поведение. Вы получаете индекс за пределами слова. Также учтите, что при использовании strlen на слове, вы всегда должны иметь нулевое завершение, так как чтение не делает этого.

+0

memset() за пределами буфера, как вы заявляете, не определено. Более прямая проблема заключается в том, что второе считывается как идентифицированное timrau, которое проглатывает последующие ведущие 5-символьные строки. Этот вопрос кажется троллем. – Pekka

1

Вы вызвали count = read(in, word, 5); в конце цикла while. Это 5 байт. Вот почему "hello" в "hello stackoverflow" и "abcd\n" в "abcd\nefgh" отбрасываются.

Смежные вопросы