使用 char 指针 -> 分段错误
Working with char pointer -> Segmentation fault
我是初学者,在学校我们的任务是使用指针拆分 char 数组。我想拆分名称和生日(分隔符 = '.')。我的解决方案非常适合这个名字,但是在生日那天这样做我遇到了分段错误。
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] != '[=10=]'){
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;
两个字符数组指针,但是它们指向两个什么?没什么,所以你基本上是在尝试访问你不拥有的内存
为它们分配内存你应该这样做:
// 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);
我是初学者,在学校我们的任务是使用指针拆分 char 数组。我想拆分名称和生日(分隔符 = '.')。我的解决方案非常适合这个名字,但是在生日那天这样做我遇到了分段错误。
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] != '[=10=]'){
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;
两个字符数组指针,但是它们指向两个什么?没什么,所以你基本上是在尝试访问你不拥有的内存 为它们分配内存你应该这样做:
// 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);