当前位置: 首页 > 知识库问答 >
问题:

警告:格式 “%x” 需要类型为“无符号 int”的参数

锺玺
2023-03-14

当我尝试编译它时,我收到以下错误,不知道为什么……

警告:格式“%x”需要类型为“unsigned int”的参数,但参数2的类型为“char *”[-w format =]

printf("Name buffer address:    %x\n", buffer);

代码:

#include <string.h>
#include <stdio.h>

main(){
        char name[200];
        printf("What is your name?\n");
        scanf("%s", name);
        bo(name, "uname -a");
}

int bo(char *name, char *cmd){
        char c[40];
        char buffer[40];
        printf("Name buffer address:    %x\n", buffer);
        printf("Command buffer address: %x\n", c);
        strcpy(c, cmd);
        strcpy(buffer, name);
        printf("Goodbye, %s!\n", buffer);
        printf("Executing command: %s\n", c);
        fflush(stdout);
        system(c);
}

共有2个答案

葛奇
2023-03-14

要打印地址,请使用“%p”而不是 。您还需要强制转换为 void*

printf("Name buffer address:    %p\n", (void *) buffer);
苍嘉澍
2023-03-14

您收到警告是因为以下陈述

    printf("Name buffer address:    %x\n", buffer);
    printf("Command buffer address: %x\n", c);

< code>%x需要< code>unsigned int,而您提供的是指针。

参考 C11 标准,第 §7.21.6.1 章

o,u,x,X
无符号 int 参数在样式 dddd 中转换为无符号八进制 (o)、无符号十进制 (u) 或无符号十六进制表示法(x 或 X);[...]

提供无效参数会调用未定义的行为。

您应该使用 %p 打印地址

p参数应是指向void的指针。[…]

并将参数强制转换为 void *,因为对于指针类型,不会发生默认参数升级。

话虽如此,

    < li> main()应该是< code>int main(void),至少要符合标准。 < li >您需要向前声明您的函数< code>bo(),因为现在隐式声明是不好的和不标准的。
 类似资料:
  • 设置一个应该在图像上放置广告的应用程序时,我在运行代码时遇到了这个WordPress错误,这是一个令人沮丧的星期试图修复这个问题。 我希望它能工作,但它给了我以下错误:警告:preg_replace_callback():需要参数2,' 如果有人能想出一个解决方案,那将是惊人的,非常感谢!

  • 我刚刚更新了PHP在我的服务器从PHP 5到PHP 7,我得到了这些警告: 警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2“chr(\1)”是有效的回调 警告:preg\u replace\u callback() 警告:preg_replace_callback()[function.preg-replace-c

  • 我正在获得我想要的输出,但不知道如何摆脱这些警告。任何帮助是值得赞赏的。 警告: > < li> Format指定类型“void *”,但该参数的类型为“char”[-w Format]printf(" \ n指针变量的值为%p\n ",* myString); " Format指定类型为' void * ',但该参数的类型为' char' [-Wformat] printf("%p\n ",my

  • 我对c中的属性格式说明符感到困惑。我在编译一些代码时遇到了一个警告。以下是警告: 警告:格式的参数太多 [-W 格式-额外参数] 下面是一个示例代码: 输出如下: 只要满足以下条件(基于实验),就会发出警告: < li >要检查的格式为空。 < li >在属性格式说明符的第三个参数中传递了一个零 < li >格式不是函数中的最后一个参数。 以下代码似乎工作正常,这让我相信NULL是一个有效的字符串

  • 你能告诉我下一个错误是什么吗? 正在运行解决方案。。。编译成功。 示例测试:[-1, 3, -4, 5, 1, -6, 2, 1]输出(stderr):无效的结果类型,int预期。RUNTIME ERROR(测试程序意外终止) 检测到一些错误。 我的解决方案写在PHP上。 给定下一个数组时,我的函数的输出为: 输出 数组([0]= 就像他们在任务中要求我一样,但是Codibility向我展示了所有

  • 我是斯威夫特的新人,现在尽我所能地学习这个。我写了得到参数的函数:数字和函数,它们与这个数字一起工作: 但是编译给出错误。当我试图改变论点时,比如