正确的方法来清空C-String

时间:2011-11-12 21:52:21

标签: c string strcpy

我一直在研究C中的一个项目,这个项目要求我乱用字符串。通常,我使用C ++编程,所以这与仅仅说一下string.empty()有点不同。

我想知道在C中清空一个字符串的正确方法是什么?这就是它吗?

buffer[80] = "Hello World!\n";

// ...

strcpy(buffer, "");

6 个答案:

答案 0 :(得分:75)

这取决于你所说的“空”。如果你只想要一个零长度的字符串,那么你的例子就可以了。

这也有效:

buffer[0] = '\0';

如果要将字符串的全部内容归零,可以这样做:

memset(buffer,0,strlen(buffer));

但这只适用于归零第一个NULL字符。

如果字符串是静态数组,则可以使用:

memset(buffer,0,sizeof(buffer));

答案 1 :(得分:2)

另外两种方式是strcpy(str, "");string[0] = 0

要真正删除变量内容(如果您的脏代码与上面的代码段无法正常工作:P),请使用如下例所示的循环。

#include <string.h>

...

int i=0;
for(i=0;i<strlen(string);i++)
{
    string[i] = 0;
}

如果您想从头开始清除动态分配的字符数组, 你可以使用malloc()和memset()的组合或 - 这样更快 - calloc()与malloc做同样的事情,但用Null初始化整个数组。

最后,我想让你记住你的运行时间。 更重要的是,如果您正在处理巨大的数组(6位及以上),您应该尝试将第一个值设置为Null,而不是通过整个String运行memset()。

一开始可能看起来更脏,但速度更快。您只需要更加关注代码;)

我希望这对任何人都有用;)

答案 2 :(得分:1)

取决于你清空的意思。如果你只想要一个空字符串,你可以做

buffer[0] = 0;

如果要将每个元素设置为零,请执行

memset(buffer, 0, 80);

答案 3 :(得分:1)

如果您试图清除某些接收字符串的接收缓冲区,我发现最好的方法就是使用如上所述的memset。原因是,无论下一个接收到的字符串有多大(当然,仅限于sizeof缓冲区),如果将其写入预先调零的缓冲区中,它将自动成为asciiz字符串。

答案 4 :(得分:0)

需要字符串的名称及其长度 将所有字符归零 其他方法可能会在遇到的第一个零点停止

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }

答案 5 :(得分:0)

我是一个初学者,但是...据我所知,最好的方法是

strncpy(dest_string,"",strlen(dest_string));