在C程序中使用带指针数组的strcmp()函数
我试图检测指针数组中的重复字符串。我想用strcmp()函数检测是否有任何重复,并想删除除第一个之外的重复,但是当我添加在C程序中使用带指针数组的strcmp()函数,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, s
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]);
}
}
}
FILE*temp\u FILE\u to\u read=fopen(“temp.txt”、“r”);
字符温度线[256];
char*产品[256];
int j=0;
while(fgets(临时线、大小线、临时文件读取)){
//printf(“%s”,临时行);
产品[j]=标准(温度线);
printf(“%s”,产品[j]);
j++;
}
对于(int i=0;i
我猜您的文件中没有256个产品,每个产品的长度正好是256个字符,因此您的产品数组未满。因此,当您执行strcmp(products[i],products[j])
时,您将在某个时候尝试使用垃圾指针,就像它们指向一个真正的字符串一样,这就是您得到segfault的地方
您的代码有几处错误,包括
- 您可能希望在新的行中分解文件,而不仅仅是每256个字符(尽管我可能错了)
- 您应该检查以确保创建的产品不会超过256个,否则将导致阵列溢出
- 在进行字符串比较时,只进行您拥有的产品数量,而不是盲目地进行数组末尾的比较
while
循环在j
达到256时不会继续。那些for
循环意味着products
数组包含256个有效指针,这不是必需的。这里的另一个错误是来自外部范围的j
循环阴影内部j
。感谢您的帮助,@goodvibration也声明了这一点,我重新编辑了代码。它解决了st故障。解释清楚!