C 使用字符指针->分段错误
我是一个初学者,在学校我们的任务是使用指针拆分字符数组。我要拆分名称和生日分隔符=''。我的解决方案非常适合这个名字,但是在生日那天使用它,我会遇到一个分割错误C 使用字符指针->分段错误,c,pointers,char,segmentation-fault,fault,C,Pointers,Char,Segmentation Fault,Fault,我是一个初学者,在学校我们的任务是使用指针拆分字符数组。我要拆分名称和生日分隔符=''。我的解决方案非常适合这个名字,但是在生日那天使用它,我会遇到一个分割错误 int main(int argc, char *argv[]) { char *fullname; char *name; char *lastname; char *birthday; char *day; fullname = argv[1]; birthday = argv
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
两个字符数组指针,但它们指向什么?没什么,所以你基本上是在尝试访问一个你不拥有的内存
要为它们分配内存,应执行以下操作:
// 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);
name、lastname和friends未初始化为指向任何有效内存。您不能使用未初始化的char*指针。@EugeneSh。谢谢你的回复,但是为什么当我删除最后一个循环时它会工作呢?它不会。这是未定义的行为。您应该检查argc==3,如果不是,例如,打印一个错误并返回stdlib.h中定义的EXIT_FAILURE,或者通常为非零。此外,您还可以检查是否未遇到“.”和“\0”。看,非常感谢。你甚至可以通过在argv[1]中为spot指定name和lastname来实现,但它们需要被指定在可写的地方。
free(lastname);
free(name);