今天我在C 中看到 char的用法如下:
const char temp[] = "GET / HTTP/1.0\r\n"
"Host:www.google.com\r\n"
"\r\n";
起初,我认为会有编译错误,但实际上它通过了编译!
那么有人可以告诉我为什么它可以工作吗?
我是一个学习C编程的新人
非常感谢!
答案 0 :(得分:6)
如果将遗漏的分号放在最后,那么这句话
const char temp[] = "GET / HTTP/1.0\r\n"
"Host:www.google.com\r\n"
"\r\n";
相当于
const char temp[] = "GET / HTTP/1.0\r\nHost:www.google.com\r\n\r\n";
根据C标准中描述翻译阶段的部分,有书面
<强> 6。相邻的字符串文字标记是连接的
很容易将一个不适合一行的长字符串文字拆分成几个较短的相邻文字。
答案 1 :(得分:2)
const char str[] = "stringstringstring";
const char str[] = "string" "string" "string";
const char str[] = "string"
"string"
"string";
#define NAME "string"
const char str[] = "string" NAME "string";
所有人都会得到相同的结果。 C连接相邻的字符串。
答案 2 :(得分:1)
C有string literal concatenation,意味着相邻的字符串文字在编译时连接在一起;这允许将长字符串拆分为多行,并且还允许在编译时将C预处理器定义和宏生成的字符串文字附加到字符串。
例如:
printf(__FILE__ ": %d: Hello "
"world\n", __LINE__);
将扩展为
printf("helloworld.c" ": %d: Hello "
"world\n", 10);
在语法上等同于
printf("helloworld.c: %d: Hello world\n", 10);
答案 3 :(得分:1)
它是由多个串联字符串文字组成的单个字符串。 C语言允许彼此相邻的字符串文字不连接任何运算符以形成单个字符串。这对于跨越多行源的字符串常量非常有用,如您所见。当预处理器宏定义字符串文字时,它也很有用,您可以编写类似
的内容#define BALANCE_FMT "%5.2f"
printf("Your balance is: " BALANCE_FMT "\n", balance);