c - 按地址传递、scanf、取消引用

标签 c pointers pass-by-reference scanf

我写了一个程序,采用了以下概念:

我创建一个整数 x 通过地址传递给一个函数,以及一个文件名,如果可用,该函数将打开文件,扫描第一行并设置 pX 指向等于扫描线。

只是它不起作用,而且我看不出我做错了什么。据我所知,下面的代码通常是如何完成的,但我不确定我是否没有正确使用指针或其他什么scanf()

void foo() {
    char input[20] = "test.txt";
    int x = 1;
    bar(input, &x);
}

void bar(char *fileName, int *pX) {
    FILE *fp = fopen(fileName, "r");
    char *buffer = malloc(15 * sizeof(int));
    fgets(buffer, 15, fp);
    scanf(buffer, "%d", *pX);
    free(buffer);
    fclose(fp);
}

最佳答案

换行:

scanf(buffer, "%d", *pX);

到:

sscanf(buffer, "%d", pX);

你需要函数sscanf对于你正在尝试做的事情。

scanfsscanf 都将指针作为参数。 pXint * 类型,因此是指向 int 的指针,应该适合您。您传递的 *pX 是此指针的内容,换句话说,是 int

此外,更改行:

char *buffer = malloc(15 * sizeof(int));

到:

char *buffer = malloc(15 * sizeof(char));

或者简单地说:

char *buffer = malloc(15);

总是check the result of malloc :

if (buffer == NULL){
    ...
}

关于c - 按地址传递、scanf、取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619906/

相关文章:

c - 使用 extern 和 #including 头文件有什么区别?

PHP 引用 - 困惑

lambda - C++0x 闭包的未定义行为 : II

c - 交换 2 个空指针地址

c - C中的枚举指针参数

c - 为什么取消引用 main 函数不显示内存内容?

C编程-文件结尾的1的补码

c - C 语法中二维数组整行的地址

c++ - 将堆上的结构从 C++ 转换为 C

c - 指向动态结构数组的指针赋值