我写了一个程序,采用了以下概念:
我创建一个整数 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对于你正在尝试做的事情。
scanf
和sscanf
都将指针作为参数。 pX
是 int *
类型,因此是指向 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/