gpt4 book ai didi

c - 如何从文件中获取字符到动态数组

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:46 25 4
gpt4 key购买 nike

我试图从文件 file.txt 中取出所有整数并将它们放入一个动态分配的数组中。然而,该文件还可以包含其他字符,这些不应放在数组中。

该文件包含以下内容:

2 -34 56 - 23423424 12example-34en+56ge-tal345

int* getIntegers(char* filename, int* pn)
{
FILE* fileInput = fopen(filename, "r");
int* temp = (int*)malloc( 100*sizeof(int));
int counter = 0;

int c= fgetc(fileInput);
while(c != EOF){
counter ++;
printf("%d;\t%d\n", counter, c);fflush(stdout);
temp[counter++] = c;
}
*pn = counter;
return (temp);
}

int main(void)
{
int n;
int* a = getIntegers("file.txt", &n);
if (a != NULL){
puts("numbers found:");
for (int i = 0;i < n; i++){
printf("%d ",a[i]);
}
free(a);
}
putchar('\n');
while(getchar()== '\n');
return (EXIT_SUCCESS);
}

当我运行它时,返回以下输出:

输出:

1;    49
3; 49
5; 49
7; 49
9; 49
11; 49
13; 49
15; 49
17; 49
19; 49
21; 49

虽然正确的输出应该是

found numbers:

12 -34 56 23423424 12 -34 56 345

最佳答案

那个程序有很多问题。

  • 你泄露了你的文件对象。完成后,您应该使用 fclose() 关闭它。
  • 如果您的输入中有超过 100 个数字,您将溢出您的缓冲区,破坏您的堆栈,并对您的程序做坏事。
  • 您在每次循环迭代时将计数器递增两次,因此您将跳过输出数组中的第二个条目。
  • 您永远不会从输入中读取另一个字节,因此您只会在无限循环中一遍又一遍地处理相同的字节,直到缓冲区溢出导致程序崩溃。
  • 您永远不会将从输入文件中读取的数字转换为整数;相反,您只需获取字符代码。 49 是“1”的 ASCII/UTF-8 代码,它似乎是您输入的第一个字符。

关于c - 如何从文件中获取字符到动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com