3

当尝试在 C 中使用 fgets 读取纯文本文件时,我在第一行得到一些看起来很奇怪的输出。因此,如果第一行的意思是“你好”,它会显示为“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;
}

我已经搜索了我可以在谷歌和堆栈溢出上给出的关于这个问题的所有描述,但我找不到任何可以修复它的东西。

4

1 回答 1

4

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

argv[0]如果你有一个所谓的多二进制可执行文件,检查是有帮助的。在那里,您只需一个二进制文件即可处理不同的命令。这对于需要节省内存的嵌入式系统非常有用。

于 2012-10-31T06:15:32.747 回答