【发布时间】:2019-09-06 13:40:13
【问题描述】:
似乎我不太了解文件流的工作原理。我的文本文件现在包含以下整数:1 10 5 4 2 3 -6,但我希望程序能够从文件中读取任意数量的整数,如果它改变的话。
显然我什至没有使用正确的功能。 我写的代码如下:
int main() {
printf("This program stores numbers from numeri.txt into an array.\n\n");
int a[100];
int num;
int count = 0;
FILE* numeri = fopen("numeri.txt", "r");
while (!feof(numeri)) {
num = getw(numeri);
a[count] = num;
if (fgetc(numeri) != ' ')
count++;
}
int i;
for (i = 0; i < count; i++) { printf("%d ", a[i]); }
return 0;
}
我希望它打印出包含存储数字的数组,但我得到的只是:540287029 757084960 -1
谁能帮我理解我做错了什么,也许可以告诉我如何正确编写这种代码?
【问题讨论】:
-
什么是
getw?它有什么作用? -
man
putw/getw: getw() 从流中读取一个单词(即一个 int)。提供它是为了与 SVr4 兼容。我们建议您改用 fread(3)。 putw() 将单词 w(即一个 int)写入流。提供它是为了与 SVr4 兼容,但我们建议您改用 fwrite(3)。 -
@chux 啊,这解释了问题。 OP 正在读取 text 文件,
getw就像从 binary 文件中读取一样。所以简单的解决方案可能是使用fscanf(并记得检查what it returns,作为循环条件的一部分)。 -
我发现潜在的缓冲区溢出是由于
count可能会超过 100,这是您的数组a的大小。这会导致未定义的行为。