我非常努力地尋找解決方案,但我無法想到足夠好的關鍵字。連續調用同一個數組時出現奇怪的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