【发布时间】:2021-01-12 10:02:56
【问题描述】:
我有 2 个项目:我编写了第一个 C 程序,它对单词进行子串化,它运行良好。然后我需要为第二个项目使用相同的代码:我将下面的代码块从第一个项目复制并粘贴到第二个项目。不幸的是,它不适用于第二个项目。 r 变量消失了。我用相同的内容同时调试了两个项目。但是在memmem 操作之后,r 的值就消失了。 ptr 是 u_int8_t 和参数。
const u_int8_t *r,
r = ptr
r = ( const u_int8_t *)memmem(r + 1, len - (r - ptr) - 2, tag, tl);
谢谢。
“值消失”表示IDE在调试模式下memmem操作后不显示变量。
这里是源代码:
char *gettag(const void *ptr, unsigned long len, const char *tag, unsigned long *gettaglen) {
unsigned long register r, l, tl;
char *rc;
tl = strlen(tag);
r = (unsigned long)memmem(ptr, len, tag, tl);
if (r == 0) {
l = 0;
} else {
r += tl;
l = (unsigned long)memmem((void *)r, len - (r - (unsigned long)ptr), "\r\n", 2);
if (l > 0) {
l -= r;
} else {
l = 0;
r = 0;
}
}
rc = (char*)r;
if (rc) {
while (rc[0] == ' ') {
rc++;
l--;
}
}
*gettaglen = l;
return rc;
}
【问题讨论】:
-
这个问题很不清楚。 “价值消失”是什么意思?请提供minimal verifiable example的代码、输入、预期结果和实际结果。
-
“值消失”表示IDE在debug模式下memmem操作后不显示变量。 @kaylum
-
什么IDE?你不认为至少告诉我们这么多有意义吗?而且不显示在哪里?我们看不到您正在查看的内容,因此您需要更清楚地描述问题。通常不鼓励对 SO 问题使用屏幕截图,但在这种情况下可能会有所帮助。
-
我在 Ubuntu 16.04 上使用 QT Creator。 @kaylum
-
@Ms.Sahin 您是否正在调试优化的构建?根据您稍后使用
r的方式,编译器甚至可以不为其分配内存/堆栈位置,而是在需要时将其存储在寄存器中。