gpt4 book ai didi

c++ - 如何使用 fgets 获取文本并保存 std::string

转载 作者:行者123 更新时间:2023-11-30 04:58:38 26 4
gpt4 key购买 nike

我用fgets读取txt文件,并保存字符串

我打印这个字符串,但是文本被破坏了我该如何解决这个问题?

int main() {    
char name[256] = "";

int a = 0, b = 0, c = 0, d = 0;
FILE *fp = 0;
fopen_s(&fp, "a.txt", "r");
if (fp == 0)
{
printf_s("can't open this file\n");
return 0;
}

std::string st;
fgets(name, 256, fp);
st += name;
printf_s("%s\n", name);

fgets(name, 256, fp);
st += name;
printf_s("%s\n", name);

fgets(name, 256, fp);
st += name;
printf_s("%s\n", st, sizeof(st));

fclose(fp);

return 0;
}

“a.txt”的文本

Hello World 第 1 行文本文本 2 行3行文字

在这段代码中,我在 char 中获取了几个文本行,并将此文本添加到名为 st 的字符串中。我可以直接在字符串中插入所有使用 fgets 的文本吗?

最佳答案

我认为您正在寻找的是一些指针操作,但首先:

  1. 不要将 C++ 代码混合到您的 C 程序中 - std::string 不属于这里。
  2. 不要在string 上使用sizeof,否则会出现意想不到的后果。字符串的长度为strlen(string),大小为strlen(string)+1

要继续附加到 name,您可以使用类似的东西:

fgets(name, 256, fp);
fgets(name+strlen(name), 256-strlen(name), fp);
fgets(name+strlen(name), 256-strlen(name), fp); //Repeat (loop?)

这样您就可以将文件内容聚合到name。每次传递指向前一个 '\0' 字符的指针并覆盖它时,请确保您总共读取的字符不超过 256 个(255 和一个 '\0').

你最好确保:

  1. fgets 成功并且不返回 NULL
  2. feof(fp) 为假。
  3. 您没有完整填写姓名

关于c++ - 如何使用 fgets 获取文本并保存 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627159/

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