Как сохранить содержимое структуры в файл в C? - PullRequest
0 голосов
/ 26 января 2019

У меня есть заданная структура. Я прочитал все символы txt-файла и сохранил его в многомерном массиве (строках), который я определил в структуре. Затем я хочу передать переменную структуры функции, которая затем должна напечатать все символы в другой текстовый файл.

Вот что у меня есть:

typedef struct _content {
    int length;
    char **lines;    // multidimensional array
} content_t;


int curline = 0;     //global variables
int curchar = 0;

...

struct _content inhalt;
c = fgetc(ptr);

...

void write_content(char *filename, content_t *content)
{
    FILE *pFile;
    pFile = fopen(filename, "a");

    printf("\nWriting Char Nr. %d in line: %d", curchar, curline);

    fputc(content->lines[curline][curchar], pFile);

    printf("\nJust wrote char Nr. %d in line: %d !", curchar, curline);

}



...


    while(c != EOF)     
    {
        inhalt.lines[curline][curchar] = c;

        //where I call the function write_content:
        write_content("write-file.txt", &inhalt);

        if(c == '\n')      
        {
            inhalt.length++;      
            curline++;      
            inhalt.lines[curline] = malloc(255);
            curchar = 0;
        }
        else
        {
        curchar++;
        }
        c = fgetc(ptr);     
        printf("%c", c);    

    } 

Последний вывод: «только что написал char Nr. 36 в строке: 22»

Но последний символ, записанный в файл, это Nr 0 в строке 10 ...

1 Ответ

0 голосов
/ 26 января 2019

Вы используете указатель на свою структуру, поэтому вам нужно использовать fputc(content->lines[curline][curchar], pFile).

Кстати: если ваши строки заканчиваются нулем, вы можете использовать fputs(content->lines[curline], pFile)

Также @Someprogrammerdudeправильно, вы должны определить write_content до того, как позвонить.

Ссылаясь на комментарии:

void write_content(char *filename, content_t *content)
{
    FILE *pFile;
    pFile = fopen(filename, "a");

    for(int line = 0; line <= curline; line++){
        for(int c = 0; content->lines[line][c] != 0; c++){ // because 0 terminates the string
            printf("\nWriting Char Nr. %d in line: %d", c, line);
            fputc(content->lines[line][c], pFile);
        }
    }
    fclose(pFile);

}
// ...

while(c != EOF){
    inhalt.lines[curline][curchar] = c;

    if (c == '\n')      
    {
        inhalt.lines[curline][curchar+1] = 0; // ensure null termination
        inhalt.length++;      
        curline++;      
        inhalt.lines[curline] = malloc(255);
        curchar = 0;
    }
    else
    {
        curchar++;
    }
    c = fgetc(ptr);     
    printf("%c", c);    
} 
//where I call the function write_content:
write_content("write-file.txt", &inhalt);
...