使用fgets读取文本文件时出现奇怪的符号

3

在C语言中,尝试使用fgets读取纯文本文件时,第一行输出的结果可能会出现一些奇怪的字符。例如,如果第一行应该是“hello”,输出的结果可能会是类似于“ELFh` �� 20120918 (prerelease)@xxhello”的形式。以下是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    FILE *fr;
    int i;
    extern int uniq(char *previous_word, char *current_word);
    char *line1 = malloc(500);
    char *line2 = malloc(500);
    char *temp;
    for(i = 0; i<argc; i++)
    {

        fr = fopen (argv[i], "r");
        while(fgets(line2, 499, fr) != NULL)
        {
            uniq(line1, line2);
            temp = line1;
            line1 = line2;
            line2 = temp;
        }
        fclose(fr);
    }
    return 0;
}
int uniq(char *previous_word, char *current_word) {
    if(!(current_word))
        return 1;
    if(strcmp(previous_word, current_word))
        printf("%s", current_word);
    return 0;
}

我在谷歌和Stack Overflow上搜索了关于这个问题的所有描述,但是没有找到任何解决方法。


3
那个 ELF 看起来像是你在阅读一个 Linux 可执行文件。 - rekire
1
请注意,argv[0]是您的应用程序可执行文件的名称,而不是传递给您的应用程序的第一个参数,这是您所假设的。请查看此线程:https://dev59.com/vXI-5IYBdhLWcg3wFkOO - Jack
1个回答

4

循环必须从索引1开始。 argv [0] 是可执行文件。

检查 argv [0] 对于具有所谓的多二进制可执行文件非常有帮助。您可以使用一个二进制文件处理不同的命令。这在需要节省内存的嵌入式系统上非常有用。


我修正了一些拼写错误,但是我很想把“multi binary execrable”保留下来。8-) - Keith Thompson
哎呀,这种情况发生在你在地铁上帮忙的时候。 - rekire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接