使用%.s的sprintf用法

Ice*_*man 4 c printf

虽然像这样使用sprintf

sprintf("%.40s",str);
Run Code Online (Sandbox Code Playgroud)

我想给strlen(str)代替40这样的值.我该怎么做?我尝试用strlen(str)替换40,但是不起作用.给予像这样的价值

#define len strlen(str)
Run Code Online (Sandbox Code Playgroud)

并且使用%.len也不起作用,因为%.len用于"".

md5*_*md5 9

使用*角色.

sprintf(/* ... */, "%.*s", (int) strlen(str), str);
Run Code Online (Sandbox Code Playgroud)

如果使用C99,snprintf也可以适用.

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


wes*_*ton 5

正如GajananH指出的那样,这毫无意义:

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

如果strNULL终止,则:

sprintf(str2, "%.*s", strlen(str), str);
Run Code Online (Sandbox Code Playgroud)

只是过于复杂了:

sprintf(str2, "%s", str);
Run Code Online (Sandbox Code Playgroud)

本身仅仅是一个过度复杂的问题:

strcpy(str2, str);
Run Code Online (Sandbox Code Playgroud)