繁体   English   中英

ANSI C - 清除字符串

[英]ANSI C - Clearing a string

我有一个声明如下的字符串:

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

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

我建议你这样做:

*str = '\0';

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

使用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);
}

您想使用calloc而不是plain malloc吗?

就像是

calloc(128, sizeof(char));

编辑此外, strncat不要求您在目标位置使用空终止字符串。 只需确保目标足够大以容纳连接的结果字符串,包括附加的空字符。

正如dasblinkenlight所说,不要与strncat重叠复制。 考虑使用普通的dst[i++] = src[j++]复制方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM