我使用一个函数打开一个.txt文件,该文件包含数字3.0。
然后在main中,我想将这个变量设置为,从文件中读取,_>,->,从指向变量的指针中复制的值。我打印出来检查一下。
void fileview(double *C);
int main(void) {
double *C_p;
fileview(*C_p);
double C;
C = *C_p;
printf("%f", C);
printf("%p", C_p);
return 0;
}
void fileview(double *C) {
FILE *infile;
if(!(infile=fopen("input.txt","r"))) {
printf("Error opening file\n");
exit(1);
}
if(1!=fscanf(infile,"%lf",C)) {
printf("Error reading parameters from file\n");
exit(1);
}
fclose(infile);
}我认为这是有意义的,因为一开始我在指针处声明了值。然后,我通过文件从指针输入值。然后我将指针中的值放入变量C中。
但是我得到了错误:
错误:“fileview”文件视图(*C_p)的参数%1的类型不兼容;
注意:应该是‘double*’,但参数的类型是‘double’void fileview(double *C);
发布于 2019-11-08 06:39:42
问题在于如何进行此调用:
fileview(*C_p);函数fileview需要一个double *,但*C_p是一个double。
但你有一个更大的问题。C_p是未初始化的,您在这里取消对它的引用-这是undefined。在filevew()中,它写入*C,就好像它指向有效内存一样。
您可以简单地将您的main编写为:
int main(void) {
double C = 0;
fileview(&C);
printf("%f", C);
return 0;
}这确保了有效的指针被传递给fileview()。
您的fileview也包含一个问题:fscanf()返回成功扫描的项目数。因此,当您扫描单个double值时,应该对照1进行检查:
if( 1! = fscanf(infile,"%lf",C) ) {
...
}发布于 2019-11-08 06:41:06
fileview()需要一个指向双精度变量的指针作为其参数。C_p是一个double *,所以*C_p只是一个double,而不是double *。
您需要将指针设置为指向有效内存,因此在调用fileview()之前,它需要保存C的地址。
void fileview(double *C);
int main(void) {
double C;
double *C_p = &C;
fileview(C_p);
printf("%f", C);
printf("%p", C_p);
return 0;
}
void fileview(double *C) {
FILE *infile;
if(!(infile=fopen("input.txt","r"))) {
printf("Error opening file\n");
exit(1);
}
if(5!=fscanf(infile,"%lf",C)) {
printf("Error reading parameters from file\n");
exit(1);
}
fclose(infile);
}https://stackoverflow.com/questions/58757834
复制相似问题