Объявление символьного указателя как глобальной и локальной переменной при использовании pipe () варьируется

#include<stdio.h>
#include<unistd.h>
char *msg1="HELLLO",*msg2="NONONO";//global declaration prints without any garbage value
int main()
{
/*char *msg1="HELLLO",*msg2="NONONO";"global declaration prints with garbage value */
char buf[6];
int file[2],i;
if(pipe(file) < 0)
    printf("\nyou are out");
write(file[1],msg1,6);
write(file[1],msg2,6);
for(i=1;i<=2;i++){
    read(file[0],buf,6);
    printf("\n%s",buf);}
return 0;

}

Выход: Как глобальная переменная: ПРИВЕТ НЕТ НЕТ НЕТ

В качестве локальной переменной: ПРИВЕТ NONONO▒▒▒

char buf[6]; read(file[0],buf,6); - в буфере нет места для завершающего символа NUL. en.wikipedia.org/wiki/C_string_handling
axiac 11.04.2018 13:36
А также вы также не завершаете нулевым значением. read(2) не оканчивается нулем.
P.P 11.04.2018 13:40

Также прочтите этот вопрос: stackoverflow.com/questions/4418708/…

axiac 11.04.2018 13:40

файл [2] должен быть неинициализированным? это здорово

purec 11.04.2018 13:46
0
4
30
0

Другие вопросы по теме