You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决C语言printf警告:格式指定void*类型但参数为char类型

警告原因

%p 格式化占位符要求传入参数为 void* 类型的指针,你两处传参都是取的 char 类型的字符值:*myString 是字符串首字符'D',myString[x] 是下标x对应的字符,类型不匹配所以触发 -Wformat 警告。

解决方法

你当前的输出是把字符的ASCII值按地址格式打印,0值输出为(nil),要保留这个输出同时消除警告,只需要把char值强制转换为void*类型即可。标准跨平台写法需要引入stdint.h的uintptr_t做中间转换,避免不同架构下整数和指针长度不匹配的问题。

修改后完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main() {
  char *myString = "Daniel";
  int x;

  printf("\nThe pointer variable's value is %p\n", (void*)(uintptr_t)*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*)(uintptr_t)myString[x]);
  }

  return 0;
}

如果你的运行平台是常见的x86/ARM 32位/64位环境,不想加额外头文件,也可以直接简化为(void*)*myString和(void*)myString[x],大部分编译器都可以正常编译无警告,输出和原版本完全一致。

内容的提问来源于stack exchange,提问作者SimTim124

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:15:06