谁能告诉我这是什么意思:"%.*s"
例如,它在这里使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
谁能告诉我这是什么意思:"%.*s"
例如,它在这里使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
%.*s
表示从以下缓冲区打印前 X 个字符。在这种情况下,从 打印第一个sizeof(outv->deliveryAddressCity) - 1
字符mi->deliveryAddressCity
,防止超出 的范围outv->deliveryAddressCity
。
一个更短的例子:
printf("%.*s", 4, "hello world");
会打印hell
.
也许你可以通过这个例子得到它:
printf("%.*s", 3, "abcdef");
打印“abc”。
.*
精度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
所以在你的情况下,字符串的大小是sizeof(outv->deliveryAddressCity )-1
宽度和精度格式参数可以省略,或者它们可以是嵌入格式字符串中的固定数字,或者在格式字符串中由星号“*”指示时作为另一个函数参数传递。例如 printf("%*d", 5, 10) 将导致打印 "10",总宽度为 5 个字符,而 printf("%.*s", 3, "abcdef") 将导致“abc”正在打印。
(在搜索引擎上很容易找到它......)
当您有一个非空终止的字符串并且长度存储在其他地方时,它最常使用。
例如:
{
char* regular_string = "Hello World"; // This string has a null-Terminator.
char untermed_string[11];
int len;
// Specifically make untermed string so it is NOT null-terminated.
memcpy(untermed_string, regular_string, 11);
len = 11;
printf("The string is %.*s\n", len, untermed_string); // This will still print the proper data!
printf("The start of the string is %.*s\n", 5, untermed_string); // This will only print "Hello".
}
这是一个格式说明符,它从堆栈中获取 2 个值,第一个是大小,第二个是值。
.-notation:atleast-length.maxlength(所以“.*”表示:最大 * 个字符)
它可以帮助您打印字符串的一部分。您可以指定打印字符串的长度。示例:printf("%.*s", 5,,"rahul subedi") 输出:rahul