我非常努力地寻找解决方案,但我无法想到足够好的关键字。连续调用同一个数组时出现奇怪的seg错误
目前我遇到的问题是掌握makeargv背后的概念,它的用法与三重指针(我不知道*** foo是什么意思,它似乎不像** foo那样容易理解或者* FOO)。所以我做了我自己:
const char **makeargv(char *string, int *numargs) {
string = string + strspn(string, delims);
char *copy = malloc(strlen(string) + 1);
int i;
strcpy(copy, string);
int numtokens;
if (strtok(copy, delims) != NULL) {
for (numtokens = 1; strtok(NULL, delims) != NULL; numtokens++) {}
}
strcpy(copy, string);
const char *results[numtokens+1];
results[0] = strtok(copy, delims);
for (i = 1; i < numtokens; i++) {
results[i] = strtok(NULL, delims);
}
results[numtokens+1] = NULL;
*numargs = numtokens;
return results;
}
下面是在它打破了一部分:
void parse_file(char* filename) {
char* line = malloc(160*sizeof(char));
FILE* fp = file_open(filename);
int i = 0;
int numargs = 0;
int *pointer = &numargs;
while((line = file_getline(line, fp)) != NULL) {
if (strlen(line) == 1){
continue;
}
const char **args = makeargv(line, pointer);
printf("%s\n", args[0]);
printf("%s\n", args[1]);
/* This prints out args[0], but then args[1] causes a seg fault. Even if I replace
the args[1] with another args[0] it still causes a seg fault */
}
fclose(fp);
free(line);
}
我有一个字符串的工作阵列。但是,当我尝试打印出数组中的字符串时,我只能打印出我选择的一个字符串,然后为其后的任何调用分段。让我假装我的字符串数组是argv [3] = {“是”,“否”,“也许”},如果我打电话给argv [0],它会让我打电话给“是”,但是任何其他电话我再次调用argv [0])不起作用并导致段错误。我可以调用数组中的任何元素,但是一旦我调用其中一个元素,其余的元素停止工作,导致段错误。
请帮忙吗? d:这是C.
相反的描述,你遇到了什么,你应该创建内存[一个最小的,完整的,经过测试和读示例](HTTP:/ /stackoverflow.com/help/mcve)。 –
对不起,我当时正在运输,因为我在计算机上遇到了一些复杂和粘贴问题。我现在修好了,现在有机会看看吗? :d – user3321556