像这样使用 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
必须以 NULL 终止。
如果str
是 NULL 终止,则:
sprintf(str2, "%.*s", strlen(str), str);
只是过于复杂:
sprintf(str2, "%s", str);
这本身就是一个过于复杂的问题:
strcpy(str2, str);
我真的不明白使用strlen()
. 如果strlen()
对您有用,则意味着您的字符串以 NULL 结尾,并且如果字符串以 NULL 结尾,则没有真正使用为%s
(除非您尝试使用小于字符串长度的数字。
如果您的字符串不是以 NULL 结尾的,那么strlen()
将返回错误的值,并且使用该值%s
将无济于事。
相反,我建议您使用strnlen () 并限制字符串长度,并将返回值用于%s
.