首页 > 解决方案 > 在 C 程序中使用带有指针数组的 strcmp() 函数

问题描述

我正在尝试检测指针数组中的重复字符串。我想用 strcmp() 函数检测是否有任何重复,并想删除除第一个重复之外的重复,但是当我添加strcmp()函数时命令行给出错误:Segmentation fault (core dumped)

这是我的代码;并且大小等于产品数组的大小。

FILE* temp_file_to_read = fopen("temp.txt", "r");
char temp_line[256];  
char *products[256];
int j = 0;
        while(fgets(temp_line, sizeof(temp_line), temp_file_to_read)){
                //printf("%s", temp_line);
                products[j] = strdup(temp_line);
                printf("%s", products[j]);
                j++;
        }


         for(int i = 0; i< size; i++){
                    for(int j = i+1; j <  size; j++){
                            if(strcmp(products[i], products[j])==0){
                                    printf("%s is exist\n", products[j]);
                            }
                    }
            }

标签: cstrcmp

解决方案


我猜你的文件没有 256 个产品,每个产品的长度正好是 256 个字符,所以你的products数组没有满。因此,当您这样做时strcmp(products[i], products[j]),您有时会尝试使用垃圾指针,就好像它们指向真正的字符串一样,这就是您遇到段错误的地方。

您的代码有几处问题,包括

  • 您可能希望在新行中拆分文件,而不仅仅是每 256 个字符(尽管我可能是错的)
  • 你应该检查以确保你不要尝试创建超过 256 个产品,否则你会溢出你的数组
  • 在进行字符串比较时,只到你拥有的产品数量,而不是盲目到数组的末尾

推荐阅读