在使用sprintf之类的
时sprintf("%.40s",str);
我想给出一个像strlen(str)这样的价值,以代替40。我该怎么做?我尝试用strlen(str)代替40,不起作用。给出
之类的价值#define len strlen(str)
且使用%.len无法正常工作,因为%.len在"。
使用*
字符。
sprintf(/* ... */, "%.*s", (int) strlen(str), str);
如果您使用C99,则snprintf
也可以合适。
man printf(3)
宽度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。
正如gajananh指出的那是一个毫无意义的端子:
对于strlen
工作,str
必须终止。
如果str
终止终止:
sprintf(str2, "%.*s", strlen(str), str);
只是一个过度的并发症:
sprintf(str2, "%s", str);
哪个本身只是一个过度的并发症:
strcpy(str2, str);
我真的不明白使用strlen()
的要点。如果strlen()
对您有用,这意味着您的字符串为null终止,如果字符串为null终止,则没有真正使用%s
的数字(除非您尝试使用小于字符串长度的数字。p>如果您的字符串未终止终止,则strlen()
将返回错误的值,并且将其用于%s
将无济于事。
相反,我建议您使用 strnlen (),并限制字符串长度并为%s
使用返回值。