【发布时间】:2021-04-12 13:55:34
【问题描述】:
所以,我的问题很简单,我不知道为什么第一段代码不能正常工作。 该程序从管道中读取一个 12 个字符的字符串,并且 strcat 函数每次执行该函数时都会将 buff 的指针从第一个字符移动到下一个字符,因此经过几次交互后,read 函数使程序失败,因为缓冲区是不够大了。 使用 sprintf 函数和另一个字符串解决了这个问题,但我不明白是什么导致了问题。 感谢您的帮助。
int n;
char buff[15];
close(fd[1]);
while(n = read(fd[0],buff,12) > 0){
strcat(buff,"\n");
write(1,buff,13);
buff[0] = '\0';
}
int n;
char buff[15];
char output[15];
close(fd[1]);
while(n = read(fd[0],buff,12) > 0){
sprintf(output,"%s\n",buff);
write(1,output,13);
buff[0] = '\0';
}
【问题讨论】:
-
查找
strcat和sprintf的描述! -
while(n = read(fd[0],buff,12) > 0)也是错误的。查找=和>的优先级 -
还有
write(1,output,13);:如果你先问n,为什么要写13个字节? -
移动的不是第一个字符而是最后一个字符。
-
@PaulOgilvie
fd未在此处声明。您是如何获得这些知识的?