Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425101
  • 博文数量: 103
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-15 22:17
文章分类

全部博文(103)

文章存档

2013年(4)

2012年(99)

我的朋友

分类: C/C++

2012-10-13 19:42:52

今天笔试联咏科技集团,全是c语言和指针,前一段看了c和指针,多少有点进步,虽然答得不敢说太好,但是也尽力了,总比十一之前好上一点,最后一道题是一个函数,用手写一个函数太困难了,程序猿没有编辑器活不下去啊。。。
回来把函数写下来然后在gcc上编译,结果总是最后出现一个段错误,程序功能是实现了可最后的段错误还是让人不爽,找不到原因

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>


  4. int func(char *string)
  5. {
  6.     int len=strlen(string);
  7.     printf("length of string is %d\n",len);
  8.     char ch[len];
  9.     int number[len];
  10.     int i,j=0,eqflag=0;
  11.     for(i=0;i<len;i++)
  12.     {
  13.         ch[i]=0;
  14.         number[i]=0;
  15.     }
  16.     char *p=string;
  17.     char *chp=ch;
  18.     while('\0'!=*p)
  19.     {
  20.         eqflag=0;
  21.         for(i=0;i<len;i++)
  22.         {    if(*p==ch[i])
  23.             {    number[i]++;
  24.                 eqflag=1;
  25.             }
  26.         }
  27.         if(!eqflag)
  28.         {
  29.             *chp=*p;
  30.             chp++;
  31.             eqflag=0;
  32.         }            
  33.         p++;
  34.     }
  35.     j=1;
  36.     for(i=0;i<len;i++)
  37.         if(number[i]==1)
  38.         {
  39.         printf("first double char is %c\n",ch[i]);
  40.         j-=1;    
  41.         break;
  42.         }
  43.     if(j)
  44.     printf("no double char \n");
  45.     printf("%s\n",ch);
  46.     return 0;
  47. }

  48. int main()
  49. {
  50.     char *string;
  51.     printf("input a string!\n");
  52.     scanf("%s",string);
  53.     func(string);
  54.     return 0;
  55. }
最后总是段错误!
阅读(2297) | 评论(4) | 转发(1) |
给主人留下些什么吧!~~

momser2012-10-15 15:39:54

jinghenew: 你的代码水平不怎么样,还是多练练吧!调通程序不是编程的全部.....
嗯,多谢指教

jinghenew2012-10-15 14:48:21

你的代码水平不怎么样,还是多练练吧!调通程序不是编程的全部

momser2012-10-14 14:24:46

这里面我在笔试写的时候犯了一个错误就是ch[len]
gcc虽然支持变量申请数组的大小,但是变量申请数组的时候不能直接初始化为0
不能ch[len]={};
但是len改成常量就可以,或者用动态数组+分配检测也可以

momser2012-10-13 20:20:26

我擦,发现没有给字符串分配内存我勒个擦,
所以越界了
53行改成char *string=(char *)malloc(100);||
char string[100];都是可以的,真是伤感
动态分配内存时记得加上返回值检测哦亲!