簡體   English   中英

如何在結構數組中搜索字符串?

[英]How to search for a string in an array of structures?

我想確定在命令行參數中傳遞的單詞的頻率,所以我定義了一個帶有字符串的結構並且它的計數,現在問題是當我試圖通過比較字符串來搜索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;
}

我打算給你一些改正。

首先,我認為你在編寫時想要初始化結構數組。

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;
}

參考第二個建議

inputArgs[i].word=NULL; 然后search(inputArgs , argv[i] , argc); 調用strcmp(array[i].word , Word)

意思是你剛剛調用strcmp(NULL, Word) - > segfault

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM