C 使用 == 比较字符串

标签 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;

最佳答案

如果这是严格的 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/

相关文章:

java - 如何针对 Android 模拟器运行命令?

c++ - 在初始化全局变量时使用断言宏

.net - 使用 webrequest 时如何保持连接?

c - 类型定义 uint8 x[4]

c - 使用 eclipse 从 C 开始

c - 子进程会在 abort() 上发送 SIGCHLD 吗?

用于简单计算的 CUDA 加速

c - 如何使用#define宏调用特定函数?

c++ - 什么时候应该使用 assert()?

java - 在生产代码中使用 Spring Assert.notnull