任何人都可以告诉我这意味着什么:"%.*s"
例如,它在这里使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
答案 0 :(得分:7)
%.*s
表示从以下缓冲区打印前X个字符。在这种情况下,请打印sizeof(outv->deliveryAddressCity) - 1
中的第一个mi->deliveryAddressCity
个字符,以防止写入超出outv->deliveryAddressCity
的范围。
一个较短的例子:
printf("%.*s", 4, "hello world");
会打印hell
。
答案 1 :(得分:2)
也许你可以通过这个例子得到它:
printf("%.*s", 3, "abcdef");
打印“abc”。
答案 2 :(得分:2)
因此,在您的情况下,字符串的大小为sizeof(outv->deliveryAddressCity )-1
答案 3 :(得分:1)
宽度和精度格式化参数可以省略,或者它们可以是嵌入在格式字符串中的固定数字,或者在格式字符串中用星号“*”表示时作为另一个函数参数传递。例如printf(“%* d”,5,10)将导致打印“10”,总宽度为5个字符,printf(“%。* s”,3,“abcdef”)将导致“abc”正在印刷。
(在搜索引擎上找到它真的很容易......)
答案 4 :(得分:1)
最常用的是当你有一个非空终止的字符串,并且长度存储在别处。
例如:
{
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".
}
答案 5 :(得分:0)
这是一个格式说明符,从堆栈中取2个值,第一个是大小,第二个是值。
。-notation:atleast-length.maxlength(所以“。*”表示:max * characters)
答案 6 :(得分:0)
它可以帮助您打印字符串的一部分。你可以指定你必须打印字符串的长度。例如:printf(“%。* s”,5,“rahul subedi”) 输出: 拉胡