LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 813|回复: 2

再次求助:一函数和GCC问题

[复制链接]
发表于 2005-3-23 13:21:19 | 显示全部楼层 |阅读模式
void pnext(int a[], int k)
{
   int *b,m = a[0], i, j, r, carry;
   b = (int *)malloc (sizeof(int) * (m + 1));
   for (i = 1; i <= m; i++)
      b=a;
   for (j = 1; j < k; j++){
      for (carry = 0, i = 1; i <= m; i++){
         r = (i <= a[0] ? a + b : a) + carry;
         a = r % 10; carry = r / 10;
      }
      if (carry)
         a[++m] = carry;
   }
   free(b);
   a[0] = m;
}



这个函数到底起的什么作用爱????? :ask  :ask  :ask  :ask



还有个问题:我用gcc 编译的时候,比如说我的代码目录为:/root/jiecheng/
里面有三个文件:jiecheng.h,main.c write.c pnext.c
第一次编译的时候:gcc -o *.c
结果完全正确,可是当我 rm -f a.out后,再用gcc -o *.c的时候,出现::
[root@yueliangdao jiecheng]# gcc -o *.c
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:77: undefined reference to `main'
collect2: ld returned 1 exit status

而且:[root@yueliangdao jiecheng]# ls
jiecheng.h  write.c


这个目录里面的两个文件也不见了,这是为什么??高手给看看那!!! :confused:  :confused:  :confused:  :confused:  :confused:
发表于 2005-3-23 21:38:41 | 显示全部楼层
该函数是实现一个简单的数值转化。
假设数组a[10]={3,12,1,12} (a[0]==3表示要处理的数字为后面3个:12 、1、12)
该数组可以看作“个位”、“十位”、“百位”分别是12、1、12的一个“数” :(12)(1)(12)

为了把这个“数”转化为平常的数字,需进行进位运算。即
得到(2)(2)(2)(1)  四个括号前后分别是个位十位百位千位,即十进制数1222


还没完,该函数有个k,是把进位后的数乘以k。假定k=3则,a数组最后结果表示的数值
即为 1222x3=3666





gcc使用看man手册

编译a.c 是
gcc a.c -o aaaa   //生成可执行文件aaaa
你那个gcc -o *.c 乱用,当然把其它文件给弄掉了
回复 支持 反对

使用道具 举报

发表于 2005-3-24 08:16:38 | 显示全部楼层
可以说,这个函数编写的不安全。

因为当实参k大于一个值时,必定发生数组越界,导致不可预料后果。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表