我正在 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;
}```
当您的代码遇到空格时,它根本不会复制任何内容。这会在缓冲区中留下一个间隙,其中包含之前存在的任何内容,在本例中为
NULL
(0x00) 字符。空字符用于终止字符串,因此字符串在单词“WORLD”之后结束。在不立即给出答案的情况下,您需要开始复制after空格,而不是忽略它。