我想确定在命令行参数中传递的单词的频率,所以我定义了一个带有字符串的结构并计算它,现在问题是当我试图搜索字符串时在Structure数组中,通过使用strcmp()
函数比较字符串,我得到Segmentation Fault
,这里是代码: -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char* word;
int count;
} argsArray;
int search(argsArray array[] , char* Word , int len){
for(int i=0; i < len; i++){
if(strcmp(array[i].word , Word)==0){
return i;
}
}
return -1;
}
int main( int argc , char* argv[] ){
argsArray inputArgs[50];
int i,p=0,a;
for(i=0;i<50;i++){
inputArgs[i].word=NULL;
inputArgs[i].count=0;
}
for( i=1 ; i < argc ; i++ ){
a = search(inputArgs , argv[i] , argc);
if( a== -1 ){
inputArgs[p].word=argv[i];
inputArgs[p].count++;
p++;
}
else{
inputArgs[a].count++;
}
}
for(i = 0; i < p; i++){
printf("%s %d\n",inputArgs[i].word,inputArgs[i].count);
}
return 0;
}
答案 0 :(得分:3)
我建议你做一些改正。
首先,我认为你在写这篇文章时试图初始化结构数组。
for(i=0;i<50;i++){
inputArgs[i].word=NULL;
inputArgs[i].count=0;
}
如其他答案中所述,这将导致分段错误。您可以使用input[i].word
初始化""
。
或者,在search
函数中,您可以检查array[i].word
是否为NULL
;如果找到NULL
,则立即从函数返回-1
。
对于第二个建议,您的search
功能将变为这样。
int search(argsArray array[] , char* Word , int len){
for(int i=0; i < len; i++){
if(array[i].word == NULL)
return -1;
if(strcmp(array[i].word , Word)==0){
return i;
}
}
return -1;
}
答案 1 :(得分:0)
inputArgs[i].word=NULL;
然后search(inputArgs , argv[i] , argc);
调用strcmp(array[i].word , Word)
意思是你刚刚调用strcmp(NULL, Word)
- &gt;段错误