如何使用 FGETS 获取文本,并保存 std::string



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

我printf_s这个字符串,但文本被破坏了 如何解决此问题?

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 filen");
return 0;
}
std::string st;
fgets(name, 256, fp);
st += name;
printf_s("%sn", name);
fgets(name, 256, fp);
st += name;
printf_s("%sn", name);
fgets(name, 256, fp);
st += name; 
printf_s("%sn", st, sizeof(st));
fclose(fp);
return 0;
}

"A.txt"的文字

世界您好 第 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。每次传递指向前一个''字符的指针并覆盖它时,请确保读取的字符总数不超过 256 个字符(255 个和'')。

您最好确保:

  1. fgets成功并且不返回NULL
  2. feof(fp)是错误的。
  3. 你没有完全填满name

最新更新