字符串减去C中的字符串

时间:2017-03-09 20:43:27

标签: c string

结果如何:

#include<stdio.h>
int main(void)
{
    printf("%d", "abcde" - "abcde");
}

在C等于-2? 请详细解释

2 个答案:

答案 0 :(得分:3)

一些编译器使用与单个地址相同的内容来优化静态字符串(字符串实习)。

如果你正在使用这样的编译器,结果当然是0(指针算术)。

如果您使用的编译器没有实习字符串(或错过某些内部连接),则结果是未定义的。如果指针不相关,则指针算术无效。你只是垃圾。

答案 1 :(得分:1)

您的字符串“abcde”和“abcde”就是所谓的string literals

字符串文字作为静态常量数据存储在程序的可执行文件中。究竟如何表示它们取决于多种因素,包括用于构建程序的工具链以及运行代码的平台。理解这一点非常重要,因为您观察到的行为无法得到保证。

执行减法时,实际上是在执行指针arithmetic between两个const char指针,它们引用程序的静态常量数据。减法的结果可以告诉您链接器决定存储字符串数据的位置。