比较C语言中的文本空字符串

比较C语言中的文本空字符串,c,string-comparison,C,String Comparison,在C语言中,下面指定要做什么 我手头有一个编译器,它告诉我“确实等于”。但这种平等有保证吗 编辑:我完全理解指针比较和字符串比较在C语言中是如何工作的。我想问的是,C标准中为编译时常量空字符串指定了什么行为(如果有)。我认为字符串不能保证相等,但实际上通常是相等的,因为所有常量空字符串都将被插入到同一地址。但我想知道是否有人能提供一个明确的参考?我对此表示怀疑。您不是在比较字符串的内容,而是比较它们的地址,这意味着您依赖于编译器不发出两个在同一位置具有相同内容的文本字符串。它可能会起作用,但不是

在C语言中,下面指定要做什么

我手头有一个编译器,它告诉我
确实等于
。但这种平等有保证吗


编辑:我完全理解指针比较和字符串比较在C语言中是如何工作的。我想问的是,C标准中为编译时常量空字符串指定了什么行为(如果有)。我认为字符串不能保证相等,但实际上通常是相等的,因为所有常量空字符串都将被插入到同一地址。但我想知道是否有人能提供一个明确的参考?我对此表示怀疑。您不是在比较字符串的内容,而是比较它们的地址,这意味着您依赖于编译器不发出两个在同一位置具有相同内容的文本字符串。它可能会起作用,但不是你应该依赖的东西(也不清楚它的用途)


编辑:另请参见-它有一个基本相同的问题的答案,有将近一百次投票(并且是由一个编译器以不同方式编写的)。

我不认为有任何保证,这些问题将有相同的地址——我怀疑标准会要求这样的行为。为什么您需要依赖于这是可预测的呢?

说(6.4.5/6)

未指定[字符串文字]是否不同


不能保证平等。一直如此。你期待什么不同的东西?我的信念是,字符串不能保证相等,但实际上通常是相等的,因为所有常量空字符串都将被插入到相同的地址。但是我想知道是否有人可以提供一个明确的参考。C标准说(6.4.5/6):“还没有确定[字符串文字]是否是不同的”。@pmg,这就是我想要的。给我一个答案,我就接受。约翰·兹温克是对的,你在赌编译器的行为。你应该改用strcmp——当然,除非你真的对比较地址感兴趣。
if ("" == "")
{
    printf("Empty strings are equal\n");
}