我正在使用strtok()
函數在新行分隔符上拆分文件緩衝區,但我得到的結果並不符合我的預期。strtok()不按預期方式工作
patient->fullName = strtok(fileContent, "\n");
patient->dateOfBirth = strtok(NULL, "\n");
patient->height = strtok(NULL, "\n");
patient->waistMeasurement = strtok(NULL, "\n");
patient->weight = strtok(NULL, "\n");
patient->comment = strtok(NULL, "\n");
當我保存分隔的值成結構成員的每一個成員顯示細膩以後除了第一個,fullName
。如果我明白了,它會顯示地址值。下面是輸出:
因爲我仍然不熟悉C,請你告訴我,我怎樣才能得到這實際上該文件中寫入該指針地址的地方全名?
編輯:創作fileContent
:
FILE *file = fopen(fileName, "r");
fseek(file, 0, SEEK_END);
long size = ftell(file);
rewind(file);
char *fileContent = malloc(size + 1);
fread(fileContent, size, 1, file);
病人:
struct Patient
{
char *fullName;
char *dateOfBirth;
char *height;
char *waistMeasurement;
char *weight;
char *comment;
};
struct Patient *patient = malloc(sizeof(*patient));
patient->fullName = malloc(sizeof(NAME_LENGTH));
patient->dateOfBirth = malloc(sizeof(BIRTHDAY_LENGTH));
patient->height = malloc(sizeof(HEIGHT_LENGTH));
patient->waistMeasurement = malloc(sizeof(WAIST_LENGTH));
patient->weight = malloc(sizeof(WEIGHT_LENGTH));
patient->comment = malloc(sizeof(COMMENT_LENGTH));
保存文件的文件內容(它的加密雖然):
Qevms Wqspgmg
49.46.5336.
534,9
84,7
28,6
Li'w jygomrk eaiwsqi hyhi!
在用'strtok()'剪切它之前,顯示存儲在'fileContent'中的值是明智的。顯示「病人」指向的結構的定義也是明智的。這些是使這個位置靠近MCVE([MCVE])的基本要求 - 雖然你仍然可以說是偏離了最低限度。 –
請注意,由'malloc()'調用分配的空間全部因使用'strtok()'而丟失 - 您正在泄漏。您需要使用'strcpy()'將字符串複製到分配的空間中。在複製之前,您需要檢查是否分配了足夠的空間。或者你應該使用'strdup()'''patient-> fullName = strdup(strtok(fileContent,「\ n」));'。此外,因爲您正在複製指向'fileContent'的指針,所以如果您將下一行讀入'fileContent',它將更改之前'patient'記錄指向的字符串的值。或'fileContent'超出範圍並被用於其他目的。 –
@JonathanLeffler非常感謝。這對我有效。 – msmolcic