gpt4 book ai didi

c - 使用指针作为输入从自定义函数中手动拆分 C 中的字符串

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

我的目标是读取浏览器 cookie 数据并根据 cookie 名称提取值。

例如,如果浏览器拥有的 cookie 数据类似于:

ABC=LETTER ; 123=NUMBER ; A12=ALPHANUM

我将单词 ABC 传递给函数,我想接收单词 LETTER 作为值。同样,如果我通过了 A12,我想收到 ALPHANUM。

我对如何扫描字符串并提取其中的一部分以用作输出感到困惑。在函数 apr_table_get 中,行和 request_rec 参数都是必需的,因为这是我的 apache 模块的一部分。

这是我如何以最简单的形式从 apache 处理函数调用该函数(假设 r 是指向 apache 结构的指针):

char* cookie=malloc(1000);
get_cookie(r,"ABC\0",cookie);

这是函数:

void get_cookie(request_rec *r,const char *name,char*cooky){
const char* cook=apr_table_get(r->headers_in, "Cookie");
if (cook){
char *n=name,*n2=name,*c=cook;int sz=8000;short m=0;
while (sz-- > 0){
if (c != ' '){
if (m==0){if (c==n){*n++;}else{if (c=='='){if (n==0){m=1;}else{m=-1;}}else{m=-1;}}}
if (c==';'){if (m==1){return;}else{m=0;*n=*n2;}}

if (c==';'){m=0;*n=*n2;}
if (c==0){break;}

}
*c++;
}
}
}

当我编译代码时,我收到以下警告:“初始化丢弃指针目标类型中的限定符”和“指针与整数之间的比较”

我认为它需要修复,但我会用外行术语解释该函数必须如何工作:

第一行接收一个指向包含 cookie 数据的内存空间的指针。

如果没有数据,则函数退出。

接下来,我尝试分配两个变量(n 和 n2)用作 cookie 名称指针的副本,以便我可以扫描该名称。如果不为 n 和 n2 添加 (char*) 前缀,我会收到警告。 cookie 字符串指针也是如此。

我还将一个整数设置为 8000,表示该函数将扫描的最大字符数,以防止程序锁定。我还有一个小整数表示模式(在代码中名为 m)。

在循环中,指向 cookie 字符串的指针应该递增(因此 *c++),以便计算每个字符。我根据模式检查每个增量上的原始字符与一组字符,并且忽略空格。

如果模式为零,则表示重置并搜索名称。一旦名称匹配(基于单个字符等于减去空格),模式将变为 1,这意味着扫描值并加载 cookie(输出 cookie 值)。如果模式为-1,则意味着没有匹配项,循环必须找到另一个分号以使模式为零。一旦找到匹配项,该函数就会退出。

在名称搜索模式下,第二个名称指针(n2)始终保持不变,第三个名称指针(n)递增,因此我可以抓取 cookie 名称中的每个单独字符,直到第一个空字符或直到cookie数据中的字符(通过扫描c)是等号。一旦命中其中任何一个且未找到匹配项,我会将 n 指针设置为等于 n2,以便可以再次重新开始扫描名称。

我认为可能让我失望的是在引用指针时在代码中不正确地使用了星号和与号,因为无论我做什么,都不会返回任何内容。

我想避免特殊的字符串函数(函数中的第一行除外),因为我想让执行尽可能快。

任何人都可以指出我可以在代码中修复哪些内容以使其正常工作吗?

最佳答案

When I compile the code, I get these warnings: "initialization discards qualifiers from pointer target type"

        const char * n=name, // ... const was missing

I think what may be throwing me off is improper use of stars and ampersands in my code when referencing pointers

确实 - 显然间接运算符 * 已被误认为是地址运算符,或者换句话说,指针变量已被误认为是类似 C++ 的引用变量。在循环中,无论 nn2c 出现在 * 之后,都将使用指针值,所以不应该有 * ,并且无论 nn2c 出现时没有 *,它们指向的 char 对象,因此需要一个 *

nothing is returned.

仍然在return 之前,缺少将找到的cookie 值复制到cookie 空间的情况。为此,当找到 = 时,存储 c 的值会很有用。

关于c - 使用指针作为输入从自定义函数中手动拆分 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28038135/

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