在字符串数组上使用指针的分段错误
segmentation fault using pointers on array of strings
你好,我写了这个测试代码,它在 while 的第三次迭代中产生了一个分段错误...使用调试器我看到了 tokens[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;
}
打印:字符串
打印:
运行 完成;分段故障;实时:0ms;用户:0ms;系统:0ms
当进程在最后一次迭代中在 IF 内执行 strlen(tokens[count]) 时发生分段错误。return 值将是 0(没有字符串?)而是分段错误。 .
可能在那个位置没有字符串,所以发生这种情况...我该如何解决这个问题?无论如何,这是 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;
}
好的我解决了..问题就是我的想法...感谢@Joachim Pile Borg 的评论我已经尝试过这个(NULL)...所以感谢大家
`int p=0;
int count=0;
while(p!=-1){
if (tokens[count] != NULL){
printf("\nprinto: %s",tokens[count]);
count++;
}
else p=-1;
}`
你好,我写了这个测试代码,它在 while 的第三次迭代中产生了一个分段错误...使用调试器我看到了 tokens[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;
}
打印:字符串 打印:
运行 完成;分段故障;实时:0ms;用户:0ms;系统:0ms
当进程在最后一次迭代中在 IF 内执行 strlen(tokens[count]) 时发生分段错误。return 值将是 0(没有字符串?)而是分段错误。 . 可能在那个位置没有字符串,所以发生这种情况...我该如何解决这个问题?无论如何,这是 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;
}
好的我解决了..问题就是我的想法...感谢@Joachim Pile Borg 的评论我已经尝试过这个(NULL)...所以感谢大家
`int p=0;
int count=0;
while(p!=-1){
if (tokens[count] != NULL){
printf("\nprinto: %s",tokens[count]);
count++;
}
else p=-1;
}`