在使用sprintf时,像这样
sprintf("%.40s",str);
我想在40的位置上输入像strlen(str)这样的值。怎么做呢?我尝试用strlen(str)替换40,但不起作用。请告诉我如何输入此类值。
#define len strlen(str)
并且使用 %.len 也不起作用,因为 %.len 在 " " 中被使用。
在使用sprintf时,像这样
sprintf("%.40s",str);
我想在40的位置上输入像strlen(str)这样的值。怎么做呢?我尝试用strlen(str)替换40,但不起作用。请告诉我如何输入此类值。
#define len strlen(str)
*
字符。sprintf(/* ... */, "%.*s", (int) strlen(str), str);
如果您使用C99,snprintf
也是适合的。
man printf (3)
宽度未在格式字符串中指定,而是作为要格式化的参数之前的附加整数值参数。
strlen
的结果转换为 int
类型,因为 *
需要的就是这种类型。如果 sizeof(size_t) > sizeof(int)
,在 64 位系统上通常会出现这种情况,没有进行转换可能会导致严重问题。 - Daniel Fischersprintf(str2, "%.*s", strlen(str), str);
sprintf(str2, "%s", str);
这本身只是一种过于复杂的表达方式:
strcpy(str2, str);
strlen()
的意义。如果strlen()
适用于您,那么这意味着您的字符串已经以NULL结尾,如果字符串已经以NULL结尾,那么在%s
中放置数字没有实际用途(除非您试图使用小于字符串长度的数字)。strlen()
将返回错误值,并且将其用于%s
将无法帮助。%s
。