尝试使用引用 C 的函数写入文件时程序崩溃

Posted

技术标签:

【中文标题】尝试使用引用 C 的函数写入文件时程序崩溃【英文标题】:Program crash when try to write into a file using a function by reference C 【发布时间】:2022-01-09 11:03:53 【问题描述】:

嗯,我在使用函数将字符串写入 txt 文件时遇到问题,我只是不明白为什么我不能打印字符串,当程序在函数中时它会停止工作。 这是创建通过引用文件传递值的函数的代码,它完美地工作:

void saveTXT(FILE** txt,char *string)

    fputs(string,*txt);

int main()

    FILE * doc;
    char string [10], singleline[50];
    printf("Write the name of the file: \n");
    scanf("%s",string);
    fflush(stdin);
    printf("Write the string to save into the file:\n");
    scanf("%[^\n]",singleline);
    doc = fopen(string,"w");
    saveTXT(&doc,singleline);
    fclose(doc);
    return 0;

但是当我回到具有相同逻辑的项目时,程序就会关闭:

void saveTXT(FILE** txt,node* n)

  char buffer[100];
  
  if(n == NULL)
    fprintf(*txt,"*\n");
  else
  
    strcat(strcpy(buffer,n->data),"\n");
    fflush(stdin);
    printf("This is the string to be saved: %s\n",buffer);
    fputs(buffer,*txt); //Problem
    saveTXT(&(*txt),n->right);
    saveTXT(&(*txt),n->left);
  

我确保之前打开文件然后关闭它,我打印的是要保存在文件中的字符串,它显示字符串然后崩溃,我只是不知道为什么会发生这种情况。

【问题讨论】:

请提供失败代码的minimal reproducible example。 nodeguardarTXT 是什么?这个函数是怎么调用的。使用前是否检查文件指针是否为 NULL? 另外,在调试器中运行您的程序并告诉我们它在哪里崩溃。 我纠正了错误,这是一个递归函数,问题是当我使用 fputs() 时程序停止。并且我在这两种情况下都对程序进行了编译和调试。 【参考方案1】:
    在这里使用双指针没有意义。 stdin 无法刷新。 &(*txt) == txt

我认为您很难理解双指针的用途。如果要更改原始指针(单星指针),请使用它们。

一个例子——指针fi将在函数weirdopen中被修改:

void weirdopen(FILE **f, const char *filename)

    *f = fopen(filename, "r");


void myread(FILE *f, char *str, const size_t size)

    fgets(str, size, f);


int main(void)

    FILE *fi;
    char str[100];
    weirdopen(&fi, "test.txt");
    myread(fi, str, 100);

    fclose(fi);

【讨论】:

以上是关于尝试使用引用 C 的函数写入文件时程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 DLLImport 函数时程序崩溃

使用挂钩函数时应用程序崩溃

尝试使用 VideoView 时应用程序崩溃

C++ WinSock 2 - 使用 getpeername() 函数时套接字崩溃

调用 free() 时发生混合语言程序崩溃

Gtkmm 应用程序在取消引用窗口对象时崩溃