繁体   English   中英

从文件写入和读取时的C文件IO额外字符

[英]C file IO extra characters when writing and reading from file

好的,我正在写一个C程序。 程序很简单,当我运行程序时,我给它一些参数Ex ./proj1猫帽蝙蝠,所以它要求我输入一个单词列表,程序给出了多少次“猫”,“帽子” “和”bat“出现在该列表中。 我的程序运行良好。

Example 
./pro1 cat hat bat
cat
.

(程序识别出“。”作为输入的结尾)

Result:
cat:1
hat:0
bat:0

好的,所以我的程序在我能想到的每个测试用例中都能完美运行,但是我必须通过我教授所做的一系列测试。 这是该测试的代码。

char *args[] = {"./main", "cat", "hat","bat",NULL};
char *result[] = {"Looking for 3 words\n",
  "Result:\n",
  "cat:1\n",
  "hat:0\n",
  "bat:0\n"};
FILE *out;
FILE *test;
test=fopen("test","w");
int i;
char *buffer=malloc(100*sizeof(char));

out = fopen("smp0.in", "w");
fprintf(out, "cat\n");
fprintf(out, ".\n");
fclose(out);

freopen("smp0.in", "r", stdin);


freopen("smp0.out", "w", stdout);

quit_if(main(4, args) != EXIT_SUCCESS);

fclose(stdin);
fclose(stdout);

out = fopen("smp0.out", "r");


for (i = 0; i < 5; i++) {
    quit_if(fgets(buffer, 100, out) == NULL);
    quit_if(strcmp(buffer, result[i]));
}


fclose(out);
return EXIT_SUCCESS;
 }

好的,所以发送quit_if()是使其失败的方法。 特别

   quit_if(strcmp(buffer, result[i]));

我运行程序时的输出完全如上所述。 但是在freopen()将stdout转移到文件然后再读回来之间它已经发生了某些变化。

  Result:
  cat:1
  hat:0
  batÿ:0

输出变成了什么,但它不像文件写入和读取之前那样,并且由于某种原因它总是那个奇怪的y字符。

任何建议将不胜感激。 很抱歉没有发布更多代码,但这是因为它是一个学校项目。 我确信在某种程度上测试是错误的而不是我的代码,修复测试也是项目的一部分。

查看上一个问题的答案:

https://stackoverflow.com/a/4906442/2009431

似乎当从stdin文件中读回点时,它附加了一个EOF标记(有意义),通常不会成为用户输入的一部分。 然后,不知何故(不确定,因为我们看不到你的代码)你的main()函数将这个EOF字符以怪异的y字符的形式附加到“bat”(有关原因的详细信息,请参阅链接的答案)。

如果我是对的,也许这可能被视为测试中的错误?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM