用newline编写字符串到文本文件C



首先,我不知道我的问题是否已经问过,但是我搜索了很多,但还没有找到这个问题的直接答案。我想创建一个程序来读取字符串WICH中具有Newlines 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: %srn", sd_value.c_str());
  printf("Donen");
}

问题在于此代码仅将sd_value的值写入一行,我想使用for loop在字符串中搜索newline,然后按行将line写入文件,但我不知道该如何实现。谢谢。

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

string sd_value="HellonWelcomenBye"

必须存储在文本文件中的以下内容:

Hello
Welcome
Bye

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

在操作系统之间有差异,这些符号是为 EOL(线末端(选择的。g。

  • Windows:rn
  • Linux:n
  • macOS:r

这意味着如果您在一个操作系统(例如MacOS(中的sd_value EOL符号,并且您将使用命令

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

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

有许多简单的方法可以做您想做的事情,但我确实需要示例如何获取输入(SD_VALUE(您在说什么意味着字符串SD_Value包含:您好欢迎再见...。而且永远不要做newline

如果我想的话,答案:

每次阅读字符串以

结尾
*sd_value += "n";*

如果您有很多线路可以处理,则使用stringstream可能会更有效。

ostringstream lines;
lines << "Line 1" << endl;
lines << "Line 2" << endl;
cout << lines.str();   // .str() is a string

最新更新