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

C++ 如何使用fgets获取文本并保存std::string,c++,string,io,fgets,C++,String,Io,Fgets,我用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");

我用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”的文本

你好,世界 第1行文本 文本2行 三行文字

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

我认为您需要的是一点指针操作,但首先:

  • 不要将
    C++
    代码混合到
    C
    程序中-
    std::string
    不属于此处
  • 不要在
    字符串上使用
    sizeof
    ,否则会产生意外后果。字符串的长度为
    strlen(string)
    ,大小为
    strlen(string)+1
  • 要继续附加到
    名称
    ,可以使用以下内容:

    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'

    你最好确保:

  • fgets
    成功,不返回
    NULL
  • feof(fp)
    为false
  • 您没有完全填写
    name

  • 据我所知,
    std::string
    不是
    c
    。你是混合了代码> C <代码> >代码> C++ >代码>?另外一件事是它看起来是C和C++的混合,不要把你的<代码>文件指针 > <代码> 0代码>你必须指向它<代码> null <代码>(巨大的差别)或者你在做C,那么你就没有<代码> STD::String 。或者你做C++,然后在所有的<代码> <代码>里面有什么?为什么<代码> fOPE>(<代码> >代码> fgss](<代码> >代码> > Primff()/<代码> />代码> fCule]()/c> >,我学习了C和C++,所以我混淆了使用。所以现在问题是加标签C++,我重复我的问题。代码乱七八糟是怎么回事?您应该使用
    和。