写入文件时fprintf不像printf吗?

时间:2015-01-28 18:36:10

标签: c++ c linux file-io printf

我查看了文档:

它说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);   
    }
}

我错了还是文档没有正确解释?感谢。

3 个答案:

答案 0 :(得分:6)

from_user()未正确实施。

  1. 您在from_user()中创建的指针不会传回给调用函数。要做到这一点,你需要一个双指针,或通过引用传递。

  2. 在您的代码中,您将int **传递给scanf(),而期望变量为int *

  3. 这是一个有效的实施方案:

    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);
    }
    

    您的文件IO

    那部分都很好。这只是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中分配内存并将指针传递给你的函数,如下所示:

  1. 删除b = malloc(10);
  2. 删除scanf中b之前的&
  3. int*ch = NULL;更改为int *ch = malloc(sizeof(int));
  4. 完成。为什么我们分配内存的重要性?请在此处查看我的更详细答案:pointer of a pointer in linked list append

    哦,你应该从else语句中移出free(ch)