我查看了文档:
它说here:
成功打开文件后,您可以使用fscanf()从中读取文件或使用fprintf()写入文件。这些功能正常 像scanf()和printf(),除了它们需要额外的第一个 参数,要读取/写入的文件的FILE *。
所以,我这样写了我的代码,并确保包含一个条件语句以确保文件打开:
# include<stdio.h>
# include<stdlib.h>
void from_user(int*b){
b = malloc(10);
printf("please give me an integer");
scanf("%d",&b);
}
void main(){
FILE *fp;
int*ch = NULL;
from_user(ch);
fp = fopen("bfile.txt","w");
if (fp == NULL){
printf("the file did not open");
}
else {
printf("this is what you entered %d",*ch);
fprintf(fp,"%d",*ch);
fclose(fp);
free(ch);
}
}
我错了还是文档没有正确解释?感谢。
答案 0 :(得分:6)
from_user()
未正确实施。您在from_user()
中创建的指针不会传回给调用函数。要做到这一点,你需要一个双指针,或通过引用传递。
在您的代码中,您将int **
传递给scanf()
,而期望变量为int *
。
void from_user(int **b){
*b = malloc(sizeof(int));
printf("please give me an integer");
scanf("%d", *b);
}
int main() {
int *ch;
from_user(&ch);
}
那部分都很好。这只是ch
的价值被打破。
答案 1 :(得分:3)
更简单的from_user实现
int from_user(){
int i;
printf("please give me an integer");
scanf("%d", &i);
return i;
}
并在主
int ch = from_user();
...
printf("this is what you entered %d",ch);
fprintf(fp,"%d",ch);
答案 2 :(得分:0)
最简单的修复你自己的代码,你不需要使用双指针,只需在main中分配内存并将指针传递给你的函数,如下所示:
b = malloc(10);
&
int*ch = NULL;
更改为int *ch = malloc(sizeof(int));
完成。为什么我们分配内存的重要性?请在此处查看我的更详细答案:pointer of a pointer in linked list append
哦,你应该从else语句中移出free(ch)
。