gpt4 book ai didi

c - 拆分包含 IP 地址的数组时出现段错误

转载 作者:太空狗 更新时间:2023-10-29 15:26:12 24 4
gpt4 key购买 nike

拆分 IP 地址后,我想挑选出最后一个元素,即 15 并递增它,但是在 buff 中获得 192 后,当它进入第一种情况时,我遇到了段错误!

为什么不能更进一步?可能是什么问题?

int main(int argc, char** argv) 
{

char str[] = "192.168.10.15";
char str1[12];
char *str2, *str3, *str4, *str5;
unsigned char bytes[4];
int i = 0;

int lastelem;

char* buff = (char *)malloc(20);
buff = strtok(str,".");


while (buff != NULL)
{
printf("%s\n",buff);

switch(i)
{
case 0: str2=buff;
break;

case 1: str3=buff;
break;

case 2: str4=buff;
break;

case 3: str5=buff;
break;
}

lastelem=atoi(str5);
sprintf(str5, "%d",lastelem);

bytes[i] = (unsigned char)atoi(buff);
buff = strtok(NULL,".");
i++;
}
return 0;
}

最佳答案

在您的代码中,在第一次迭代中,(或者,对于这种情况,在任何其他迭代中,除非命中 case 3)

 lastelem=atoi(str5);

str5 未初始化,因此调用 undefined behaviour .

str5 只能在分配后使用。如果需要,您可以使用标志来标记 case 3 上的hit,或者将代码放在 case block 本身下。

此外,您不需要为 buff 分配内存,因为您正在用 strtok() 返回的指针覆盖它。这会创建一个 memory leak .

关于c - 拆分包含 IP 地址的数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849426/

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