format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
时间: 2024-01-30 21:02:07 浏览: 172
这个错误是因为你使用了错误的格式化说明符。`%d` 是用于格式化整数的,但是你传递了一个指向整数的指针,导致编译器报错。
例如,下面的代码会产生这个错误:
```
int *p = malloc(sizeof(int));
scanf("%d", p); // 这里会产生上述错误
```
要解决这个问题,你需要使用 `%p` 格式化说明符,并将指针作为参数传递给 `printf` 函数,例如:
```
int *p = malloc(sizeof(int));
scanf("%d", p);
printf("The value of p is %p\n", (void *)p);
```
注意,在使用 `%p` 格式化说明符时,要将指针强制转换为 `void *` 类型。
相关问题
format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=] scanf("%d",age);
这个错误提示的意思是,`scanf` 函数中使用了 `%d` 格式化符号,期望的是 `int *` 类型的指针作为参数,但是传入了一个 `int` 类型的变量作为参数。正确的用法应该是将变量的地址作为参数传递给 `scanf` 函数,例如:
```
int age;
scanf("%d", &age);
```
这样就可以正确地将输入的整数保存到 `age` 变量中了。
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
这个warning是因为你使用了%d来格式化一个long int类型的变量,而%d只能用来格式化int类型的变量。为了避免这个warning,你可以使用%ld来格式化long int类型的变量。例如:
```
long int num = 123456789;
printf("The number is: %ld\n", num);
```
这样就可以避免这个warning了。
阅读全文