C++ 如何使用fgets获取文本并保存std::string
我用fgets读取txt文件,并保存字符串 我打印了这个字符串,但是文本被破坏了 我如何解决这个问题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");
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)
为falsename
据我所知,
std::string
不是c
。你是混合了代码> C <代码> >代码> C++ >代码>?另外一件事是它看起来是C和C++的混合,不要把你的<代码>文件指针 > <代码> 0代码>你必须指向它<代码> null <代码>(巨大的差别)或者你在做C,那么你就没有<代码> STD::String 。或者你做C++,然后在所有的<代码> <代码>里面有什么?为什么<代码> fOPE>(<代码> >代码> fgss](<代码> >代码> > Primff()/<代码> />代码> fCule]()/c> >,我学习了C和C++,所以我混淆了使用。所以现在问题是加标签C++,我重复我的问题。代码乱七八糟是怎么回事?您应该使用
和。