当尝试在C中读取带有fgets的纯文本文件时,我会在第一行看到一些奇怪的输出。因此,如果第一行是“hello”,它就像“ELFh` 20120918(预发行)@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;
}
我已经搜索了我可以在谷歌和堆栈溢出上给出的这个问题的每一个描述,我什么也都找不到修复它。
答案 0 :(得分:4)
你的循环必须从索引1开始。argv[0]
是你的可执行文件。
如果您有一个所谓的多二进制可执行文件,那么检查argv[0]
会很有帮助。只需一个二进制文件,您就可以处理不同的命令。这对于需要节省内存的嵌入式系统非常有用。