使用 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);