gpt4 book ai didi

c - 避免内联 c 中无效的初始化程序

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

我有一个函数原型(prototype),它为我提供了我想要的结果:

#include <stdio.h>
#include <string.h>

int main ()
{
char * pch;
char str[] = " 81.243.230.174, 10.1.0.102";
pch = (char*) memchr (str, ',', strlen(str));
char * tch;
memcpy (tch, str, pch-str);
if (pch!=NULL){
printf ("',' found at position %ld.\n", pch-str);
printf ("XFF: %s\n", tch);
} else {
printf ("',' not found.\n");
}
return 0;
}

返回以下内容: $>',' 在位置 15 处找到。 $>XFF:81.243.230.174

我想将libvcl中VRT_GetHdr的输出处理为上面的str,如下所示:

char * pch;
char str[] = VRT_GetHdr(sp, HDR_REQ, "\023X-FF:");
pch = (char*) memchr (str, ',', strlen(str));
char * xff;
memcpy (xff, str, pch-str);

if (get_country_code)
VRT_SetHdr(sp, HDR_REQ, "\017X-Country-Code:", (*get_country_code)(xff), vrt_magic_string_end);

VRT_GetHdr 返回一个 char 指针,编译器提示“无效的初始值设定项”。

如果我改变分配 字符 str[]到 字符*str, Varnish 在运行时死亡(可能出现段错误)。如何从内联 C 中获得预期结果,而不使用上面指向数组困惑的指针?

最佳答案

一旦克服了编译器错误,您就会遇到段错误。在复制到 xff 之前,您需要为其分配内存。

char * pch;
char* str = VRT_GetHdr(sp, HDR_REQ, "\023X-FF:");
pch = (char*) memchr (str, ',', strlen(str));
char* xff = malloc(pch-str);
memcpy (xff, str, pch-str);
/* use xff as required */
free(xff);

关于c - 避免内联 c 中无效的初始化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473673/

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