英文:
what does ? mean inside a printf function in c
问题
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
In the printf statement you provided, here's what each part means:
-
%s: This is a format specifier used in C'sprintffunction to indicate that a string should be inserted at this position. -
=: This is a literal character that will be printed as-is. -
%s: Another format specifier, indicating that another string should be inserted here. -
\n: This is a newline character, which moves the cursor to the next line after printing the preceding text.
The expression inside the printf statement, argv[i] ? argv[i] : "NULL", is a conditional expression (also known as a ternary operator). It is used to print the value of argv[i] if it is not NULL, and if it is NULL, it prints the string "NULL" instead.
So, the entire printf statement is used to print a line in the format: "ColumnName = ColumnValue" where ColumnName is taken from azColName[i], and ColumnValue is either the value from argv[i] or the string "NULL" if argv[i] is NULL.
英文:
I am learining about how to use sqlite3 on c and was lookinbg at this code:
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;
}
I was wondering what does ?, :, %s = %s mean in printf
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
I'm new to c and I'm still getting familiar to the syntax and the quirks of this language. Help would be much appreciated.
答案1
得分: 3
-
"%s = %s\n"
第一个参数是printf的格式字符串,其中包含要打印的文本和转换说明符。转换说明符以%开头,%s表示“用字符串替换此转换说明符”。对于每个转换说明符,printf期望您还提供与该转换说明符匹配的参数。在您的情况下,有两个%s,因此在第一个参数之后应该有两个(const) char*参数 - 而您也有这两个参数。 -
azColName[i]
这将azColName中的第i个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满意。
英文:
-
"%s = %s\n"
The first argument toprintfis the format string which contains the text to print mixed with conversion specifiers. The conversion specifiers start with%and%smeans "replace this conversion specifier with a string". For every conversion specifier,printfexpects that you've also supplied an argument matching that conversion specifier. In your case, you have two%sso there should be two(const) char*arguments after the first argument - which you also have. -
azColName[i]
This supplies thei:thchar*inazColNametoprintf -
argv[i] ? argv[i] : "NULL"
This uses the conditional operator? :in order to supply the second string thatprintfexpects (after the format string). It's built like this:condition ? expression-true : expression-falseIn your case it means, if
argv[i]evaluates totrue(that is, it's not aNULLpointer), the result of the expression will beargv[i], otherwise it will be"NULL". Both expression-true and expression-false arechar*(in the case of"NULL", it decays into achar*) and will therefore makeprintfhappy.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论