【发布时间】:2017-07-25 23:38:48
【问题描述】:
我编写了一个程序,采用以下概念:
我创建一个整数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函数需要参数的指针。pX是一个指针。*pX不是指针。 -
scanf(buffer, "%d", *pX);....编译器说了什么? -
@SouravGhosh 编译。
-
15 * sizeof(int)您分配的大小超出了您的需要。您可能想要15 * sizeof(char),它与15相同,因为sizeof(char)等于1 -
请调高您的编译器警告级别(
-Wall -Wextra代表 gcc 和 clang)。如果您的编译器没有提供正确的警告,请切换编译器。然后修复您收到的警告(如果您不理解它们或不知道如何修复,请在此处询问,很容易为简单的事情写一个高质量的问题)。
标签: c pointers pass-by-reference scanf