一个程序出现段错误,帮忙看一下。
函数功能是将源字符串(域名)用.分割,返回倒数第二个字串。
到了语句 strcpy(arr[j],token);就出现段错误,怎么回事阿?
void parse_name(char *sour,char *dest)
{
char seps[] = ".";
char *token;
int j=0;
char *arr[10];
token = strtok( sour, seps );
while( token != NULL )
{
arr[j]=(char *)malloc(512);
strcpy(arr[j],token);
j++;
token = strtok( NULL, seps );
}
dest=arr[j-2];
}
[解决办法]
你的代码逻辑没问题,问题是你的参数传递有问题。
void parse_name(char *sour,char *dest)这样是不能传值的,要改成
void parse_name(char ×*sour,char *dest)使用指针的指针,因为指针在参数中只是一份拷贝
还有就是需要释放分配的多余内存。
[解决办法]
大致是这样的逻辑才对,另外注意一下内存释放的问题,free就需要自己处理了:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
char* parse_name(char* sour)
{
char seps[] = ".";
char* token;
int j = 0;
char* arr[10];
token = strtok(sour, seps);
while(token != NULL)
{
arr[j] = (char*)malloc(512);
strcpy(arr[j], token);
j++;
token = strtok(NULL, seps);
}
return arr[j - 2];
}
int main(int argc, char* argv[])
{
char sour[] = "www.tom.com";
char* dest;
printf("%s\n", parse_name(sour));
return 0;
}