我正在写一个程序,它应该从命令中输入,然后找到输入的词频。我在使用strcmp()函数比较字符串(char数组)时遇到了麻烦。我已经花了几个小时,但我仍然不明白我做错了什么。它与指针有关吗?下面是我的代码:
#include <stdio.h>
#include <string.h>
int main(){
char Words[501][21];
int FreqNumbers[500];
char temp[21] = "zzzzz";
char Frequency[5][21];
int wordCount = 0;
int numberCount = 0;
int i = 0;
int counter = 0;
int end = 0;
do {
scanf("%20s",Words[wordCount]);
for(counter = 0;counter < wordCount;counter++){
if(wordCount > 0){
if(strcmp(Words[wordCount], Words[counter]) == 0){
FreqNumbers[counter]++;
break;
}
FreqNumbers[wordCount]++;
}
}
wordCount++;
printf("%s", Words[wordCount - 1]);
printf("%s", temp);
} while(strcmp(Words[wordCount],&temp) != 0);
return(0);
}
3条答案
按热度按时间pgvzfuti1#
strcmp
函数,而不是将用户输入的单词与“zzzzz”进行比较,而是检查数组中的下一个条目“zzzzz”,因此它不会终止,因为从来没有匹配。(就像你在strcmp
函数之前做wordCount++;
一样)char temp[10]
-temp
将指向的10个字符的数组。(不可变/常量)。你正在传递
strcmp
函数,指向内存的变量的地址,而它应该被赋予一个指向内存的指针。(有点混乱,但我希望你得到图片)。所以理想地说,它应该被赋予。strcmp(Words[wordCount],temp);
或strcmp(Words[wordCount],&temp[0]);
尽管我所说的可能有点混乱,但我强烈建议您查看
KnR
并阅读有关数组的内容,尤其是array of chars
我对你的代码做了一些修改。现在它可以按要求工作了。请看一下,如果可以的话请标记为答案
pbpqsu0x2#
temp
已经是一个常量char *
。不要使用&
操作符。这将给予你一个指向常量字符指针的指针。vfhzx4xs3#
你只是在这里请求一个分段错误。你到底为什么要在dowhile循环中这样做?