打印时 C 程序中的意外输出

Unexpected output in C program when printing

假设包含所有头文件。

void main() { 
int i; 
clrscr(); 
printf("india"-'A'+'B'); 
getch(); }

以下函数的输出是:ndia

任何人都可以向我解释一下这个输出吗?

int printf(const char *restrict format, ...);

当您执行 format - 'A' + 'B' 时,考虑到 AB.

的 ASCII 值,它等于 format + 1

format 是基地址,当您执行 format + 1 时,它指向该字符串的第二个内存位置,并从那里开始打印,即 ndia.

表达式 "india"-'A'+'B' 在任何理智的代码中都没有意义。但它会(但见下文)导致指向第二个元素的指针,因为 'B' - 'A' 将计算为 1.

但是,子表达式 "india"-'A' 将调用未定义的行为,因为结果指针将指向数组外部。这在这里解释:

如果我们稍微改写并添加括号:"india"+('B'-'A') 表达式定义明确并等于 "india" + 1