gpt4 book ai didi

c - 在 cat 实现中以文本而不是二进制格式打印

转载 作者:行者123 更新时间:2023-11-30 21:20:58 34 4
gpt4 key购买 nike

cat程序的实现是在Ubuntu终端上以二进制格式打印。我正在使用 stdout 宏(FILE* 类型的对象)。

#include <stdio.h>

main(int argc, char** argv)
{
FILE *fp;
void add(FILE*, FILE*);
if (argc==1)
add(stdin,stdout);
else
while(--argc>0)
{
if ((fp=fopen(*++argv,"r"))==NULL)
{
printf("cat:can't open %s\n",*argv);
return 1;
}
else
{
add(fp,stdout); // printing all the file content on the screen.
fclose(fp);
}
return(0);
}
}

void add(FILE*p,FILE*q)
{
int c;
while((c=fgetc(p))!=EOF)
{
fputc(c,q);
}
}

现在,如何以文本格式而不是二进制格式打印?

最佳答案

错误在于您如何循环参数。剥离实际文件处理的代码并将其替换为打印语句(并且也很好地缩进它),我们得到:

if (argc == 1)
printf("stdin\n");
else
while (--argv > 0) {
printf("'%s'\n", *++argv);
}

您在代码中将 argc 输错为 argv。这意味着您递减第一个参数的指针,然后在处理文件之前再次递增它。实际上,您最终会一遍又一遍地处理 argv[0]。该文件就是程序本身,它是二进制的,包含许多不可打印的字符。

您应该将循环更改为

    while (--argc > 0) {
printf("'%s'\n", *++argv);
}

或使用行人for循环:

    for (int i = 1; i < argc; i++) {
printf("'%s'\n", argv[i]);
}

关于c - 在 cat 实现中以文本而不是二进制格式打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169820/

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