比较C中的文字空字符串

时间:2011-04-28 13:34:48

标签: c string-comparison

在C中,以下指定要做什么?

if ("" == "")
{
    printf("Empty strings are equal\n");
}

我手边有一个编译器告诉我""确实等于""。但这种平等是否有保障?

编辑:我完全理解指针比较和字符串比较在C中是如何工作的。我要问的是在C标准中为编译时常量空指定了什么行为,如果有的话字符串。我的信念是,字符串不能保证相等,但实际上通常是相同的,因为所有const空字符串都将被固定到同一地址。但我想知道是否有人可以提供明确的参考

3 个答案:

答案 0 :(得分:12)

C Standard说(6.4.5 / 6)

  

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

答案 1 :(得分:5)

保证?我对此表示怀疑。您不是在比较字符串的内容,而是比较它们的地址,这意味着您依赖于编译器不会发出恰好在同一位置具有相同内容的两个文字字符串。它可能有用,但不是你应该依赖的东西(也不清楚它对它有用)。

编辑:另请参阅Why is "a" != "a" in C? - 它有近百个upvotes基本相同的问题的答案(并且由编译器以不同方式执行的用户编写)。

答案 2 :(得分:0)

我认为没有任何保证它们具有相同的地址 - 我怀疑标准会要求这样的行为。为什么你需要依赖这个可预测的呢?