gpt4 book ai didi

c - stdio 过滤器在管道传输时崩溃

转载 作者:行者123 更新时间:2023-12-02 03:30:17 24 4
gpt4 key购买 nike

我已经使用 strfry 编写了一个变位字符串程序。它在默认标准输入下工作得很好,但在与 stdio 重定向一起使用时会崩溃(函数,但最后会出现段错误):

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/mman.h"

int main(int argc,char *argv[]) {
FILE *fryend=stdin;
if (argc==1) goto mainloop;
if (argc>1) fryend=fopen(argv[1],"r") ? fryend : stdin;

mainloop:;
char *buf=malloc(4096);
while (!ferror(fryend)) {
memset(buf,0,4096);
strfry(fgets(buf,4095,fryend));
fputs(buf,stdout);
}
free(buf);
if (fryend!=stdin) fclose(fryend);
return 0;
}

这里有什么问题?使用 GNU libc/GCC。运行 valgrind,没有检测到内存泄漏。

最佳答案

重写这一行

if (argc>1) fryend=fopen(argv[1],"r") ? fryend : stdin;

没有条件运算符。

也许是这样

if (argc > 1) {
FILE *tmp = fopen(argv[1], "r");
if (tmp) fryend = tmp;
}

关于c - stdio 过滤器在管道传输时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27341191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com