我用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 的所有文本吗?
我认为您正在寻找的是一些指针操作,但首先:
- 不要将
C++
代码混合到C
程序中 -std::string
不属于这里。 - 不要在
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 个和' '
)。
您最好确保:
fgets
成功并且不返回NULL
。feof(fp)
是错误的。- 你没有完全填满
name
。