gcc编译器的格式说明符不正确

gcc编译器的格式说明符不正确,c,gcc,C,Gcc,这是一个用C编写的简单程序,用于说明C如何将内存分配给变量。这个想法是每次我重新编译程序时都会显示一个新的内存地址 节目如下: #include<stdio.h> main() { int a; int b = 10; float c = 5.8; printf("the address is %u \n", &a); printf("the address is %u \n", &b

这是一个用C编写的简单程序,用于说明C如何将内存分配给变量。这个想法是每次我重新编译程序时都会显示一个新的内存地址

节目如下:

#include<stdio.h>

main()
{
        int a;
        int b = 10;
        float c = 5.8;

        printf("the address is %u \n", &a);
        printf("the address is %u \n", &b);
        printf("the address is &u \n", &c);

        getch();
}
我无法理解为什么会抛出这些错误。当然,
%u
是一个完全合适的格式说明符。我错过了什么?如何重新格式化代码以停止这些错误

编辑:根据回答,似乎应该输入正确的代码

#include<stdio.h>

int main()
{
        int a;
        int b = 10;
        float c = 5.8;

        printf("the address is %p \n", &a);
        printf("the address is %p \n", &b);
        printf("the address is %p \n", &c);

        return 0;
}
#包括
int main()
{
INTA;
int b=10;
浮点数c=5.8;
printf(“地址为%p\n”,&a);
printf(“地址是%p\n”,&b);
printf(“地址是%p\n”,&c);
返回0;
}

它运行时不会出错

在第三种格式中使用
%p
而不是
%u
,并使用
%p
而不是
&u
——尽管错误消息显示问题中的代码与编译器抱怨的代码不完全匹配。而
getch()
不是标准的C函数。它在Windows上可用(通常在
中声明)。Linux/Unix上可用的版本需要curses库和适当的设置工作(并且在
中声明,但是-正如我已经说过的-如果不正确初始化库,您不能简单地调用它,并且您需要链接
-lncurses
-lcurses
,具体取决于平台)。请尝试
int main()
而不是
main
;这样做将需要在main结束时返回。尝试使用%p作为格式说明符。如果在Windows上编程,请尝试添加
#include
,如果在Linux上编程,请尝试添加
#include
;无论哪种情况,您都需要在适当的libraries@BLUEPIXY:是的-我注意到编译器正在编译不同的代码。
int main()
不仅仅是
main()
%p
而不是
%u
(正如BLUEPIXY所提到的),
getch()
不是标准的(尽管这里可能会跳过),您可能会发现,在不同的编译过程中,地址似乎不会发生变化(它们可能会发生变化,但在许多系统中,您看到的地址不是实际的物理地址-每个进程可能都有自己的虚拟地址空间,并且地址在其中可能保持不变)。在第三种格式中,使用
%p
而不是
%u
,并使用
%p
而不是
&u
——尽管错误消息显示问题中的代码与编译器抱怨的代码不完全匹配。而
getch()
不是标准的C函数。它在Windows上可用(通常在
中声明)。Linux/Unix上可用的版本需要curses库和适当的设置工作(并且在
中声明,但是-正如我已经说过的-如果不正确初始化库,您不能简单地调用它,并且您需要链接
-lncurses
-lcurses
,具体取决于平台)。请尝试
int main()
而不是
main
;这样做将需要在main结束时返回。尝试使用%p作为格式说明符。如果在Windows上编程,请尝试添加
#include
,如果在Linux上编程,请尝试添加
#include
;无论哪种情况,您都需要在适当的libraries@BLUEPIXY:是的-我注意到编译器正在编译不同的代码。
int main()
不仅仅是
main()
%p
而不是
%u
(正如BLUEPIXY所提到的),
getch()
不是标准的(尽管这里可能会跳过),您可能会发现,在不同的编译过程中,地址似乎不会发生变化(它们可能会发生变化,但在许多系统中,您看到的地址不是实际的物理地址-每个进程可能都有自己的虚拟地址空间,并且地址在其中可能保持不变)。在第三种格式中,使用
%p
而不是
%u
,并使用
%p
而不是
&u
——尽管错误消息显示问题中的代码与编译器抱怨的代码不完全匹配。而
getch()
不是标准的C函数。它在Windows上可用(通常在
中声明)。Linux/Unix上可用的版本需要curses库和适当的设置工作(并且在
中声明,但是-正如我已经说过的-如果不正确初始化库,您不能简单地调用它,并且您需要链接
-lncurses
-lcurses
,具体取决于平台)。请尝试
int main()
而不是
main
;这样做将需要在main结束时返回。尝试使用%p作为格式说明符。如果在Windows上编程,请尝试添加
#include
,如果在Linux上编程,请尝试添加
#include
;无论哪种情况,您都需要在适当的libraries@BLUEPIXY:是的-我注意到编译器正在编译不同的代码。
int main()
不仅仅是
main()
%p
而不是
%u
(正如BLUEPIXY所提到的),
getch()
不是标准的(尽管这里可能会跳过),您可能会发现,在不同的编译过程中,地址似乎不会发生变化(它们可能会发生变化,但在许多系统中,您看到的地址不是实际的物理地址—每个进程可能都有自己的虚拟地址空间,并且地址在其中可能保持不变)。
#include<stdio.h>

int main()
{
        int a;
        int b = 10;
        float c = 5.8;

        printf("the address is %p \n", &a);
        printf("the address is %p \n", &b);
        printf("the address is %p \n", &c);

        return 0;
}