我有一个声明如下的字符串:
str=malloc(sizeof(char)*128);
我想完全清除它,以便当我执行strncat()
操作时,新字符将被写入str
的开头。我需要清除它的原因是我正在用它自己的简化版本(删除多余的空格)来写它。
答案 0 :(得分:13)
我建议你这样做:
*str = '\0';
您无需清除缓冲区的全部内容。您可以将第一个char
设置为零,然后设置空字符串。
答案 1 :(得分:4)
使用memset
:
memset(str, 0, sizeof(char)*128);
无论如何,如果您将字符串写在自身上,则不应使用strcat
- 您复制的对象不得重叠:
If copying takes place between objects that overlap, the behavior is undefined.
并且字符串肯定与自身重叠。
使用简单的函数可以轻松地从字符串中删除空格:
void remove_space(char* r) {
char *w = r;
do { *w = *r++; w += *w && !isspace(*w); } while (*w);
}
答案 2 :(得分:3)
您想使用calloc代替普通malloc
吗?
像
这样的东西calloc(128, sizeof(char));
编辑此外,strncat
不要求您在目标位置使用空终止字符串。只需确保目标足够大以容纳连接的结果字符串,包括附加的空字符。
正如dasblinkenlight所述,请勿与strncat
重叠。考虑使用正常的dst[i++] = src[j++]
复制方式。