我正在做一项作业,要求我实现优先级队列。它必须通过 19 项断言。我可以通过 18/19 断言,但它卡在了这个断言上。
assert(head->data == "first node");
这对我来说没有意义,因为为什么它使用 == 来比较两个字符串而不是 strcmp
?我该如何通过这个断言?我不允许用断言更改代码。这是教授的错误还是我遗漏了什么。
用于访问数据的结构如下。
typedef struct node {
int priority;
char * data;
struct node * next;
} Node_t, * Node_ptr_t;
最佳答案
如果这是严格的 C 语言,那么大多数具有“内部字符串”的编译器都可以满足这样的断言 - 重用指向现有常量字符串的指针,而不是将值复制到本地数组。大多数编译器/链接器工具将统一对同一常量的所有引用。请参阅How can I do string interning in C or C++?
请注意,实习并不能得到保证 - 但我认为这是解决问题的唯一方法。应该是讨论 C 中“已定义”/“未定义”/“未指定”行为的良好起点。
<小时/>最初它被标记为 C++:如果这个问题是关于 C++ 重载的 operator ==
- 如果 data
的类开放供您修改,那么您可以添加 operator ==
将满足该断言(您可以简单地始终从中返回 true
)。
关于C 使用 == 比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775194/