gpt4 book ai didi

c - 即使两个字符串都正常,strcmp 也会崩溃

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

我有一个特殊的问题,我的程序在 strcmp 处崩溃。

根据 gdb 核心分析,我发现正在检查的两个字符串都是正常的,这意味着它们的指针不为 NULL,并且它们包含有限的 null 终止值。

但是其中一个字符串是垃圾(不是变量打算包含的字符串)

抛开它是垃圾这一事实不谈,我真的很想知道为什么 strcmp 会因为 2 个正常的字符串而崩溃?造成这种情况的可能原因是什么?

提前致谢!

编辑:

一个例子,

a = strcmp(b,c);
(gdb) p b
$92 = 0x7f58d3a36b89 "H\205\300uRH\215}\320\350\a\300\361\377A\276"
(gdb) p c
$93 = 0x2041e48 "MAIN"

最佳答案

bc 的值看起来不错,但由于优化,特别是诸如 strcmp()< 等函数 可能会经历剧烈的宏扩展,调试器可能无法获得实际值。

问题可能很容易在源代码中发现,您应该将源代码发布到有问题的函数。

gdb 为变量 b 打印的值 0x7f58d3a36b89 出奇地大!您可以尝试这样修改您的代码:

static char bb = *b;
static char cc = *c;
a = strcmp(b, c);

strcmp() 之前强制访问 bc 可能会导致崩溃,并让您验证 b 是否有效 确实是 gdb 打印的内容。

关于c - 即使两个字符串都正常,strcmp 也会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38870813/

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