在那里我编写了这个测试代码,在第三次迭代时产生了一个分段错误...使用调试器我看到了令牌[count]的值,它是正确的,但在最后一次迭代中有一个分段错误, str_split使用分割字符串;作为除数(它有效) 任何人都可以帮忙吗?
sportello[0].elenco_ris[0]=strdup("string;of;test");
tokens=str_split(sportello[0].elenco_ris[0],';');
int p=0;
int count=0;
int lungh=strlen("");
while(p!=-1){
lungh=strlen(tokens[count]);
if(lungh!=0){
printf("\nprinto: %s",tokens[count]);
count++;
}
else p=-1;
}
print:string 打印:
跑完了;分段故障;实时:0ms;用户:0ms; system:0ms
答案 0 :(得分:0)
好吧我解决了..这个问题就是我的想法...感谢@Joachim Pileborg的评论我试过这个(NULL)...非常感谢大家
`int p=0;
int count=0;
while(p!=-1){
if (tokens[count] != NULL){
printf("\nprinto: %s",tokens[count]);
count++;
}
else p=-1;
}`
答案 1 :(得分:-1)
当进程在最后一次迭代中执行strlen(tokens [count])时,会发生分段错误。返回值为0(无字符串?),而是seg fault ... 可能在那个位置没有字符串所以这发生了......我怎么能解决这个问题呢?无论如何这是str_split,它在某个地方发布的相同(或多或少),它的工作原理
char** str_split(char* a_str, char a_delim) {
char** result = 0;
size_t count = 0;
char* tmp = a_str;
char* last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;
/* Count how many elements will be extracted. */
while (*tmp) {
if (a_delim == *tmp) {
count++;
last_comma = tmp;
}
tmp++;
}
/* Add space for trailing token. */
count += last_comma < (a_str + strlen(a_str) - 1);
/* Add space for terminating null string so caller
knows where the list of returned strings ends. */
count++;
result = malloc(sizeof (char*) * count);
if (result) {
size_t idx = 0;
char* token = strtok(a_str, delim);
while (token) {
assert(idx < count);
*(result + idx++) = strdup(token);
token = strtok(0, delim);
}
assert(idx == count - 1);
*(result + idx) = 0;
}
return result;
}