【发布时间】:2021-01-26 08:25:54
【问题描述】:
我会尽量简短: 所以我有一个任务,我正在创建一个“Wordlist”课程。我将在其中存储单词列表。 这些是成员变量
class WordList
{ //...
unsigned int m_count; // Number of words currently in list
unsigned int m_max; // The total size of the list.
char** m_list; // The list storing the words
};
这是我的构造函数
WordList::WordList(const int max_words) {
if(max_words < 1){
m_list = nullptr;
m_max = 0;
m_count = 0;
}
else
m_list = new char*[max_words];
m_count = 0;
m_max = max_words;
for (int i = 0; i < max_words; i++) {
m_list[i] = new char[20];
}
}
这就是我开始发现问题的地方。
下面的 add 函数应该以 c 样式字符串的形式添加一个单词,该字符串是从 **char m_list 指向的字符指针数组中指向的。
int WordList::add(const char word[]) {
if (m_count == 0 && m_list != nullptr ) {
strcpy (m_list[m_count], word);
m_count++;
return 0;
}
if (m_count < m_max) {
m_count++;
strcpy (m_list[m_count], word);
return 0;
}
if (m_count == m_max) {
m_count++;
m_max ++;
strcpy (m_list[m_count], word);
return 1;
}
if (strlen(word)==0) {
return -2;
}
if (m_list == nullptr ){
return -2;
}
else
return -2;
}
所以我遇到的问题是,我的 * 显然在语法上不正确,因为我没有得到一个指向完整单词的 5 个指针数组,而是我将第一个字母保存到最终目标字符,但它不是复制我想要的所有内容。
我确定我没有将我的问题翻译成英语,但我希望这是一个开始。谢谢!
我将如何调用我的 add 函数的示例:
WordList *wordlist = new WordList(5);
wordlist->add("harry");
wordlist->add("ron");
wordlist->add("hermione");
它应该在指针数组的底部添加一个指向每个单词的指针 所以
cout << wordlist->m_list[0][2] << endl; // Expect 'r'
cout << wordlist->m_list[1] << endl; // Expect "ron"
我得到了
r
只打印出来
【问题讨论】:
-
首先,作业是否允许您使用
std::vector<std::string>,因为这将是一个更好的选择。其次,请告诉我们您是如何调用add()方法的。 -
为什么你认为你只收到第一个字母?您能否提供一个显示意外行为的minimal reproducible example?此外,除非您的作业由于某种原因不允许,否则请使用
std::vector<std::string>。 -
"我开始找问题"-->
strcpy (m_list[m_count], word);strlen(word) > 19会有问题。 -
感谢您的快速回复,我将发布更多示例代码。不幸的是,我根本无法使用字符串库。我认为这样我们才能真正专注于操作指针。
标签: c++ class pointers char c-strings