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;
}
我制作了一个单词数组,并创建了一个函数来 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;
}