Chinaunix首页 | 论坛 | 博客
  • 博客访问: 928003
  • 博文数量: 146
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 1523
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 10:32
文章分类

全部博文(146)

文章存档

2014年(2)

2013年(5)

2012年(4)

2011年(6)

2010年(30)

2009年(75)

2008年(24)

分类: LINUX

2008-09-01 15:59:29

    最近在用c编写一个模拟echo命令的程序,在用make filename命令编译时没出现任何警告和错误信息,运行后(比如输入“./filename  -n china linux”)却出现“段错误”的提示信息。在用gcc -Wall -o filename filename.c命令编译时就出现了一大堆信息(也不懂是什麽意思)。
   这是开始写的错误代码(错误的地方用红体标出)
#include
#include

void printn(char *str);

int main(int argc,char *argv[])
{
 int i,j,k,t=1,num1,num2;
 char op[10];   //保存命令行选项
 char str[100]={'\0'}; //保存命令行选项后边的字符串(暂时将其大小定义为100)
 
 j=0;
 num1=0;
 for(i=1;i  {
    if(argv[i][0]=='-')
    {
     for(k=1;k    op[j]=argv[i][k];      //将命令行选项保存到op中
    }
   num1++;      //计算“-”的个数
  }
  op[j]='\0';   //加结束标志
 if(num1)  t=i;          //记录字符串的开始位置
  num2=j;       //记录选项的个数



while(argv[t][i]!='\0')
  {
    if(argv[t][i]!=' ')
     {
      str[i]=argv[t][i];
      i++;
     }
    t++;
  }            //提取选项后的字符串保存在str中

if(num2!=0)
  {   
  for(i=0;i    {
     switch(op[i])   
       {
     case 'n': printn(str);
               break;
       }       
     }
  }
 else puts(str);
 return 0;
}
void printn(char *str)
{
  printf("%s",str);   
}
后来经过检查发现将错误的地方用for(i=(t-1);i                              strcat(str,argv[i]);   
代替后问题解决。但现在还是不知这个“段错误”是什麽意思。


    今天回头看看当初些的程序感觉到当初简直太幼稚了。犯了相当大的错误。首先上边写的简直就不叫代码。代码没有缩进风格,变量没有进行初始化就使用,出现断错误也就不足为奇了,这都是是不应该出现的问题。以前写的这些垃圾就暂时放在这里把,权当对自己的警戒!
阅读(1381) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-03-06 20:24:08

还没有找到解决的方法的话,你一到你的邮件列表里找一下有关“断错误”的邮件。