我的程序出现问题,其中出现了strsep()
从 GDB 获得的分段错误,并且有错误消息
Program received signal SIGSEGV, Segmentation fault.
0x00002aaaaad64550 in strsep () from /lib64/libc.so.6
我的代码如下:
int split(char *string, char *commands, char *character) {
char **sp = &string;
char *temp;
temp = strdup(string);
sp = &temp;
for (int i = 0; i < 100; i++) {
commands[i] = strsep(sp, character);
if (commands[i] == '\0') {
return 0;
}
if (strcasecmp(commands[i], "") == 0) {
i--;
}
printf("%d", i);
}
return 0;
}
任何帮助将不胜感激,因为我花了几个小时试图解决这个问题
该函数的参数是("Hello World", "@", "&")
编辑
所以我设法通过将代码更改为
int split(char* string, char* commands, char* character) {
for(int i = 0; i < 100; i++) {
commands[i] = strsep(&string, character);
if(commands[i] == '\0') {
return 0;
}
if(strcasecmp(&commands[i], "") == 0) {
i--;
}
}
return 0;
}
但是,现在我遇到了一个新问题,即返回每个索引都超出范围的空数组的命令。
编辑 2
我还应该澄清一下我想要做的事情,所以基本上命令是类型的char* commands[100]
,我想在修改原始指针数组并将“Hello World”存储到 commands[0] 时将它传递给函数我想在函数之外修改这个值。