- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读这篇博文: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/
这个问题已经有答案了: Diff of two Dataframes (8 个回答) 已关闭 4 年前。 我有 2 个数据框(df_a 和 df_b),有 2 列:“动物”和“名称”。 在更大的数据框
如果我得到以下数字字符串,是否可以使用 LINQ 查询将这些数字一起加/减? string numbers = "1 + 1, 2 - 1, 3 + 3"; 所以我最终会得到这样的东西: 字符串数字
具有以下对象列表: public class Example { public string Local { get; set; } public string Type { get;
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
#include #include float sum (float *A, int len) // sum of table of floats { float ss = 0.0;
我正在阅读这篇博文:https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/ 我很困惑: size_t len = end
我正在阅读这篇博文:https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/ 我很困惑: size_t len = end
这个问题已经有答案了: Pointer Arithmetic In C (2 个回答) Pointer subtraction confusion (8 个回答) 已关闭 4 年前。 int vect
我知道这可能是个愚蠢的问题,但我遇到了一些麻烦,我很惭愧,但我真的不知道如何做到。我想加减两个以整数形式给出的“小时”。 #include #include #include using nam
大家好 StackOverflow.. 这个网站相当新,但我得到了很好的反馈!所以首先要感谢大家! 我想做的是类似于wonga的事情 https://www.wonga.com/ 但是随着值的协同工作
我是一名优秀的程序员,十分优秀!