gpt4 book ai didi

使用 strcmp/strncmp 比较 int8_t 和 char*

转载 作者:行者123 更新时间:2023-11-30 16:22:24 26 4
gpt4 key购买 nike

当前正在尝试修复一段时间未使用的代码。

我有两个变量:int8_t foo[size]const char* const bar

有一个 if 检查 if(0 != strcmp((char *)foo, bar))

目前,即使 printf("%s | %s", foo, bar) 返回两个完全相同的字符串,该方法还是失败。我还尝试了 strncmp ,但也失败了。

通过在线研究,我知道这很可能是由于终止空字节造成的,但是我不知道如何解决/解决这个问题。

int8_t foo[size];
const char* const bar;

if(0 != strcmp((char *)foo, bar)){
fail
}

预期结果是 strcmp 返回 0,因为打印时两个字符串相同。

实际结果:返回失败。

实际数据:5352A565712345657567565785658956581
运行 printf("Value of foo and bar: %s and %s", foo, bar) 时,两个变量都会返回上述数据。

最佳答案

仅仅拥有:

int8_t foo[] = { 'a', 'b' };

能够做到

if (strcmp(foo, "ab") == 0)
puts("equals");
else
puts("not equal");

因为 strcmp 与许多其他处理 char * 的函数一样,需要一个空字符来表示字符串的结尾。

strcmp 位于 foo 中的“b”之后时附加的内容是未定义的行为

所以

int8_t foo[] = { 'a', 'b', 0 };

strcmp(foo, "ab") 的候选者,这要归功于添加的空字符,允许 strcmp 不会超出 foo在任何情况下

<小时/>

请注意,如果您在第一种情况下执行 printf("%s", foo); ,也会出现同样的问题,而在 < 中的 'b' 之后内存中未到达空字符em>foo 函数 printf 会尝试将内存写入字符,但这是一个未定义的行为

关于使用 strcmp/strncmp 比较 int8_t 和 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54444646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com