我一直在研究C中的一个项目,这个项目要求我乱用字符串。通常,我使用C ++编程,所以这与仅仅说一下string.empty()有点不同。
我想知道在C中清空一个字符串的正确方法是什么?这就是它吗?
buffer[80] = "Hello World!\n"; // ... strcpy(buffer, "");
答案 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));