我正在Windows 8,x64上编译并运行一个c程序(gcc编译器)。当我尝试运行可执行文件时,Windows会给出错误&app 39“。有人可以帮忙吗?这是程序:
#include<stdio.h>
#include<stdlib.h>
int main(int args, char* argv[])
{
float a=5;
float *p1;
float* p2, p3;
p1=&a;
printf("%f \n %f \n %f \n",p1,&p1,*p1);
}
答案 0 :(得分:4)
printf("%f \n %f \n %f \n",p1,&p1,*p1);
您的格式字符串要求您传递三个浮点值。你只传递一个,最后一个。你传递的其他参数都是指针。
因此,您的程序会调用未定义的行为。这意味着一切都会发生。在这种情况下,你很幸运,遇到了运行时故障。
我不知道你要做什么,但如果你想打印这三个参数,那么你需要使用%p
作为指针。
printf("%p\n%p\n%f\n", p1, &p1, *p1);
最好的建议是在启用警告的情况下进行编译。所有现代编译器都可以为您找到这样的错误。
答案 1 :(得分:1)
我的编译器会报告以下警告,这些警告确实应该是错误。这些警告是您坠机的根源。
[1:59pm][wlynch@watermelon /tmp] clang -Wall foo.c
foo.c:11:32: warning: format specifies type 'double' but the argument has type 'float *' [-Wformat]
printf("%f \n %f \n %f \n",p1,&p1,*p1);
~~ ^~
foo.c:11:35: warning: format specifies type 'double' but the argument has type 'float **' [-Wformat]
printf("%f \n %f \n %f \n",p1,&p1,*p1);
~~ ^~~