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

使用sprintf生成文件名缓冲区遇格式错误,如何修正?

问题分析与解决

警告原因

你混淆了格式符的用途:%c是用来输出单个字符的,它要求的参数类型是int(实际传入char会被自动提升为int);但你传入的file_name是char*类型(字符数组名会隐式转换为指向首元素的指针),类型不匹配,所以clang-10抛出了格式不匹配的警告。

正确的格式化写法

要输出字符串(以\0结尾的字符数组),对应的格式符是%s,修改后的代码如下:

char file_name[ ] = "/path/filename.bin";
int file_name_len = sizeof(file_name);
char file_name_buffer[file_name_len];
sprintf(file_name_buffer, "%s", file_name); // 把%c改成%s
outfile = fopen(file_name_buffer, "wb+");

更优的替代方案

因为你只是单纯复制字符串,不需要复杂的格式化操作,直接使用strcpy会更高效、更直观:

strcpy(file_name_buffer, file_name);

strcpy专门用于字符串复制,它会自动处理末尾的\0,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:57:33