You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用可变参数无法正确打印整数,求自定义print函数错误排查

问题排查:自定义可变参数打印函数的错误

嘿,我来帮你梳理下这个问题的核心原因~

你的代码里的prints函数是一个可变参数函数,设计逻辑是用第一个参数n指定后续要打印的整数个数,然后通过va_list读取后续的int参数。但你在main里调用它的时候出了关键问题:

prints(5);

你告诉函数“要打印5个整数”,但完全没有传入这5个整数参数!这直接触发了C语言里的未定义行为——va_arg会试图从栈上读取不存在的内存数据,所以你看到的肯定是乱码、无意义的数值,甚至程序可能直接崩溃。

修正方法

调用prints函数时,必须保证第一个参数n的数值和后续传入的int参数个数严格匹配。比如如果你想打印5个整数,应该这么写:

int main() {
    // 传入5个整数参数,和第一个参数的5对应
    prints(5, 1, 2, 3, 4, 5);
    return 0;
}

额外提醒

C语言的可变参数机制不会自动检查参数的数量和类型是否匹配,所以完全依赖开发者自己保证调用的正确性:

  • 必须确保n的数值和后续int参数的个数一致
  • 必须保证后续参数的类型和va_arg指定的int类型匹配(比如不能传float或者字符串,否则也会出问题)

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

火山引擎 最新活动