c - 如何在结构数组中搜索字符串?

标签 c arrays string search 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;
}

Reference for second suggestion

关于c - 如何在结构数组中搜索字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690763/

相关文章:

javascript - 检查键/值对对象数组的简洁方法?

c - 填充 malloc 的内存并转换为 char 数组

python - 如何用数字和字母拆分 Python 字符串?

c - 指针和函数

c - 程序收到信号 : “EXC_BAD_ACCESS” ?

c++ - 为什么 [ fopen()/open()/fstream file ] 在 Mac OS X 上打开文件失败?

c++ - 将特征向量复制到 C 数组?

javascript - 使用 Javascript 根据像素将字符串拆分成多个部分

c# - "TrimEnd()"的意外结果......结果随机太贪婪

c - watch 描述符到底是什么? (Linux inotify 子系统)