void search(char*** p, int numOfWords, int* pNumOfDefArr){
int i, j, index;
char* word = (char*)malloc(WORD_SIZE * sizeof(char));
for (i = 0; i < N; i++) //just clearing the screen
printf("\n");
printf("Hello and thank you for filling Dictionary 1.0 with new words!!\n");
printf("Which word are you looking for??\n");
gets(word);
fix_word(word, 0);
while (strcmp(word, "Exit")){
index = (search_word(p, word, 0, numOfWords - 1, 0));
if (index < 0)
printf("Unknown word!!!!!!\n");
else{
for (j = 0; j < pNumOfDefArr[index]; j++)
printf("%s\n", *(*(p + index) + 1 + j));
}
free(word);
char* word = (char*)malloc(WORD_SIZE * sizeof(char));
printf("Looking for another word?\n");
gets(word);
fix_word(word, 0);
}
printf("Farewell!!\n");
在调试器中,我可以看到在第10行:
while (strcmp(word, "Exit"))
,word的值从"asd"变成了"Error reading characters of string." 为什么会这样呢?这是
fix_word()
函数的代码:void fix_word(char* pword, int j){
if (*(pword + j) != '\0'){
if (j == 0 && (*(pword + j) >= 'a' && *(pword + j) <= 'z')){
*pword -= N;
j++;
}
else if (*(pword + j) >= 'A' && *(pword + j) <= 'Z'){
*(pword + j) += N;
j++;
}
else
j++;
fix_word(pword, j);
}
}
strcmp
不会修改您的数据。您的代码中存在一个错误。遗憾的是您没有展示完整且简化版本的程序。也许错误在代码的其他地方,我们无法看到的代码中。也许错误就在这里。谁知道呢? - David Heffernanword
指向从函数返回的本地内存,而strcmp()
无意中重新使用了堆栈。话虽如此,这并不是在此代码中的问题是自证清白的。返回指向本地(非静态)变量的指针,然后使用该指针(例如将其传递给strcmp()
)会导致未定义行为。(还要记住,Three-Star Programmer并不是恭维的话)。 - Jonathan Lefflergets()
函数,无论什么情况下都不要使用,绝对绝对不要使用,更加绝对地说:千万不要使用。请参考为什么gets()
函数很危险?。 - Jonathan Lefflergets()
函数后,您是否打印了word
的内容?在调用fix_word()
函数后呢? - Jonathan LefflerWORD_SIZE
的值是多少? - chux - Reinstate Monica