当前位置: C语言 -- 专题 -- C语言中字符串与运算符

C语言中字符串与运算符

C语言没有字符串类型,而是使用char类型数组存储字符串,所以在C语言中无法使用运算符对字符串进行复制、拼接、比较等操作,例如:

char strOne[20] = "Hello";
char strTwo[20] = "World";

strOne = strTwo;    //非法。
strOne + strTwo;    //非法。

对于以下两种情况,对字符串使用运算符却是合法的。

1、初始化。

const char str[] = "Hello World";   //合法。

但需要注意的是,初始化中=符号并不是赋值运算符。根据ISO/IEC 9899:2018标准第6.5.16 Assignment operators节,赋值运算符的左操作数应为一个可修改左值。第6.3.2.1 Lvalues, arrays, and function designators节指出:可修改左值是个左值,其类型不能是数组类型,不完整类型或者使用const类型限定符限定的类型;如果可修改左值是结构或者联合类型,其成员也不能使用const类型限定符进行限定。这里=符号左侧很显然不是一个可修改左值,所以=符号也不是赋值运算符。


2、用作关系运算符或者相等运算符的操作数。

if("Hello">"hello")     //合法。
    ...

这里比较的不是两个字符串的内容,而是比较的两个字符串字面量首字符的地址值。