基本上,我的程序会提示用户输入他想要打开的文件的名称。我的程序应该打开该文件并将其内容扫描到2D阵列中。但是,你如何做到这一点,以便程序打开用户指定的文件?到目前为止,这是我的代码:
#include <stdio.h>
#include <string.h>
FILE *open_file(int ar[3][4]);
int main()
{
FILE *fp;
int ar[3][4];
fp = open_file(ar);
}
FILE *open_file(int ar[3][4])
{
FILE *fp;
int i;
char file[80];
printf("Please input file name ");
scanf("%s", &file); //am I supposed to have written ("%s", file) instead?
fp = fopen("%s", "r");// very confused about this line; will this open the file?
for (i = 0; i < 12; i++)
fscanf(fp, "%d", &ar[i][]); //how do you scan the file into a 2D array?
}
要使用malloc,我必须编写fp=(int*)malloc(sizeof(int));?
scanf("%s", &file); // am I supposed to have written ("%s", file) instead?
是的,但不是因为你想的原因。所以
scanf("%s", file);
是正确的(解释:%s
格式说明符告诉scanf()
需要char *
,但如果编写addressof运算符,则会向其传递char (*)[80]
,并且printf()
和scanf()
的类型说明符不匹配会调用未定义的行为)。
fp = fopen("%s", "r"); // very confused about this line; will this open the file?
不,不会的。它将打开名为%s
的文件。你必须写
fp = fopen(file, "r");
相反。不要以为可以在不能使用格式字符串的地方使用格式字符串。
变量file
包含用户输入的文件名,因此将其传递给fopen。你有一个格式字符串。
fp = fopen(file, "r");