【发布时间】:2019-07-08 23:15:32
【问题描述】:
我是一个初学者,在学校我们的任务是使用指针拆分一个 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] != '\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
【问题讨论】:
-
name、lastname和好友未初始化为指向任何有效内存。 -
你不能使用未初始化的
char*指针。 -
@EugeneSh。感谢您的回复,但是为什么当我删除最后一个循环时它会起作用?
-
它没有。这是未定义的行为。
-
您应该检查
argc == 3,如果不是,例如,打印错误和return EXIT_FAILURE(在stdlib.h中定义)或通常为非零。此外,您可以检查是否未遇到'.'和'\0'。见stackoverflow.com/a/963777/2472827。
标签: c pointers char segmentation-fault fault