在c中的printf函数中?是什么意思

jk9hmnmh  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在学习如何在C上使用sqlite3,并查看了以下代码:

static int callback(void *data, int argc, char **argv, char **azColName){
   int i;
   fprintf(stderr, "%s: ", (const char*)data);
   
   for(i = 0; i<argc; i++){
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
   }
   
   printf("\n");
   return 0;
}

我在想什么能帮你?,:,%s = %s在printf中的平均值

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

我是c的新手,我还在熟悉这种语言的语法和怪癖。如果能帮上忙就太感谢了。

col17t5w

col17t5w1#

  • "%s = %s\n"

printf的第一个参数是格式字符串,它包含要打印的文本和转换说明符。转换说明符以%开头,%s表示 "用字符串" 替换此转换说明符"。对于每个转换说明符,printf期望您还提供了与该转换说明符匹配的参数。在本例中,您有两个%s,因此在第一个参数之后应该有两个(const) char*参数-您也有。

  • azColName[i]

这将azColName中的 * i:th * char*提供给printf

  • argv[i] ? argv[i] : "NULL"

它使用条件运算符? :来提供printf期望的第二个字符串(在格式字符串之后)。它是这样构建的:

condition ? expression-true : expression-false

在你的例子中,这意味着,如果argv[i]计算为true(也就是说,它不是一个NULL指针),表达式的结果将是argv[i],否则将是"NULL"。* expression-true * 和 * expression-false * 都是char*(在"NULL"的情况下,它 * 衰减 * 为char*),因此会使printf高兴。

相关问题