gpt4 book ai didi

c - 在 C 中写入文件时不需要的字符

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:22 25 4
gpt4 key购买 nike

程序要求用户输入并将其写入 .dat 文件。输入是指定数量学生的姓名、身份证、出生日期、性别和婚姻状况。数据必须作为单独的字段写入文件,以便以后可以从文件中读取。

假设这是来自终端的输入:

给学生 1
输入姓名:John Doe
输入ID:1234
输入出生日期:01/01/90
输入性别:男
输入婚姻状况:单例

对于学生 2
输入姓名:简·史密斯
输入ID:5678
输入出生日期:09/08/92
输入性别:女
输入婚姻状况:单例

这是文件中的输出。

李四\00\00\00\00\00\00\00\00\00\00\001234\00\00\00\00\00\0001/01/90\00\C2Male\00单例\00\FF\FF\FF简·史密斯\00\C2\FF\00\00\00\00\00\005678\00\00\00\00\00\0009/08/92\00女\00单例\00\C2\FF

我猜像\00 等字符的出现是因为,对于每个数组元素,我向文件写入的字节数多于数组元素包含的字节数;但是我需要文件中的每个数据都是固定大小的,以便以后可以从文件中单独读取它,对吧?请问我该怎么做?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(){
int fd, i = 0;
char name[2][20], id[2][10], dob[2][10], gender[2][7], status[2][10];
fd = open("file.dat", O_WRONLY|O_CREAT); //open file.dat for writing; if it does not exist, create it.
//get input from user
for (i = 0; i < 2; i++){
printf("\nFor student %d\n", (i + 1));
printf("Enter name: ");
scanf("%[^\n]%*c", &name[i][20]); //%[^\n]%*c - read everything up to (excluding) new line character
printf("Enter ID: ");
scanf("%s", &id[i][10]);
printf("Enter date of birth: ");
scanf("%s", &dob[i][10]);
printf("Enter gender: ");
scanf("%s", &gender[i][7]);
printf("Enter marital status: ");
scanf("%s", &status[i][10]);
getchar();
}

for (i = 0; i < 2; i ++){
write(fd, (void*)&name[i][20], 20);
write(fd, (void*)&id[i][10], 10);
write(fd, (void*)&dob[i][10], 10);
write(fd, (void*)&gender[i][7], 7);
write(fd, (void*)&status[i][10], 10);
}
}

最佳答案

为什么不写入以 '\n' 或任何其他分隔符结尾的每个数据的确切长度,当你必须读取文件时,你读取所有文件,然后围绕所选分隔符拆分读取的数据,或者你每次读完分隔符就把它拆分了吗?

您不会知道要阅读的确切长度,但不会有不需要的字符。您只需要循环读取,直到到达文件末尾。

关于c - 在 C 中写入文件时不需要的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32591966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com