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

C语言将指针作为函数参数使用,printf输出字符串为null如何解决?

问题原因

你的代码有两处核心的类型不匹配错误,均属于C语言的未定义行为,你观测到的(null)只是未定义行为的其中一种表现:

  • 第一处错误在printf的字符串参数部分:%s格式符要求传入的参数是指向字符串首地址的char*类型指针,但你写的*string是对string指针做解引用操作,拿到的是字符串第一个字符'H'的ASCII值(数值为0x48)。printf会把这个传入的字符值当成内存地址去读取字符串,这个地址本身不属于合法的字符串内存区间,你观测到输出(null)只是平台处理非法地址的凑巧表现,多数情况下这个错误会直接导致程序崩溃。
  • 第二处错误在printf的数字参数部分:%d格式符仅适用于int类型,你传入的number是int64_t类型,类型不匹配。如果当前环境中int是32位长度,该写法同样会触发未定义行为,你现在能正常输出42只是小端存储模式下高位补0的凑巧结果。
    另外你代码开头的(void)number;和(void)string;是用来消除「变量未使用」编译警告的写法,你后续已经使用了这两个变量,这两行可以直接删除。

修正后的代码

#include <stdio.h>
#include <inttypes.h> // 包含PRId64宏的头文件

void print_line(int64_t number, char *string)
{
    // 用PRId64匹配int64_t类型,直接传string指针给%s
    printf("%" PRId64 " %s \n", number, string);
    return;
}

int main()
{
    print_line(42, "Hello World!");
    return 0;
}

运行后即可输出预期结果:42 Hello World!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:03