这个问题在这里已有答案:
我是初学者,在学校我们有任务通过使用指针拆分char数组。我想分割名称和生日(delimiter ='。')。我的解决方案适用于名称,但在生日那天我会遇到分段错误。
int main(int argc, char *argv[])
{
char *fullname;
char *name;
char *lastname;
char *birthday;
char *day;
fullname = argv[1];
birthday = argv[2];
int i = 0;
int y = 0;
int z = 0;
while(fullname[i] != '.'){
char x = fullname[i];
name[i] = x;
fullname[i] = ' ';
i++;
}
i++;
while(fullname[i] != '\0'){
char x = fullname[i];
lastname[y] = x;
fullname[i] = ' ';
i++;
y++;
}
while(birthday[z] != '.'){
char b = birthday[z];
day[z] = b;
z++;
}
}
在命令行中输入(./a是cygwin上的exe文件):
./a mister.gold 11.05.2005
输出:
segmentation fault
当我启动没有最后一个循环的代码时,我的输出是:
mister
gold
char *name ;
char *lastname;
两个char数组指针,但它们指向两个?什么都没有,所以你基本上试图访问你不拥有的内存为你分配内存,你应该这样做:
// assuming the maximum size if 512 for example or you can give it any size you think is enough
char *name =malloc(512);
char *lastname=malloc(512);
现在他们指出了你可以访问和修改的东西
在使用完它们之后,你应该释放动态分配的内存,就像这样
free(lastname);
free(name);