我正在学习如何在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的新手,我还在熟悉这种语言的语法和怪癖。如果能帮上忙就太感谢了。
1条答案
按热度按时间col17t5w1#
"%s = %s\n"
printf
的第一个参数是格式字符串,它包含要打印的文本和转换说明符。转换说明符以%
开头,%s
表示 "用字符串" 替换此转换说明符"。对于每个转换说明符,printf
期望您还提供了与该转换说明符匹配的参数。在本例中,您有两个%s
,因此在第一个参数之后应该有两个(const) char*
参数-您也有。azColName[i]
这将
azColName
中的 *i
:th *char*
提供给printf
argv[i] ? argv[i] : "NULL"
它使用条件运算符
? :
来提供printf
期望的第二个字符串(在格式字符串之后)。它是这样构建的:在你的例子中,这意味着,如果
argv[i]
计算为true
(也就是说,它不是一个NULL
指针),表达式的结果将是argv[i]
,否则将是"NULL"
。* expression-true * 和 * expression-false * 都是char*
(在"NULL"
的情况下,它 * 衰减 * 为char*
),因此会使printf
高兴。