免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3583 | 回复: 11
打印 上一主题 下一主题

[C] “查找指定的字符串,没有写入”程序出现段错误,大家帮忙解决一下~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-22 13:37 |只看该作者 |倒序浏览
1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4
  5 #define   SIZE   50  /*字符串最大长度*/
  6 #define   COUNT  50  /*最大的字符串个数*/
  7
  8 int   main(void)
  9 {
10         int   i,j=0;
11         char  str[50]="/home/cyg/test/client";
12         char  cTemp[SIZE]={'\0'};
13         char  *cpString[COUNT]={NULL};
14         char  *paString[50];
15         FILE  *fp;
16         if((fp=fopen("input","a+"))==NULL)
17         {
18                 printf("File  input  opens   error!");
19                 exit(1);
20         }
21         for(i=0;i<COUNT;i++)
22         {
23                 if(fgets(cTemp,SIZE,fp)==NULL)   break;
24                 cpString[i]=(char*)malloc(strlen(cTemp)+1);     //所有字符串指针存放在cpString里面              
25                 strcpy(cpString[i],cTemp);
26                 //printf("%s",cpString[i]);            
27         }
28         for(i=0;i<COUNT;i++)
29         {
30                 paString[50]=cpString[i];
31                 if(strcmp(cpString[i],str)==0)
32                 {
33                         j++;
34                         break;
35                 }
36         }
37         //printf("%d\n",j);
38         if(j!=1)
39         {
40         fputs(str,fp);
41         }
42         fclose(fp);
43         for(i=0;i<COUNT;i++)
44         {
45                 free(cpString[i]);
46         }
47         return   0;
48 }



[ 本帖最后由 langue 于 2009-5-22 19:03 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-05-22 13:53 |只看该作者
自己顶一下~~

论坛徽章:
0
3 [报告]
发表于 2009-05-22 14:46 |只看该作者
没明白,你这个是为了一个什么功能?

  for(i=0;i<COUNT;i++)
29         {
30                 paString[50]=cpString;
31                 if(strcmp(cpString,str)==0)
32                 {
33                         j++;
34                         break;
35                 }
36         }

这段是做什么意思。

论坛徽章:
0
4 [报告]
发表于 2009-05-22 14:51 |只看该作者
再说了,就这代码。

编译都过不了。还能到“程序出现段错误”这一步吗?

论坛徽章:
0
5 [报告]
发表于 2009-05-22 15:53 |只看该作者
原帖由 xieweihua 于 2009-5-22 14:46 发表
没明白,你这个是为了一个什么功能?

  for(i=0;i


是这样的,程序已经将文件中的字符串读出并写入到字符数组中,
然后要在字符数组中找有没有指定的字符串

这个就是为了在字符串数组里面查找有没有指定的字符串

这样写不对吗?程序编译通过了阿,就是不能运行,出现段错误~~~


请多多指导~~

论坛徽章:
0
6 [报告]
发表于 2009-05-22 16:57 |只看该作者
paString[50]=cpString;


改为

paString[i]=cpString;

论坛徽章:
0
7 [报告]
发表于 2009-05-22 17:01 |只看该作者
#include<stdio.h>
&nbsp;#include<stdlib.h>
&nbsp;#include<string.h>

&nbsp;#define   SIZE   50  /*字符串最大长度*/
&nbsp;#define   COUNT  50  /*最大的字符串个数*/

&nbsp;int   main(void)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int   i,j=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char  str[50]="/home/cyg/test/client";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char  cTemp[SIZE]={'\0'};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char  *cpString[COUNT]={NULL};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//char  *paString[50];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE  *fp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((fp=fopen("input","a+"))==NULL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("File  input  opens   error!");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<COUNT;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fgets(cTemp,SIZE,fp)==NULL)   break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpString[i]=(char*)malloc(strlen(cTemp)+1);//cpString=(char*)malloc(strlen(cTemp)+1);     //所有字符串指针存放在cpString里面              

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(cpString[i],cTemp);//strcpy(cpString,cTemp);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s",cpString[i]);            
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<COUNT;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//paString[50]=cpString;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(cpString[i]!=NULL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strcmp(cpString[i],str)==0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf("%d\n",j);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j!=1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs(str,fp);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<COUNT;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(cpString[i]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return   0;
&nbsp;}


你試一下這個。

[ 本帖最后由 xieweihua 于 2009-5-22 17:05 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-05-22 18:10 |只看该作者
像楼上的程序运行 strcpy函数出现错误了~~

我把程序改成如下:
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #include<errno.h>
  5
  6 #define   SIZE   128  /*字符串最大长度*/
  7 #define   COUNT  50  /*最大的字符串个数*/
  8
  9 int main(void)
10 {
11         int   i,j=0,k=0;
12         char  str[50]="/home/cyg/test/client";
13         char  cTemp[SIZE];
14         char  *cpString[COUNT]={NULL};
15         FILE  *fp;
16         if((fp=fopen("input","a+"))==NULL)
17         {
18                 perror("fopen error!");
19                 exit(1);
20         }
21         while(!feof(fp))     ///////////////////////////////////////////新加的while循环
22         {
23                 for(i=0;i<COUNT;i++)
24                 {
25                         if(fgets(cTemp,SIZE,fp)==NULL)
26                         {
27                                 perror("fgets error!");
28                                 printf("%d\n",errno);
29                                 exit(1);
30                         }
31                         cpString[i]=(char*)malloc(strlen(cTemp)+1);     //所有字符串指针存放在cpString里面              
32                         strcpy(cpString[i],cTemp);
33                 //printf("%s",cpString[i]);     
34                 }
35                 k=i+1;                            ///////////////////////////////////得出文件中几行字符串,也就是字符数组中有几个字符串
36
37         }
38         for(i=0;i<k;i++)                     ///////////////////////////////////// 在这个数组中查找字符串
39         {
40                 if(cpString[i]!=NULL)     ///////////////////////////////采用楼上的,不过觉得作用不大
41                 {
42                         if(strcmp(cpString[i],str)==0)
43                         {
44                                 j++;
45                                 break;
46                         }
47                 }
48         }
49         //printf("%d\n",j);
50         if(j!=1)
51         {
52         fputs(str,fp);
53         j--;
54         }
55         fclose(fp);
56         for(i=0;i<COUNT;i++)
57         {
58                 free(cpString[i]);
59         }
60         return   0;
61 }


可是程序运行 有莫名的错误
cyg@ubuntu:~$ ./d
fgets error!: Success
29

我查了错误代码 是#define ESPIPE 29 /* Illegal seek */   

不知道又出在哪里了 :em16: :em16: :em16: :em16: :em16: :em16:



[ 本帖最后由 langue 于 2009-5-22 19:03 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-05-23 10:33 |只看该作者
大家帮忙看一下啊~~~

论坛徽章:
0
10 [报告]
发表于 2009-05-23 11:52 |只看该作者
上面的程序自己改错了
在fgets 函数出了问题
现在改好的代码

1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #include<errno.h>
  5
  6 #define   SIZE   128  /*字符串最大长度*/
  7 #define   COUNT  50  /*最大的字符串个数*/
  8
  9 int main(void)
10 {
11         int  i,j=0;
12         char str[50]="/home/cyg/test/client2";
13         char cTemp[SIZE];
14         char *cpString[COUNT]={NULL};
15         FILE *fp;
16         if((fp=fopen("input","a+"))==NULL)
17         {
18                 perror("fopen error!");
19                 exit(1);
20         }
21         for(i=0;i<COUNT;i++)
22         {
23                 if(fgets(cTemp,SIZE,fp)==NULL) break;
24                 cpString=(char*)malloc(strlen(cTemp)+1);     //所有字符串
    指针存放在cpString里面              
25                 strcpy(cpString,cTemp);
26                 //printf("%s",cpString);     
27         }
28
29         for(i=0;i<COUNT;i++)
30         {
31                 if(cpString!=NULL)
32                 {
33                         if(strcmp(cpString,str)==0)
34                         {
35                                 j++;
36                                 break;
37                         }
38                 }
39         }
40         printf("%d\n",j);
41         if(j!=1)
42         {
43         fputs(str,fp);
44         fputc('\n',fp);
45         }
46         if(j==1)
47         {
48         j--;
49         printf("%d\n",j);
50         }
51         fclose(fp);
52         for(i=0;i<COUNT;i++)
53         {
54                 free(cpString);
55         }
56         return   0;
57 }


可是程序没有达到功能 。。。。  没有实现  先查找有没有,没有的话写入的功能 ,一直在写入。。。

继续改正。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP