这个语句是什么意思?printf("[%.*s] ", (int) lengths[i],

5

我正在阅读这个页面http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html,其中有一行:

printf("[%.*s] ", (int) lengths[i],
              row[i] ? row[i] : "NULL");

从代码中

    MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;

num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
   unsigned long *lengths;
   lengths = mysql_fetch_lengths(result);
   for(i = 0; i < num_fields; i++)
   {
       printf("[%.*s] ", (int) lengths[i],
              row[i] ? row[i] : "NULL");
   }
   printf("\n");

在那段代码中,[%.*s]是什么意思?


2
你被 man 手册的哪一部分搞糊涂了? - Ignacio Vazquez-Abrams
只有这段代码 [%.*s]。它到底在做什么? - Vivek Goel
1
它执行了man页面所描述的操作。 - Ignacio Vazquez-Abrams
3个回答

8

[%.*s] 是一个 printf 格式字符串,意思是:

  • 第一个参数应该是一个整数(指定要打印的字符串的最大长度)。
  • 第二个参数应该是字符串本身。
  • 方括号 [](以及尾随空格)会原样传输。

通常,您会看到像 .7s 这样的东西,它表示一个 7 个字符的字符串。使用 * 表示长度应从给定的参数中获取。

因此,这整行代码的作用是打印一个字符串,其长度在 lengths[i] 中找到,其值为 row[i](除非 row[i] 为空,否则它将使用文字字符串 "NULL")。


1

%.*s 是一个输出格式字符串。

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL"); 

具体来说,在这种情况下,它的意思是打印第二个参数(row[i] 的内容或如果 row[i] 的内容为假则打印 'NULL'),最多可打印 lengths[i] 个字符。 方括号不是格式的一部分,它们会被打印出来。

0

[%.*s] 部分是用于 printf 格式化字符串的。

它指定 printf() 应输出一个字符串(row[i]),但应将输出限制为由参数 (length[i]) 指定的长度。 输出字符串用方括号括起来。

有关格式化字符串的更多信息,请参见 printf() 文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接