【问题标题】:Proper way to empty a C-String清空 C 字符串的正确方法
【发布时间】:2011-12-27 19:32:00
【问题描述】:

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

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

缓冲区[80] = "你好世界!\n"; // ... strcpy(缓冲区,“”);

【问题讨论】:

  • 您的示例令人困惑。显然缓冲区已在其他地方声明,您尝试从文字初始化它。这里不需要清除任何东西。
  • string.empty() 不修改字符串

标签: c string strcpy


【解决方案1】:

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

strncpy(dest_string,"",strlen(dest_string));
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      要真正删除变量内容(如果您的脏代码不能与上面的 sn-ps 一起正常工作 :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()。

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

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

      【讨论】:

        【解决方案5】:

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

        这也可以:

        buffer[0] = '\0';
        

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

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

        但这仅适用于清零到第一个 NULL 字符。

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

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

        【讨论】:

        • 澄清一下,如果buffer 是一个数组,最后一种方法将有效,但如果它是一个指针则无效。编译器必须能够看到数组的大小。如果buffer 是一个指针,它只会将指针的大小归零,可能是 4 或 8 个字节。
        • 这个答案 - stackoverflow.com/a/56048617/3114742 - 说明永远不要使用 strlenmemset - 只使用 sizeof
        【解决方案6】:

        取决于清空的含义。如果你只想要一个空字符串,你可以这样做

        buffer[0] = 0;
        

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

        memset(buffer, 0, 80);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多