gpt4 book ai didi

c 程序在尝试打开具有可变文件名的文件时崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:15 26 4
gpt4 key购买 nike

如标题所述,我要求用户提供文件名,并使用 gets 将其保存在 str 中。然后我尝试使用名称访问该文件,但程序崩溃了。

int openFile(FILE *fp){
puts("What's the name of the file (and format) to be accessed?");
char str[64];
gets(str);
fp = fopen((const char *)str, 'r');
...
return 0;

主要内容:

FILE *fp; // file pointer

openFile(fp);

我输入的文件名 (data.txt) 确实与项目的其余部分位于同一目录中,因此这应该不是问题所在。我已经尝试测试文件是否正确打开(它应该正确打开)但是在我给出名称后它一直崩溃。

最佳答案

主要问题是您试图在函数中设置按值传递的参数,并期望该值在外部被更改。这行不通。

目前你有:

void openFile(FILE* fp) {
fp = ...
}

int main()
{
FILE* fp;
openFile(fp);
}

但是 main() 中的 fp 是作为指针按值传递的。这意味着在 openFile 中您正在设置一个局部变量,而传递的变量未被修改。

要解决这个问题你可以:

  • 直接从openFile返回一个FILE*
  • 接受指向指针参数的指针以便能够设置它,例如 void openFile(FILE** fp) 然后是 openFile(&fp)

请注意 fopen 的第二个参数是 const char* 而不是单个 char, "r" 应该使用。

关于c 程序在尝试打开具有可变文件名的文件时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com