使用像这样的sprintf
sprintf("%.40s",str);
我想用strlen(str)代替40这样的值。我该怎么做?我尝试用strlen(str)替换40,但是不起作用。给予像
这样的价值#define len strlen(str)
并且使用%.len不起作用,因为%.len用于“”。
答案 0 :(得分:9)
使用*
字符。
sprintf(/* ... */, "%.*s", (int) strlen(str), str);
如果您使用C99,snprintf
也适用。
man printf(3)
宽度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
答案 1 :(得分:5)
正如GajananH所指出的那样,这是一种毫无意义的努力:
要使strlen
起作用,str
必须以NULL结尾。
如果str
为NULL,则终止:
sprintf(str2, "%.*s", strlen(str), str);
只是过于复杂:
sprintf(str2, "%s", str);
这本身只是一个过于复杂的问题:
strcpy(str2, str);
答案 2 :(得分:2)
我真的不明白使用strlen()
的意义。如果strlen()
适合你,那意味着你的字符串是NULL终止的,如果字符串是NULL终止,则没有真正使用为%s
添加数字(除非你试图使用小于字符串的长度。
如果您的字符串未以NULL结尾,那么strlen()
将返回错误的值,并且将%s
用于%s
无效。
相反,我建议您使用strnlen()对字符串长度进行限制,并使用{{1}}的返回值。