gpt4 book ai didi

c - 从文件中读取带空格的字符串

转载 作者:太空狗 更新时间:2023-10-29 16:12:07 24 4
gpt4 key购买 nike

我正在做一个项目,我刚刚遇到了一个非常烦人的问题。我有一个文件,用于存储我的帐户收到的所有消息。消息是这样定义的数据结构:

typedef struct _message{
char dest[16];
char text[512];
}message;

dest 是一个不能包含空格的字符串,这与其他字段不同。使用 fgets() 函数获取字符串,因此 desttext 可以具有“动态”长度(从 1 个字符到 length-1合法字符)。请注意,在从标准输入中检索到每个字符串后,我手动删除了换行符。

“收件箱”文件使用以下语法来存储消息:

dest
text

因此,例如,如果我收到来自 Marco 的消息,内容是“你好,你好吗?”另一条来自 Tarma 的消息说“你今天去健身房吗?”,我的收件箱文件将如下所示:

Marco
Hello, how are you?

Tarma
Are you going to the gym today?

我想从文件中读取用户名并将其存储在字符串 s1 中,然后对消息执行相同的操作并将其存储在字符串 s2 中(然后重复该操作直到 EOF),但是由于 text 字段允许空格 我不能真正使用 fscanf()

我尝试使用 fgets(),但正如我之前所说,每个字符串的大小都是动态的。例如,如果我使用 fgets(my_file, 16, username) 它最终会读取不需要的字符。我只需要读取第一个字符串直到到达 \n,然后读取第二个字符串直到到达下一个 \n,这次包括空格。

关于如何解决这个问题有什么想法吗?

最佳答案

#include <stdio.h>

int main(void){
char username[16];
char text[512];
int ch, i;
FILE *my_file = fopen("inbox.txt", "r");

while(1==fscanf(my_file, "%15s%*c", username)){
i=0;
while (i < sizeof(text)-1 && EOF!=(ch=fgetc(my_file))){
if(ch == '\n' && i && text[i-1] == '\n')
break;
text[i++] = ch;
}
text[i] = 0;
printf("user:%s\n", username);
printf("text:\n%s\n", text);
}
fclose(my_file);
return 0;
}

关于c - 从文件中读取带空格的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578947/

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