在c中的格式说明符中使用`+`

时间:2015-03-09 10:16:17

标签: c printf

为什么以下程序的输出是d

另外,请解释在printf语句中使用+

‪#‎include‬"stdio.h"
int main(){
    int a=1;
    printf("%d"+a);
    return 0;
}

3 个答案:

答案 0 :(得分:5)

问题是像"%d"这样的字符串文字实际上是一个数组(在这种情况下转换为指针)。

当您执行"%d"+a时,您并未将a附加到字符串文字中,而是取出指向此字符串的指针,并将a添加到它,并打印结果。

由于a为1,您将在"%d"开头后打印一个字符,即"d"

您的代码等同于以下内容:

#‎include‬"stdio.h"
int main(){
    const char* str = "%d";
    printf(str+1);
    return 0;
}

答案 1 :(得分:1)

输出

d

因为您将a添加到格式的指针中。格式现在看起来"d"a不被视为printf参数。

答案 2 :(得分:-2)

printf()将格式字符串作为第一个参数,然后使用变量将格式化变量替换为。您尝试使用+进行字符串连接,例如在Java中。你最有可能做的是:

#‎include‬"stdio.h"
int main(){
    int a=1;
    printf("%d", a);
    return 0;
}