这是我拥有的代码。该函数应该删除字符串数组中的一个字符串,然后将所有元素向左移动以缩小差距。
void removeWord(char ***array, int *count){
char word[41];
printf("Enter a word: ");
fscanf(stdin, " ");
fscanf(stdin, "%s", word);
bool wordFound = false;
int indexOfWord = 0;
for(int i = 0; i < *count; i++){
if(strcasecmp(word, (*array)[i]) == 0){
wordFound = true;
indexOfWord = i;
break;
}
}
if(wordFound == false){
fprintf(stderr, "Word not found in dictionary.\n");
}
else{
free((*array)[indexOfWord]);
// Decrement count
(*count)--;
for(int i = indexOfWord; i < *count; i ++){
// Shift elements over to the left by 1 to close the gap
(*array)[i] = (*array)[i+1];
}
// If the word to remove isn't the last element, remove the last element to prevent duplicate words
if(indexOfWord != *count) free((*array)[*count]);
}
}
当我删除数组中的最后一个单词时,该函数正常工作......但是当我删除第二个到最后一个单词时,它会删除它,但也会将最后一个元素设置为某个奇数值/空值。如果有人能指出我正确的方向,我一直在努力解决这个问题,我将不胜感激......谢谢,如果需要更多信息,请随时询问。
- - - - - - - - - - - -更新
答案是删除最后的 if 语句,没有必要:
void removeWord(char ***array, int *count){
char word[41];
printf("Enter a word: ");
fscanf(stdin, " ");
fscanf(stdin, "%s", word);
bool wordFound = false;
int indexOfWord = 0;
for(int i = 0; i < *count; i++){
if(strcasecmp(word, (*array)[i]) == 0){
wordFound = true;
indexOfWord = i;
break;
}
}
if(wordFound == false){
fprintf(stderr, "Word not found in dictionary.\n");
}
else{
free((*array)[indexOfWord]);
// Decrement count
(*count)--;
for(int i = indexOfWord; i < *count; i ++){
// Shift elements over to the left by 1 to close the gap
(*array)[i] = (*array)[i+1];
}
}
}