我正在使用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