将除\ r \ n之外的所有字符添加到新字符串

时间:2016-05-08 13:37:53

标签: c string c-strings chars

这可能是一个非常新的问题,但是我可以解决这个问题,以便将任何字符(除了\ r)添加到我的新字符串ucontents中吗?刚才它只添加字符直到\ r \ n。我想在\ r \ n之后添加字符。

void to_unix_line_endings(char* contents, char* ucontents) {
  int i;
  for (i = 0; i < strlen(contents); i++) {
    if(contents[i] != '\r') {
      ucontents[i] = contents[i];
    }
  }
}

char out[5000];
to_unix_line_endings("spaghettiand\rmeatballs", out);
printf("%s\n", out);
// Prints "spaghettiand". I want "spaghettiandmeatballs".

感谢。

2 个答案:

答案 0 :(得分:2)

在评论中(在你的回答下),@ BLUEPIXY指出因为j永远不会等于lengthucontents永远不会在{{1}中终止阻止。

因此,尽管您的代码示例(在 answer 部分中)似乎对您有效,但代码最终会失败。 if(j == length)需要一个空终止符来标识字符串的结尾。当您正在写入的内存中没有恰好位于正确位置的NULL终止符时,它将失败。 (与任何字符串函数一样)。

以下更改将使null终止缓冲区:

printf()

答案 1 :(得分:1)

修正了这样。谢谢,BLUEPIXY。

void to_unix_line_endings(char* contents, char* ucontents) {
  int i;
  int j = 0;
  int length = strlen(contents);
  for (i = 0; i < length; i++) {
    if(contents[i] != '\r') {
      ucontents[j] = contents[i];
      if (j == length) {
        ucontents[j] = '\0';
        break;
      }
      j++;
    }
  }
}