4

像这样使用 sprintf

sprintf("%.40s",str);

我想给出一个类似 strlen(str) 的值来代替 40。我该怎么做?我尝试用 strlen(str) 替换 40,不起作用。给出一个像

#define len strlen(str)

并且使用 %.len 也不起作用,因为 %.len 在“”中使用。

4

3 回答 3

9

使用*字符。

sprintf(/* ... */, "%.*s", (int) strlen(str), str);

如果你用C99,snprintf也可以适合。

man printf (3)
宽度不在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。

于 2012-11-08T12:41:16.823 回答
5

正如 GajananH 指出的那样,这是一个毫无意义的努力:

为了strlen工作,str必须以 NULL 终止。

如果str是 NULL 终止,则:

sprintf(str2, "%.*s", strlen(str), str);

只是过于复杂:

sprintf(str2, "%s", str);

这本身就是一个过于复杂的问题:

strcpy(str2, str);
于 2012-11-08T14:31:30.160 回答
2

我真的不明白使用strlen(). 如果strlen()对您有用,则意味着您的字符串以 NULL 结尾,并且如果字符串以 NULL 结尾,则没有真正使用为%s(除非您尝试使用小于字符串长度的数字。

如果您的字符串不是以 NULL 结尾的,那么strlen()将返回错误的值,并且使用该值%s将无济于事。

相反,我建议您使用strnlen () 并限制字符串长度,并将返回值用于%s.

于 2012-11-08T13:01:53.327 回答