谁能告诉我这是什么意思:"%.*s"
“%。* s”是什么意思作为printf中的格式说明符?
例如,在这里使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
谁能告诉我这是什么意思:"%.*s"
“%。* s”是什么意思作为printf中的格式说明符?
例如,在这里使用:
sprintf(outv->deliveryAddressCity,
"%.*s",
sizeof(outv->deliveryAddressCity)-1,
mi->deliveryAddressCity);
%.*s
意味着打印从下面的缓冲字符的第X号。在这种情况下,请打印mi->deliveryAddressCity
中的第一个sizeof(outv->deliveryAddressCity) - 1
个字符,防止写入超出outv->deliveryAddressCity
的范围。
较短例如:
printf("%.*s", 4, "hello world");
将打印hell
。
这是一个格式说明符,它从堆栈中取2个值,第一个是大小,第二个是值。
的。记法:ATLEAST-length.maxlength(就意味着 “*”:最大*字符)
也许你可以用这个例子中得到它:
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".
}
例如当混合C和Fortran,其中空格键而不是空终止(yuck)时, – djechlin 2013-03-04 16:08:11
它可以帮助您打印字符串的一部分。你可以指定你必须打印字符串的长度。例如:printf(“%。* s”,5,“rahul subedi”) 输出: rahul
http://www.cplusplus.com/reference/cstdio/printf/ – djechlin 2013-03-04 16:03:30
我冒昧地编辑由于代码不可读,因此将参数放在sprintf的不同行上。 – Lundin 2013-03-04 16:05:03
和你的重复 - http://stackoverflow.com/questions/5296123/what-does-this-statement-mean-printf-s-int-lengthsi – djechlin 2013-03-04 16:09:08