【问题标题】:How to fix warning "Format specifies type 'void *' but the argument has type 'char' warning"如何修复警告“格式指定类型'void *'但参数具有类型'char'警告”
【发布时间】:2021-12-08 11:11:05
【问题描述】:

我得到了我想要的输出,但不知道如何摆脱这些警告。任何帮助表示赞赏。

警告:

  1. Format 指定类型 'void *' 但参数的类型为 'char' [-Wformat] printf("\n指针变量的值为%p\n", *myString);

  2. "格式指定类型'void *',但参数类型为'char' [-Wformat] printf("%p\n", myString[x]);

     #include <stdio.h>
     #include <stdlib.h>
    
     int main() {
    
       char *myString = "Daniel";
       int x;
    
       printf("\nThe pointer variable's value is %p\n", *myString);
       printf("\nThe pointer variable points to %s\n", myString);
       printf("\nThe memory location for each character are: \n");
    
    
       for (x = 0;x < 7;x++){
        printf("%p\n", myString[x]);
       }
    
     return 0;
     }
    

输出:

     The pointer variable's value is 0x44

     The pointer variable points to Daniel

     The memory location for each character are: 
     0x44
     0x61
     0x6e
     0x69
     0x65
     0x6c
     (nil)

【问题讨论】:

  • *myStringmyString[x] 的类型为 char,但您使用用于指针的 %p 打印它们。您可能想用 myString&amp;myString[x] 替换它们(或者更严格 - (void*)myString(void*)&amp;myString[x]

标签: c pointers printf c-strings conversion-specifier


【解决方案1】:

对于初学者来说,这些电话

printf("\nThe pointer variable's value is %p\n", *myString);

printf("%p\n", myString[x]);

没有意义,因为您试图将字符的值用作指针值。

至于其他警告,只需将指针转换为void * 类型。例如

printf("\nThe pointer variable's value is %p\n", ( void * )myString);
printf("\nThe pointer variable points to %s\n", myString);
printf("\nThe memory location for each character are: \n");


for (x = 0;x < 7;x++){
 printf("%p\n", ( void * )( myString + x ));
}

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多