c - 在 C 程序中使用带有指针数组的 strcmp() 函数

标签 c strcmp

我正在尝试检测指针数组中的重复字符串。我想检测 strcmp() 函数是否存在重复项,并希望删除除第一个重复项之外的重复项,但是当我添加 strcmp() 函数时,命令行给出错误:段错误(核心转储)

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

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

最佳答案

我猜测您的文件没有 256 个产品,每个产品的长度正好是 256 个字符,因此您的 products 数组未满。因此,当您执行 strcmp(products[i], products[j]) 时,您有时会尝试使用垃圾指针,就好像它们指向真正的字符串一样,这就是您所在的位置出现段错误。

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

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

关于c - 在 C 程序中使用带有指针数组的 strcmp() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899238/

相关文章:

c++ - 真值表到位表达式

c - 为什么该服务器不输出任何内容?

c - 通过 C 中的 TCP 套接字传输后的字符串比较

c++ - 2 我的 strcmp 函数测试失败

c - malloc 可以为您的程序分配多少 GB

c - 类型转换为不同的编译器提供不同的结果

可变长度的字符

在 C 编程中比较两个文件以匹配行

将 strdup 函数的返回值与 strncmp 进行比较

c - 恼人的 strcat() 输出