【问题标题】:C - Opening a file inside a function using fopenC - 使用 fopen 在函数内打开文件
【发布时间】:2010-05-03 00:54:29
【问题描述】:

我正在使用 Visual Studio 2005 (C\C++)。

我将字符串作为 char 数组传递给函数。我想打开作为参数传入的文件并使用它。我知道我的代码在一定程度上可以工作,因为如果我将文件名硬编码为第一个参数,它就可以完美地工作。

如果我将值视为手表,我确实注意到,该值包括字符串文字旁边的地址。我尝试将文件名作为指针传递,但它随后抱怨使用 __w64 进行类型转换。正如我之前所说,使用“filename.txt”代替文件名可以正常工作。我很难过。

void read(char fileName[50],int destArray[MAX_R][MAX_C],int demSize[2])
{
    int rows=0;
    int cols=0;
    int row=0;
    int col=0;
    FILE * f = fopen(fileName,"r");
...

调用函数代码为:

char in_filename[50];
int dem[MAX_R][MAX_C]; 
int dem_size[2];
get_user_input( in_filename);
read(in_filename, dem, dem_size );

在我为文件名添加的手表中,出现了正确的文本,因此数据正在传入。

【问题讨论】:

  • 嗯...我用 MinGW 做了很多。稍后打开文件的函数会传递参数“const char * filename”——MinGW 从来没有抱怨过。

标签: c fopen


【解决方案1】:

如果您使用的是fopen(),那么您是在使用 C 而不是 C++ 进行编码。此外,这不是将数组传递给函数的方式。参数列表的语法是

void f(char arr[], unsigned int arr_size);

对于多维数组,您必须明确指定最右边维度的大小:

void f(char arr[][20], unsigned int arr_size);

也就是说,尝试将参数从 char fileName[50] 更改为 char* fileName

【讨论】:

  • 我的错误 - 将参数更改为 char * filename 编译成功,但是文件指针无效,并在 fscan 尝试使用时导致错误。
  • 您确定具有该文件名的文件存在吗?你确定你的工作目录就是文件所在的目录吗?
  • 我在问题中添加了调用代码。是的,我可以将“filename.txt”放在文件名上,它工作正常。如果我为文件名添加监视,这与传递给我在监视中看到的函数的字符串文字相同。
  • 如果文件存在,你是在 Unix (-like) 平台上吗?如果是这样,从getcwd()(在标题unistd.h 中)获取输出并检查它是文件所在的目录。如果你在 Windows 上,那么函数是 _getcwd() 我相信它在标题 direct.h
  • 我明白了。这是我的阅读问题。我在读取输入中包含换行符。更改此设置并听取您对参数更改的建议后,它就像一个魅力。感谢您的建议和帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2010-12-17
相关资源
最近更新 更多