在 C 程序中使用带有指针数组的 strcmp() 函数
Using strcmp() function with pointer array in C program
我正在尝试检测指针数组中的重复字符串。我想检测 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]);
}
}
}
我猜您的文件中没有 256 个产品,每个产品的长度恰好是 256 个字符,因此您的 products
数组未满。因此,当您执行 strcmp(products[i], products[j])
时,您有时会尝试使用垃圾指针,就好像它们指向真正的字符串一样,这就是您遇到段错误的地方。
您的代码有几处错误,包括
- 您可能希望在新行处拆分文件,而不仅仅是每 256 个字符(尽管我可能错了)
- 您应该检查以确保您尝试创建的产品不会超过 256 个,否则您的数组会溢出
- 在进行字符串比较时,只到你拥有的产品数量,而不是盲目地到数组的末尾
我正在尝试检测指针数组中的重复字符串。我想检测 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]);
}
}
}
我猜您的文件中没有 256 个产品,每个产品的长度恰好是 256 个字符,因此您的 products
数组未满。因此,当您执行 strcmp(products[i], products[j])
时,您有时会尝试使用垃圾指针,就好像它们指向真正的字符串一样,这就是您遇到段错误的地方。
您的代码有几处错误,包括
- 您可能希望在新行处拆分文件,而不仅仅是每 256 个字符(尽管我可能错了)
- 您应该检查以确保您尝试创建的产品不会超过 256 个,否则您的数组会溢出
- 在进行字符串比较时,只到你拥有的产品数量,而不是盲目地到数组的末尾