【发布时间】:2015-10-29 05:28:00
【问题描述】:
拆分 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;
}
【问题讨论】:
-
discards????哇.. -
请see why not to cast
malloc()和C中的family返回值。 -
@SouravGhosh:总有一天,你关于不投射
malloc()的消息将通过! -
这个
char* buff = (char *)malloc(20); buff = strtok(str,".");泄漏了20字节的内存。此外,您不能为每个作业复制一个数组。 -
sscanf(str,"%d.%d.%d.%d",&n1,&n2,&n3,&n4);
标签: c string pointers split segmentation-fault