gpt4 book ai didi

arrays - C 中的 char* 相减

转载 作者:行者123 更新时间:2023-12-02 18:09:54 28 4
gpt4 key购买 nike

我正在阅读这篇博文:https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/

我很困惑:

size_t len = end - str;

如果我是正确的,C 中的字符串表示为数组,并且 C 字符串具有指向该数组的第一个元素的指针。那么上面那行是在处理数组下标吗?

他们发布了这些行:

size_t strlen_cacher(char *str) {
static char *start;
static char *end;
size_t len;
const size_t cap = 20000;

// if we have a "cached" string and current pointer is within it
if (start && str >= start && str <= end) {
// calculate the new strlen
len = end - str;

// if we're near the end, unload self
// we don't want to mess something else up
if (len < cap / 2)
MH_DisableHook((LPVOID)strlen_addr);

// super-fast return!
return len;
}

// count the actual length
// we need at least one measurement of the large JSON
// or normal strlen for other strings
len = builtin_strlen(str);

// if it was the really long string
// save it's start and end addresses
if (len > cap) {
start = str;
end = str + len;
}

// slow, boring return
return len;
}

最佳答案

假设代码是正确的,并且 end 是指向字符串 nul 终止符的指针, char 数组的最后一个元素。

这是简单的指针算术。在您的示例中,由于您将字符串作为参数传递,因此它将衰减为指向其第一个元素的指针,从指向同一数组的任何其他元素的指针中减去指向数组第一个元素的指针将为您提供偏移量对于这两个指针之间的元素数量,对于 char 或任何其他类型都是如此。

如以下代码所示:

#include <stdio.h>

int main() {

char str[] = "hello";

char *end = str + 5; // will point to the last element of str, the nul byte
// in the above expression str will decay

printf("%td", end - str); // 5
// when you pass str to printf, again it decays
}

关于arrays - C 中的 char* 相减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72564733/

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