C++ - 使用数组作为参数时出错

C++ - Error while usign arrays as parameter

我制作了一个单词数组,并创建了一个函数来 return 来自数组的随机单词。但它显示此错误 -

hangman.cpp: In function 'std::__cxx11::string get_random_word(std::__cxx11::string*)':
hangman.cpp:17:33: warning: 'sizeof' on array function parameter 'words' will return size of 'std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}' [-Wsizeof-array-argument]
     size_t length = sizeof(words) / sizeof(words[0]);
                                 ^
hangman.cpp:15:47: note: declared here
 std::string get_random_word(std::string words[])
                                               ^

这是代码-

#include <iostream>
#include <string>
#include <ctime>

std::string get_random_word(std::string words[]);

int main()
{   
    srand(time(0));
    std::string words[] = {"cpp", "python", "java"};
    std::cout << get_random_word(words);
    return 0;
}

std::string get_random_word(std::string words[])
{
    size_t length = sizeof(words) / sizeof(words[0]);
    return words[rand() % length];
}

sizeof 运算符可能与您的想法不符。根据 cppreference:(sizeof) 产生类型对象表示的字节大小。 这可能包括 class 所需的任何内部成员,而不是例如,字符串中使用了多少个字符。 std::string 具有用于此的 size()length() 函数,它们是相同的,而不是使用数组,您可以使用也提供 size() 函数的向量。

#include <iostream>
#include <string>
#include <ctime>
#include <vector>

std::string get_random_word(std::vector<std::string>& words)
{
    return words[rand() % words.size()];
}

int main()
{   
    srand(time(0));
    std::vector<std::string> words = {"cpp", "python", "java"};
    std::cout << get_random_word(words);
    return 0;
}