我一直在用 C 语言开发一个项目,该项目需要我经常处理字符串。通常,我用 C++ 编写程序,所以这与仅仅说 string.empty() 有点不同。
我想知道在 C 中清空字符串的正确方法是什么。是这样吗?
缓冲区[80] = "你好世界!\n"; // ... strcpy(缓冲区,“”);
这取决于您所说的“空”是什么意思。如果您只想要一个长度为零的字符串,那么您的示例将起作用。
这也将起作用:
buffer[0] = '\0';
如果要将字符串的全部内容归零,可以这样做:
memset(buffer,0,strlen(buffer));
但这仅适用于将第一个 NULL 字符归零。
如果字符串是静态数组,则可以使用:
memset(buffer,0,sizeof(buffer));
另外两种方式是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()。
一开始它可能看起来更脏,但速度更快。你只需要更多地关注你的代码;)
我希望这对任何人都有用;)
取决于你说的清空是什么意思。如果你只想要一个空字符串,你可以这样做
buffer[0] = 0;
如果要将每个元素设置为零,请执行
memset(buffer, 0, 80);
我是初学者,但是...据我所知,最好的方法是
strncpy(dest_string,"",strlen(dest_string));
如果您试图清除接收字符串的接收缓冲区,我发现最好的方法是如上所述使用 memset。原因是,无论下一个接收到的字符串有多大(当然限于 sizeof 缓冲区),如果写入已预置零的缓冲区,它将自动成为 asciiz 字符串。
需要字符串的名称,其长度将为零所有字符其他方法可能会在遇到的第一个零处停止
void strClear(char p[],u8 len){u8 i=0;
if(len){while(i<len){p[i]=0;i++;}}
}