C语言 sprintf usage with %.s



在使用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使用返回值。

最新更新