53

我一直在用 C 语言开发一个项目,该项目需要我经常处理字符串。通常,我用 C++ 编写程序,所以这与仅仅说 string.empty() 有点不同。

我想知道在 C 中清空字符串的正确方法是什么。是这样吗?

缓冲区[80] = "你好世界!\n";

// ...

strcpy(缓冲区,“”);
4

6 回答 6

109

这取决于您所说的“空”是什么意思。如果您只想要一个长度为零的字符串,那么您的示例将起作用。

这也将起作用:

buffer[0] = '\0';

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

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

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

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

memset(buffer,0,sizeof(buffer));
于 2011-11-12T21:55:54.487 回答
3

另外两种方式是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,而不是通过整个字符串运行 memset()。

一开始它可能看起来更脏,但速度更快。你只需要更多地关注你的代码;)

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

于 2014-04-03T05:31:23.167 回答
1

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

buffer[0] = 0;

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

memset(buffer, 0, 80);
于 2011-11-12T21:54:45.127 回答
1

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

strncpy(dest_string,"",strlen(dest_string));
于 2020-06-04T10:47:17.843 回答
1

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

于 2020-01-12T01:30:04.983 回答
-1

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

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }
于 2016-10-24T08:02:29.770 回答