나는 C가 처음이므로 다음과 같은 행동으로 완전히 혼란 스럽다.read() 버퍼의 횡설수설?
n = read(fd[0], readbuffer, sizeof(readbuffer));
printf("received: %s", readbuffer);
그러나, printf
는 '사람들의 무리를 인쇄 : C에서 읽기 함수에 대한 호출을 통해
puts "success"
: 나는 다음과 같은 사소한 루비 프로그램의 출력을 읽고있다 pipe()
및 fork()
사용 인식 할 수없는 문자 '기호 (예 : 다이아몬드의 물음표)를 콘솔에 보냅니다. 또한 다음과 같은 비교를 수행하십시오.
if (strcmp(readbuffer, "success") == 0)
{
/* do something */
}
이 실패합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 : 요청한대로 신고하십시오. 나는 memsetting에 대해 아무 생각, C.
나의 첫 날이 없다int fd[2], in;
pid_t pid;
char readbuffer[6];
편집 :에 의해
대답 'MU가 너무 짧은'또한 문제를 해결한다. 합의는 memset
을 사용하는 것이 과잉이라고 생각합니다. 나는 초보자 C 프로그래머이므로 주석가의 의견을 믿어야한다. 그러나 이것은 argumentum ad populum이며 mu가 너무 짧으면 실제로 오른쪽에 더 많을 수 있습니다. 어쨌든, 나는 두 가지 대답을 읽는 것을 권장합니다. '과잉 공격'은 아마도 그렇게 쉽게 일어날 수 있습니다.
사용하기 전에 버퍼를'0'으로'memset' 했습니까? 그렇지 않으면 버퍼가 null로 종료되지 않고 쓰레기 값을 제공합니다. –
readbuffer를 static 또는 global로 선언하면 0으로 초기화됩니다. – DigitalRoss
선언과 함께 편집 된 readbuffer 및 fd –