我必须做一个程序,要求我输入不同的值,然后它必须打印在屏幕上。然后,它问我,“你想要改变的向量的值是多少?”我必须输入这个值的数目,而不是它本身的值。
当我运行该程序时,会收到以下几个警告:
“警告:格式'%d‘期望'int’类型的参数,但参数6的类型为'int *‘-Wformat=”
我不知道如何解决这个问题,我试过使用%p,但没有帮助。有什么想法吗?
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
int main()
{
int intero = 0;
int *p_int;
int vettore[MAX] = {0};
int *p_vet;
int num = 0;
int val = 0;
char carattere = 0;
char *p_car;
p_int = &intero;
p_car = &carattere;
p_vet = vettore;
printf("Enter an integer: ");
scanf ("%d", &intero);
fflush (stdin);
printf ("\nEnter a character: ");
scanf("%c", &carattere);
fflush (stdin);
for (int i=0; i<MAX; i++)
{
printf("\nEnter integer n^%d of the vector: ", i);
scanf("%d", &vettore[i]);
fflush (stdin);
}
printf("\n\n\n");
printf("Type\t\tDirect Value\t\tValue by Pointer\tDirect Position\tPosition by Pointer\n");
printf("__________________________________________________________________________________________________________________\n\n");
printf("Integer:\t\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", intero, *p_int, &intero, p_int);
printf("Character:\t%c\t\t\t%c\t\t\t\t%d\t\t\t\t%d\n\n", carattere, *p_car, &carattere, p_car);
for (int i=0; i<MAX; i++)
{
printf("Integer n^%d:\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", i, vettore[i], *p_vet, &vettore[i], p_vet);
p_vet++;
}
p_vet = vettore;
printf("\nEnter which value of the vector you want to change: ");
scanf("%d", &num);
fflush(stdin);
printf("\nEnter now the value you want: ");
scanf("%d", &val);
fflush(stdin);
*(p_vet + num) = val;
printf("\n\n");
for (int i=0; i<MAX; i++)
{
printf("Integer n^%d:\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", i, vettore[i], *p_vet, &vettore[i], p_vet);
p_vet++;
}
return 0;
}发布于 2020-11-13 09:30:53
通过使用%p格式说明符,您可以告诉printf您要打印的值实际上是一个内存地址,而不是指针指向的值。每当您使用指针而不使用*操作数取消引用时,您只需打印它所指向的内存偏移量,而不是将其格式化为整数。在我看来,有时候你就是这么做的,就像这里:printf("Integer:\t\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", intero, *p_int, &intero, p_int);
因为p_int是一个指针,而且您使用%d作为格式说明符,所以它会抛出这样的错误。使用*p_int去引用它是正确的,我认为,除非您的意图实际上是打印内存偏移量,在这种情况下,您应该使用%p并转换指向(void*)的指针。
https://stackoverflow.com/questions/64818313
复制相似问题