私は私が求めている結果を私に提供する関数プロトタイプを持っています:
#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ポインターを返し、コンパイラーは「無効な初期化子」について文句を言います。
charstr[]の割り当てをchar*strに変更すると、ワニスは実行時に停止します(おそらく、セグメンテーション違反が発生します)。上記の配列の混乱へのポインタを使用せずに、インラインCから期待される結果を取得するにはどうすればよいですか?