2013-03-18 2 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); 
    } 
} 

나는 왜이 프로그램이 기록 된 그대로 다시 반향되지왜 write()가 제대로 작동하지 않습니까? 콘솔에서

hello world 
hello world 
hello stackoverflow 
stackoverflow 
abcd 
efgh 
efgh 

있어?

+2

및 예상하셨습니까? – luchosrock

+7

'memset (word, 0, 255);',하지만'char word [100];'??? –

+0

쓰레기 입력, 쓰레기 수거. – Jens

답변

5

memset(word, 0, 255);으로 인해 정의되지 않은 동작이 발생합니다. 단어의 범위를 벗어나는 색인에 액세스하고 있습니다. 또한 단어에 strlen을 사용함에 따라 읽기가 수행되지 않으므로 항상 0으로 종료해야합니다.

+0

버퍼를 벗어난 memset()은 상태에 따라 정의되지 않습니다. 더 직접적인 문제는 두 번째 읽기가 timrau에 의해 식별되어 다음에 오는 5 자 문자열을 감추는 것입니다. 이 질문은 트롤처럼 보입니다. – Pekka

1

while 루프 끝에 count = read(in, word, 5);을 호출했습니다. 그 5 바이트가 삭제됩니다. 그렇기 때문에 "hello""hello stackoverflow"이고 "abcd\n""abcd\nefgh"입니다.

관련 문제