typedef struct {
long f1;
char f2[FIELD2_STRING_LENGTH];
char* f3;
} bankRecord;
while (fgets(line, 1000, file)) {
record *rptr = malloc(sizeof(record));
char *token = strtok(line, ",");
rptr->f1 = atol(token); // works fine
strcpy(rptr->f2,strtok(NULL, ",")) // works fine
rptr->f3 = strtok(NULL, ","); // fails, at the end, all records have the same data in f3, if strcpy is used - causes segmentation fault
records[i ] = record;
}
該代碼是從 csv 檔案閱讀器方法中提取的。csv 檔案的格式為"long integer, fixed Character string, variable Character String".
是一個指向記錄物件(型別)records的指標陣列。record **在 while 回圈結束時,所有記錄似乎都具有相同的 f3 值(添加的最后一個),而為 f1 和 f2 存盤了正確的值。我不知道是什么原因造成的,因為 f2 和 f3 都是字串。將 f3 的分配從“=”更改為 strcpy 會導致分段錯誤。
uj5u.com熱心網友回復:
br->f3 = strtok(NULL, ",");
設定一個指向 strtok 內部的指標。它不會復制字串。基本上你所有的 f3 指標都指向同一個位置。
你需要
br->f3 = strdup(strtok(NULL, ","));
在該點制作字串的副本。稍后您將需要釋放記憶體
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429460.html
