ANSI C 自动将相邻的字符串合并起来,但是这也给程序埋下了晦涩的bug,假如在你遗漏了“,”(逗号)的时候,这将是地狱开门的时候。
以下是一段示例程序,将有助于你理解这个bug的伏笔
#include "stdio.h"
int main(int argc, char* argv[])
{
printf("Hello World!/n");
//session 1:输出毗邻的三个常量字符串,ANSI C 会自动将它们合并为一个字符串常量
printf("ANSI C will ""connect adjoning con""stant string/n");
//session 2:ANSI C 自动将相邻的两个字符串常量结合在一起
//以下声明中少了一个逗号,则编译直接通过,但是意思却相差很远
//数组的元素也从三个减到两个,
//这就为后续的数组使用埋下了一个bug,如果后面调用 constant_str[2] 的话,bug 就出来了
char *constant_str[]={"a fo apple","b for ball""s for silly"};
printf("b for ball == %s?/n", constant_str[1]);
//conclusion: ANSI C 会自动将相邻的两个字符串常量连接,如果它们之间没有逗号隔开的话。
return 0;
}
运行结果:
ANSI C will connect adjoning constant string
b for ball == b for balls for silly?