【问题标题】:How to save the content of a structure to a file in C?如何将结构的内容保存到C中的文件中?
【发布时间】:2019-01-26 13:08:06
【问题描述】:

我有一个给定的结构。我读取了 txt 文件的所有字符并将其保存到我在结构中定义的多维数组(行)中。然后我想将结构变量交给一个函数,然后将所有字符打印到另一个 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);    

    } 

最后的输出是:“just write char Nr. 36 in line: 22”

但是写入文件的最后一个字符是第 10 行的 Nr 0...

【问题讨论】:

  • 变量content是什么?如何将 指针 的成员访问到结构(而不​​是像现在这样的非指针结构对象)?
  • 另外,你确实在调用函数write_content之前声明了它?
  • @Someprogrammerdude content 是一个 content_t 类型的变量,定义在函数 write_content 的头部,我不知道...
  • @Someprogrammerdude 我没有,但我现在已经更改了它,以便在我调用它之前声明它。警告消失了,错误依然存在
  • 不,content 是指向content_t指针。我很抱歉听起来可能居高临下,但请回到你的书、教程或课堂笔记,阅读有关成员评估结构指针的信息,以及“箭头”运算符->

标签: c arrays pointers fopen fgets


【解决方案1】:

您正在使用指向您的结构的指针,因此您需要使用fputc(content->lines[curline][curchar], pFile)

顺便说一句:如果您的行以 null 结尾,您可以使用 fputs(content->lines[curline], pFile)

@Someprogrammerdude 也是对的,你应该在调用它之前定义 write_content

参考cmets:

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);

【讨论】:

  • 非常感谢您的帮助!这解决了我的问题。但是,函数 fputc 只将直到 curline = 10 的字符写入 txt.file。这可能是什么原因?
  • 能否将您正在使用的循环添加到问题中的代码中。
  • 谢谢-我刚刚将它们添加到问题中。
  • 您应该将所有内容读入您的结构,然后将其写入文件,或者直接将一个字符写入文件。因为目前您正在再次打开每个字符的文件。此外,您应该始终在使用文件后关闭它。
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
相关资源
最近更新 更多