2

我有一个这样声明的字符串:

str=malloc(sizeof(char)*128);

我想完全清除它,以便在我进行strncat()操作时,新字符将写入str. 我需要清除它的原因是我正在用它本身的简化版本(删除多余的空格)来写它。

4

3 回答 3

13

我建议你简单地这样做:

*str = '\0';

您不需要清除缓冲区的全部内容。您可以将第一个char设置为零,然后您将获得空字符串。

于 2012-04-17T15:08:00.237 回答
4

使用memset

memset(str, 0, sizeof(char)*128);

无论如何,如果您将字符串写入自身,则不应使用strcat- 您复制的对象不得重叠:

如果复制发生在重叠的对象之间,则行为未定义。

并且字符串肯定会与自身重叠。

使用一个简单的函数可以轻松地从字符串中删除空格:

void remove_space(char* r) {
    char *w = r;
    do { *w = *r++; w += *w && !isspace(*w); } while (*w);
}
于 2012-04-17T15:05:13.333 回答
3

您想使用calloc而不是 plain malloc

就像是

calloc(128, sizeof(char));

编辑另外,strncat不需要你在目的地有一个空终止的字符串。只需确保目标足够大以容纳连接的结果字符串,包括额外的空字符。

正如dasblinkenlight 所指出的,不要与strncat. 考虑使用正常dst[i++] = src[j++]的复制方式。

于 2012-04-17T15:04:55.677 回答