正确的方法来清空C-String

Ben*_*min 41 c string strcpy

我一直在研究C中的一个项目,这个项目需要我很多地处理字符串.通常,我使用C++编程,所以这与仅仅说string.empty()有点不同.

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

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

// ...

strcpy(buffer, "");

Mys*_*ial 79

这取决于你所说的"空".如果您只想要一个零长度的字符串,那么您的示例将起作用.

这也有效:

buffer[0] = '\0';
Run Code Online (Sandbox Code Playgroud)

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

memset(buffer,0,strlen(buffer));
Run Code Online (Sandbox Code Playgroud)

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

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

memset(buffer,0,sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清,如果`buffer`是一个数组,那么最后一个方法将起作用,但如果它是一个指针则不行.编译器必须能够看到数组的大小.如果`buffer`是一个指针,它只会将指针的大小归零,可能是4或8个字节. (3认同)
  • 这个答案 - /sf/answers/3923403221/ - 提出了永远不要将“strlen”与“memset”一起使用的理由 - 只使用“sizeof” (2认同)