我希望下面的行最多可以从变量filename
获取6个字符,并将其附加到变量dmpfilename
:
sprintf (dmpfilename, "InstrumentList_FULL.csv_%.*s",6, filename);
sprintf (dmpfilename, "InstrumentList_FULL.csv_%*s" ,6, filename);
sprintf (dmpfilename, "InstrumentList_FULL.csv_%6s", filename);
但是他们附加了更多的字符(他们将文件名带到' \ 0')。 我究竟做错了什么?
答案 0 :(得分:4)
你的第一次尝试应该有效,它根据the manual page使用具有正确语义的精度:
这为s和S转换提供了从字符串打印的最大字符数。
对于其他人,除了错误的期望外,你没有做错任何事。 manual page明确指出:
在任何情况下,不存在或小的字段宽度都不会导致字段截断;如果转换结果比字段宽度宽,则扩展该字段以包含转换结果。
你期待截断但却没有得到它,因为那不是它的工作方式。
我测试了基于精度的(%.*s
)并且它运行良好。