C使用==比较字符串

时间:2017-01-21 02:36:05

标签: c assert

我正在执行一项要求我实现优先级队列的任务。它必须传递19个断言。我可以通过18/19断言,但它会卡在这个断言上。

assert(head->data == "first node");

这对我没有意义,因为为什么使用==比较两个字符串而不是strcmp?我怎么能通过这个断言?我不允许用断言更改代码。这是教授的错误还是我缺少的东西。

用于访问数据的结构如下所示。

typedef struct node {
    int priority;
    char * data;
    struct node * next;
} Node_t, * Node_ptr_t;

1 个答案:

答案 0 :(得分:1)

如果这是严格的C,对于大多数具有"实习字符串"的编译器,可以满足这样的断言。 - 重用指向现有常量字符串的指针,而不是将值复制到本地数组。大多数编译器/链接器工具将统一对同一常量的所有引用。见How can I do string interning in C or C++?

请注意,实习并不能保证 - 但我认为这是解决问题的唯一方法。应该是讨论什么是"定义" /"未定义" /"未指定"的良好起点。 C中的行为。

最初它被标记为C ++:如果这个问题是关于C ++重载的operator == - 如果data的类是开放的你可以修改,那么你可以添加operator ==来满足那个断言(你可以随时从它返回true)。