尝试使用引用 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。node
和 guardarTXT
是什么?这个函数是怎么调用的。使用前是否检查文件指针是否为 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 的函数写入文件时程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章