【问题标题】:initializing char array with spaces用空格初始化 char 数组
【发布时间】:2012-04-30 13:37:44
【问题描述】:

我想要一个包含空格的 20 个字符的 NULL('\0') 终止字符串。

目前我正在按照以下方式进行操作

char foo[20];  
for (i = 0; i < num_space_req; i++)        //num_space_req < 20  
{  
    foo[i] = ' ';  
}

foo[num_space_req] = '\0';

上面有没有更好的方法?

【问题讨论】:

  • std::fill (foo, foo + num_space_req, ' ');
  • 请尽量避免使用 C 和 C++ 标记问题,除非您真的需要跨语言解决方案。一旦您删除了 C++ 编码人员不应该使用的所有遗留 C 内容,它们就会非常不同的语言 :-)
  • 你得到了很多好的答案。您可能想接受其中之一。

标签: c++ c string char


【解决方案1】:

您可以使用以下方法将数组初始化为空格:

memset(foo, ' ', num_space_req);
foo[num_space_req] = '\0';

【讨论】:

  • 我没有投反对票,但使用 memset 不是我的首选。
  • @bames53:鉴于这个问题(除其他外)被标记为 C,你会选择什么?
  • 用 C 和 C++ 标记问题通常是提问者无知的结果,所以我总是认为 C++ 解决方案是可以接受的。否则他们只会将其标记为 C。
【解决方案2】:
std::string foo(num_space_req,' ');

【讨论】:

    【解决方案3】:

    由于问题有 C++ 标签,惯用的方式是:

    std::fill(foo, foo + num_space_req, ' ');
    // or
    std::fill_n(foo, num_space_req, ' ');
    

    请注意,它在 C 中不起作用。

    【讨论】:

    • 很好的调用引入了 c++ 习语,但是这个答案不是不完整的,因为它没有放置空终止符吗?
    【解决方案4】:

    你可以使用memset 来做那种事情。

    memset (foo, ' ', num_space_req)
    

    http://www.cplusplus.com/reference/clibrary/cstring/memset/

    【讨论】:

      【解决方案5】:

      正如@OliCharlesworth所说,最好的办法是使用memset

      char bla[20];
      
      memset(bla, ' ', sizeof bla - 1);
      bla[sizeof bla - 1] = '\0';
      

      请注意,在 GNU C 中,您还可以使用以下扩展(范围指定的初始化程序):

      char bla[20] = {[0 ... 18] = ' ', [19] = '\0'};
      

      【讨论】:

        【解决方案6】:

        如果你想在编译时初始化数组,你可以修改你的 char foo[20]; 声明如下:

        char foo[20] = {0x20};

        如果您需要在运行时将数组初始化为空格,则可以使用以下内容:

        memset(foo, ' ', sizeof(foo) -1);
        foo[20] = '\0';
        

        【讨论】:

          【解决方案7】:

          memset 可能比你的 for 循环更优化,它可能完全相同。 选择以下之一:

          memset( foo, ' ', sizeof(foo) -1 );
          memset( foo, ' ', 19 );
          memset( foo, ' ', 19 * sizeof(char) );
          

          【讨论】:

            【解决方案8】:
            #include <cstring>
            void makespace(char *foo, size_t size) {
              memset((void*)&foo, ' ', size - 1);
              foo[size] = 0;
            }
            // ...
            makespace(foo, 20);
            

            【讨论】:

              猜你喜欢
              • 2018-11-15
              • 2013-09-12
              • 2015-05-12
              • 1970-01-01
              • 2012-07-27
              • 2019-06-24
              • 2011-04-18
              • 2017-05-02
              • 1970-01-01
              相关资源
              最近更新 更多