使用malloc指向Scanf,不可预知的结果

时间:2013-04-27 14:15:14

标签: c pointers malloc scanf

我试图让我的程序使用指针和malloc将Scanf的结果存储到内存中,我希望Scanf只能接受这里的插入是我的代码。当我打印结果时,它会返回一个随机数?

int main(void)
{

unsigned int *Source = malloc(10);
printf("Enter a Source Number: ");
scanf("%i",Source);
printf("%i\n",Source);
unsigned int *Destination = malloc(4);
printf("Enter a Destination Number: ");
scanf("%i",Destination);
printf("%i\n",Destination);
unsigned int *Type = malloc(4);
printf("Enter a Type Number: ");
scanf("%i",Type);
printf("%i\n",Type);
int *Port = malloc(4);
printf("Enter a Port Number: ");
scanf("%i",Port);
printf("%i\n",Port);
char *Data;
struct Packet *next;

return 0;
}

anoyone可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

printf("%i\n",Source);

是未定义的行为,%i转换需要int,但您传递的是int*。但可能它会尝试将指针值(地址)打印为int。你打算用

printf("%i\n", *Source);

那里。同样地,对于其他printf s。

传递给malloc的硬编码值并不是特别强大的想法,根据指针的大小更好malloc

unsigned int *Source = malloc(sizeof *Source);

答案 1 :(得分:0)

unsigned int *Source = malloc(10);

Source是一个指针。

printf("%i\n",Source);

此代码打印值的地址,printf值如下:

printf("%i\n",*Source);