请问:这个代码的segmentation fault 在哪里
请教:这个代码的segmentation fault 在哪里?
我做了一个代码,预期功能是从两个文件list1.txt和list2.txt中读取中文名单,然后从list2中找出list1里不存在的名字。每个名字占一行,由于是从excel拷贝过来到text中的,所以名字后面有个TAB。但这个代码运行后总是出现segmentation fault的提示。请问哪里出现了问题,谢谢!
我做了一个代码,预期功能是从两个文件list1.txt和list2.txt中读取中文名单,然后从list2中找出list1里不存在的名字。每个名字占一行,由于是从excel拷贝过来到text中的,所以名字后面有个TAB。但这个代码运行后总是出现segmentation fault的提示。请问哪里出现了问题,谢谢!
// compareing name lists
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define SIZE 60
#define MAX 20
int main(void)
{
char names_1[SIZE][MAX];
char names_2[SIZE][MAX];
char * pnames_1[SIZE], * pnames_2[SIZE]; //用以分别指向names_1[SIZE][MAX]和names_2[SIZE][MAX]
char nms_1[SIZE][MAX]; //用以装载names_1[SIZE][MAX]的每一串去掉尾部的TAB后的新串
char nms_2[SIZE][MAX]; //用于names_2[SIZE][MAX],功能同上
char * pnms_1[SIZE], * pnms_2[SIZE]; //用以分别指向nms_1[SIZE][MAX]和nms_2[SIZE][MAX]
char * fnd[SIZE]; //用以装载找到的串
int cnt_1 = 0, cnt_2 = 0, cnt_fnd = 0;
int i;
FILE *fp1, *fp2, *fp3;
if((fp1 = fopen("list1.txt", "r")) == NULL)
{
fputs("Error reading \"listing1.txt\".", stderr);
exit(1);
}
if((fp2 = fopen("list2.txt", "r")) == NULL)
{
fputs("Error reading \"listing2.txt\".", stderr);
exit(1);
}
if((fp3 = fopen("results.txt", "w")) == NULL)
{
fputs("Error writing \"results.txt\".", stderr);
exit(1);
}
while(cnt_1 <= SIZE && fgets(names_1[cnt_1], MAX, fp1) != NULL)
{
pnames_1[cnt_1] = names_1[cnt_1];
pnms_1[cnt_1] = nms_1[cnt_1];
cnt_1++;
}
while(cnt_2 <= SIZE && fgets(names_2[cnt_2], MAX, fp2) != NULL)
{
pnames_2[cnt_2] = names_2[cnt_2];
pnms_2[cnt_2] = nms_2[cnt_2];
cnt_2++;
}
for(i = 0; i < cnt_1; i++)
{
while(*(pnames_1[i]) && !isspace(*pnames_1[i]))
{
*pnms_1[i] = *pnames_1[i]; //将names_1[i]中的非空格符字符装载到nms_1[i]中
pnames_1[i]++;
pnms_1[i]++;
}
* pnms_1[i] = '\0'; //让nms_1[i]成为字符串
}
for(i = 0; i < cnt_2; i++)
{
while(*(pnames_2[i]) && !isspace(*pnames_2[i]))
{
*pnms_2[i] = *pnames_2[i];
pnames_2[i]++;
pnms_2[i]++;
}
* pnms_2[i] = '\0';
}
if(cnt_1 >= cnt_2) //如果list1.txt中的名字数目多过list2.txt中的就用list1.txt中的名字与list2.txt
{ //中的名字进行比较
for(i = 0; i < cnt_1; i++)
if(strcmp(pnms_2[i], pnms_1[i]) != 0)
{
fnd[i] = pnms_1[i]; //将找到的不同名字串的地址赋予fnd[i]