我遇到了一个相当离奇的问题在这里。我使用的fopen和fprintf写一个句子到一个文件:写入文件,但无法找到数据时,我从桌面上拉起文件
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <string.h>
int main (void) {
FILE *fp;
fp = fopen("wageData.txt","w");
fprintf(fp, "Hi, I like pie");
return 0;
}
然而,当我打开wageData.txt在桌面上,是绝对没有它。在另一方面,如果我尝试读取文件,我得到的信息:
#include <stdio.h>
int main (void) {
//FILE *fp;
//fp = fopen("wageData.txt","r+");
FILE *c;
if ((c = fopen("wageData.txt","r")) == NULL)
printf("File not available");
else {
char x[3][6];
int i = 0;
while (fgets(x[i], 30, c) != NULL) {
i++;
}
for (i = 0; i < 6; i++) {
printf("%s\n", x[i]);
}
}
return 0;
}
编译,它会导致:
Hi, I like pie
like pie
ie
[?
m?iՖ
logout
[Process completed]
有人可以告诉我这到底是怎么回事呢?提前致谢。
char x [** 3 **] [** 6 **]; – BLUEPIXY
首先,在调用fgets时,你不应该让更多的字符比你有内存。使用你的代码,你只能读取3个字符串,每个字符6个字符,所以你不应该通过30,但6,你不应该循环直到EOF,但只循环3次。 你的第二个循环是从可能的3个字符串列表中打印6个字符串。 你基本上是打印随机部分的内存,并得到完全按预期的随机结果。 我认为你应该使用我,你打算看看有多少字符串在你打印时读出。它可能是0,没有读到。 – Cobusve
'char x [3] [6]中的尺寸;'不匹配你使用'x'的方式,并且如果文件具有''fgets超过17个字符。无论如何,你正在用'printf()'循环读出界限。另外,您确定桌面上的文件与您的程序写入的文件相同吗?会不止有一个? – Dmitri