Как сохранить каждый символ из файла в массив в c - PullRequest
0 голосов
/ 01 октября 2019

Итак, я хочу прочитать файл и затем сохранить символьную строку в массив символов. Мой входной файл просто "Привет". Я хочу сохранить символы этой строки в массиве символов, поэтому

arr[0] = H
arr[1] = e
arr[2] = l
arr[3] = l
arr[4] = o

Мой код следующий, но вместо хранения каждого символа вместо него сохраняется вся строка

int main(void)
{
    FILE *ifp;
    ifp = fopen("inputfile.c","r");     
    int length = 20;
    char arr[length][50];           
    int i = 0;

    while(1)
    {
        char r = (char)fgetc(ifp);
        int k = 0;

        while(r != ',' && !feof(ifp))    
        {             
            arr[i][k++] = r;            
            r = (char)fgetc(ifp);
        }
        arr[i][k] = 0;  

        if(feof(ifp))
        {       
            break;
        }
        i++;
    }

    int j;

    for(j = 0; j <= i; j++)
    {
        printf("%s\n", arr[j] );
    }

    return 0;
}

Я получаю arr[0] = "Hello" вместо arr[0] = H, arr[1] = e и т. Д.

Могу ли я получить некоторую помощь в том, как я могу хранить символ за символом в файле, а не всю строку?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Строка - это просто массив символов:

char exampleString[6] = "Hello";

printf( "%c\n", exampleString[0]); // Prints 'H'
printf( "%c\n", exampleString[1]); // Prints 'e'
printf( "%c\n", exampleString[2]); // Prints 'l'
printf( "%c\n", exampleString[3]); // Prints 'l'
printf( "%c\n", exampleString[4]); // Prints 'o'

На самом деле printf( "%c\n", exampleString[5]); печатает ... ничего, потому что (длина + 1) -й символ строки является нулевым символом (0x00);терминатор строки.

Поскольку вы определили двумерный массив символов, каждая строка является строкой. Поскольку вы храните все символы в индексе 0 (вы никогда не увеличиваете переменную i), arr[0] будет содержать в точности строку «Hello». Чтобы получить доступ к первому символу строки, вы можете напечатать arr[0][0], но я предлагаю просто объявить одномерный массив. Конечно, убедитесь, что массив может соответствовать максимальному размеру файла (dim = maxLen + 1), иначе вы будете писать в гиперпространстве .

1 голос
/ 01 октября 2019

Как уже отметил Бармар, это двумерный массив. Вы, вероятно, могли бы сделать

for(j = 0; j <= i; j++)
{
    int wordlength = strlen(arr[j]);
    for (int h = 0; h < wordlength; h++)
    {
        printf("%c\n", arr[j][h] );
    }
}

Редактировать: Вы должны были бы включить string.h, хотя.

...