0

我有如下所示的输入文件

5

8

10

实际上,我需要在上面的示例中读取更多行的文件。(中间没有空格。因此,我需要让数组的大小取决于文本文件的行。这是我使用的方法发生 r

#include "stdafx.h"
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    FILE *test;
    int numbers[]={0};
    int i=0;
    char *array1;
    if((test=fopen("Input1.txt","r"))==NULL)
    {
        printf("File could not be opened\n");
    }
    else
    {
        array1 = (char*)malloc(1000*sizeof (char));
        if((test=fopen("Input1.txt","r"))==NULL)
        {
            printf("File could not be opened\n");
        }
        else
        {
            while(fgets(array1,(sizeof array1)-1,test)!=NULL) 
            {
                numbers[i]=atoi(array1);
                i++;
            }
            for(i=0;i<sizeof(array1)-1;i++)
            {
                printf("%d\n",numbers[i]);
            }
        }
    fclose (test);
    }
    system("pause");
    return 0;
    free(array1);
}
4

2 回答 2

0

例如

{
    FILE *test;
    int *numbers=NULL;
    int i=0,size=0;
    char array1[1000];//don't need dynamic allocate

    if((test=fopen("Input1.txt","r"))==NULL)
    {
        printf("File could not be opened\n");
    }
    else
    {
        while(fgets(array1, sizeof(array1), test)!=NULL) 
        {
            numbers=(int*)realloc(numbers,sizeof(int)*(i+1));
            numbers[i++]=atoi(array1);
        }
        size=i;
        for(i=0;i<size;i++)
        {
            printf("%d\n",numbers[i]);
        }
        fclose(test);
        free(numbers);
    }
    system("pause");
    return 0;
}
于 2012-07-05T09:51:16.587 回答
0

sizeof用来做它不能做的事情。
sizeof array1是变量的大小array1。由于它被定义为char *,所以大小是指针的大小(32 位系统中为 4,64 位系统中为 8)。
您显然希望分配的内存量array1指向。却给sizeof不了。

您需要使用分配的大小 - 在您的情况下为 1000。最好把它放在一个变量中,而不是在两个地方使用数字 1000(因为那样的话,如果你改变一个,你可能会忘记改变另一个)。

于 2012-07-05T07:06:48.260 回答