删除C中的字符串空格 - 为什么空格后面的单词也被删除?

问题描述 投票:0回答:1

我正在 Codewars 上尝试用 C 语言解决初学者问题:我应该编写一个函数,从给定字符串中删除空格,然后返回一个新的(动态分配的)字符串。

示例:str_in 中的输入字符串 HELLO WORLD 需要输出 HELLOWORLD,但我的代码在 noSpace_str 中返回的是 HELLO。 世界无处可寻,我正在尝试理解为什么。

(提前感谢您的回答)

我的代码:

char *no_space(const char *str_in)
{
    int len = strlen(str_in);
    char *noSpace_str = (char *) malloc(len * sizeof(char)); 
  
    for(int i = 0; i < len; i++) {
      if(str_in[i] != ' ') noSpace_str[i] = str_in[i];
    }
  
    return noSpace_str;
}```

c string loops dynamic-memory-allocation
1个回答
0
投票

当您的代码遇到空格时,它根本不会复制任何内容。这会在缓冲区中留下一个间隙,其中包含之前存在的任何内容,在本例中为

NULL
(0x00) 字符。空字符用于终止字符串,因此字符串在单词“WORLD”之后结束。在不立即给出答案的情况下,您需要开始复制after空格,而不是忽略它。

© www.soinside.com 2019 - 2024. All rights reserved.