0

以下に示すような入力ファイルがあります

5

8

10

実際の顔は、上記の例のようにファイルをさらに読み取る必要があります(間にスペースを入れないでください。したがって、配列のサイズをテキストファイルの行に依存させる必要があります。これは、occurrで使用する方法です。

#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

あなたはsizeofそれができないことをするために使用しています。
sizeof array1変数のサイズですarray1。として定義されているためchar *、サイズはポインタのサイズです(32ビットシステムでは4、64ビットでは8)。明らかに、割り当てられたメモリポイント
の量が必要です。array1しかしsizeof、それを与えることはできません。

割り当てのサイズ(この場合は1000)を使用する必要があります。2か所で1000という数字を使用するのではなく、変数に入れる方がよいでしょう(その場合、一方を変更すると、もう一方を変更するのを忘れる可能性があるため)。

于 2012-07-05T07:06:48.260 に答える
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 に答える