我在一道多选题的代码中看到以下内容:
#include <stdio.h>
int main()
{
int j =2, k =4;
printf(&j["Programming"], &k["Theory"]);
k = j ^ 3;
if (k == j)
printf(&k["Practical"], "Trytosolve");
else
printf(&j["Problem creation"]);
return 0;
}
在printf语句的引号("")外面并且在开头使用 & 符号。我只知道传统的printf语句及其格式规范。
我尝试运行此代码,没有错误,但出现了以下警告:
format not a string literal and no format arguments
以及以下输出:
ogrammingoblem creation
(这是多项选择题中的一个选项)。
我尝试搜索这种用法,但找不到。有人可以解释一下 & 和方括号的用法吗?
j["Programming"]
与*(j + "Programming")
是相同的,这是一个指针算术运算。 - UnholySheepman printf
解释了格式具有可选的shift state。由于j == 2
,因此第一个格式字符串输出的shift state从“Programming”的开头开始2个字符(即“ogramming”),而测试k == j
失败,导致else
打印以shift state为2
开始输出“oblem creation”,从而给您看到的输出。 - David C. Rankin