“%。* s”是什么意思作为printf中的格式说明符?

时间:2013-03-04 16:00:41

标签: c

任何人都可以告诉我这意味着什么:"%.*s"

例如,它在这里使用:

  sprintf(outv->deliveryAddressCity, 
          "%.*s",
          sizeof(outv->deliveryAddressCity)-1,
          mi->deliveryAddressCity);

7 个答案:

答案 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)

答案 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”) 输出: 拉胡