【问题标题】:how many strings in a const char* str[]?一个 const char* str[] 中有多少个字符串?
【发布时间】:2009-11-07 20:34:27
【问题描述】:
const static char *g_szTestDataFiles[] = {
    ".\\TestData\\file1.txt",
    ".\\TestData\\file2.txt",
    ".\\TestData\\file3.txt",
    ".\\TestData\\file4.txt",
    ".\\TestData\\file5.txt",
    ".\\TestData\\file6.txt"    
};

有没有办法以编程方式确定该物品中有多少项目?我总是可以做#define NUM_DATA_FILES 6const int NUM_DATA_FILES=6 但有更好的方法吗?我不认为有,但这似乎太基本了,我想确保我没有忘记一些东西。 . .

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:
    const static char *g_szTestDataFiles[] = {
    ".\\TestData\\file1.txt",
    ".\\TestData\\file2.txt",
    ".\\TestData\\file3.txt",
    ".\\TestData\\file4.txt",
    ".\\TestData\\file5.txt",
    ".\\TestData\\file6.txt",
    NULL
    

    };

    现在逐个迭代一个字符串,直到找到 NULL。

    编辑: Glen 是对的,你应该在这里使用 std::vector 而不是 c 风格 *[]

    【讨论】:

    • +1 表示技术上正确。虽然这是标记为 C++,但值得指出的是 OP 应该使用惯用的 C++,即 std::vector 而不是数组
    【解决方案2】:

    你可以使用:

    sizeof(g_szTestDataFiles) / sizeof(g_szTestDataFiles[0])
    

    请注意,此方法仅在 g_szTestDataFilesarray 而不是 pointer 时有效。

    【讨论】:

      【解决方案3】:

      Arkaitz 为您提供了处理此问题的首选方式,但是当我们在这里讨论 const char * 数组时,您应该能够执行以下操作:

      int size = sizeof(g_szTestDataFiles) / sizeof(g_szTestDataFiles[0]);
      

      【讨论】:

      • 好人谢谢!!我很确定有一种方法可以做到,我只是不记得了,哈哈。谢谢!!
      【解决方案4】:

      如果您确实在使用 C++,您可能想要使用 const vector<string>,它为您提供了一些不错的抽象和方法。

      【讨论】:

      • 这是个好主意,但是在当前版本的 C++ 中,您不能在全局范围内声明 const std::vector<string>() 并相应地填充它,除非您希望向量为空或包含多个一个字符串的副本。 C++0x 修复了这个问题并允许使用向量字面量。
      【解决方案5】:

      你可以使用这个功能:

      template <typename T, std::size_t N>
      inline std::size_t array_size(T (&)[N]) { return N; }
      

      喜欢这里:

      std::size_t sz = array_size(g_szTestDataFiles);
      

      无论如何,您应该遵循lhahne 的建议并使用std::vector。

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 2013-12-23
        • 1970-01-01
        • 2011-07-18
        • 2012-10-28
        • 1970-01-01
        • 2023-03-30
        • 2019-11-03
        相关资源
        最近更新 更多