将带换行符的字符串写入文本文件c ++

时间:2017-06-04 10:47:30

标签: c++ text-files

首先,我不知道我的问题是否已被提出,但我搜索了很多,并没有找到这个问题的直接答案。 我想创建一个程序来读取其中包含换行符\n的字符串,并将内容写回带有fprintf()函数的SD卡上的文本文件。我的编译器是ARM_GCC,我正在使用一个只有fprintf()fwrite()的特定库来编写一个字符串,所以我更喜欢只使用这些函数,但如果你认为有如果你这样说,我会很感激。 我可以轻松地使用此程序将字符串写入文件:

void sd_open(string sd_value)
{
  printf("Writing to Sd card...");
  FILE* fd = fopen("/sd/numbers.txt", "w+");
  fprintf(fd, "%s",sd_value.c_str());
  fclose(fd);
  printf("writed this value to sd: %s\r\n", sd_value.c_str());
  printf("Done\n");
}

问题是这段代码只将sd_value的值写入一行,我想使用for循环来搜索字符串中的换行符并逐行写入文件,但我不知道如何实现那。 感谢。

...编辑 假设sd_value是这样的:

string sd_value="Hello\nWelcome\nBye"

必须以如下方式存储到文本文件中:

Hello
Welcome
Bye

实际上,sd_value未在我的程序中处理,用户在另一个应用程序中键入值,我将其作为字符串接收。我可以告诉用户在其文本框中使用\ n输入换行符,但不知道如何将其作为代码中的换行符处理。

2 个答案:

答案 0 :(得分:1)

有很多简单的方法可以做你想要的但我真的需要示例如何输入(sd_value) 你在说什么意味着字符串sd_value包含:你好欢迎再见.... 并且永远不要换行

如果像我想的那样回答:

每次阅读字符串时都会以

结尾
*sd_value += "\n";*

如果要处理很多行,使用stringstream可能会更有效。

ostringstream lines;

lines << "Line 1" << endl;
lines << "Line 2" << endl;

cout << lines.str();   // .str() is a string

答案 1 :(得分:1)

操作系统之间存在差异,为EOL(行尾)选择了符号,e。克。

  • Windows:\r\n
  • Linux:\n
  • MacOS:\r

这意味着,如果您有sd_value来自一个操作系统(例如MacOS)的EOL符号,您将使用您的命令

fprintf(fd, "%s",sd_value.c_str());

在其他操作系统(例如Windows)中,有可能此EOL符号在目标操作系统中不会被解释为EOL,并且您的整个字符串将写在一行中。