使用char指针 - >分段错误[重复]

问题描述 投票:-4回答:1

我是初学者,在学校我们有任务通过使用指针拆分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
c pointers char segmentation-fault fault
1个回答
0
投票
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); 
© www.soinside.com 2019 - 2024. All rights reserved.