c语言编程,出现 段错误 (核心已转储)。

/*
*编写程序outch,程序读入一行字符,根据命令行中的参数进行不同的输出。outch -2,程序对所读入的一行字符输出最后两个字符;outch +6,程序对所读入的一行字符输出开头6个字符。若命令行中没有参数,则隐含规定输出最后10个字符。
*/

#include <stdio.h>
#define M 100

int arrin(char *p);

int main(int argc,char **argv)
{
int n;
int i;
int j;
char a[M];
n=arrin(a);//向字符数组中输入字符,以'\n'结束,返回数组元素的个数。

if(*(argv[1]+0)=='-')
{
j=*(argv[1]+1)-'0';
if(n>=j)
{
for(i=n-j;i<n;i++)
{
printf("%c",a[i]);
}
putchar('\n');
}
else
{

for(i=0;i<n;i++)
{
printf("%c",a[i]);
}
putchar('\n');
}
}

else if(*(argv[1]+0)=='+')
{
j=*(argv[1]+1)-'0';
if(n>=j)
{
for(i=0;i<j;i++)
{
printf("%c",a[i]);
}
putchar('\n');
}
else
{
for(i=0;i<n;i++)
{
printf("%c",a[i]);
}
putchar('\n');
}
}
else if(*argv[argc]=='\0')
{
if(n>=10)
{
for(i=n-10;i<n;i++)
{
printf("%c",a[i]);
}
putchar('\n');
}
else
{
for(i=0;i<n;i++)
{
printf("%c",a[i]);
}
putchar('\n');
}

}

return 0;
}

int arrin(char *p)
{
int i=0;
char c;
printf("Enter char:\n");
c=getchar();
while(c!='\n')
{
p[i]=c;
i++;
c=getchar();
}
return i;
}
gcc -o myc myc.c

输入./myc
随便输入字符就显示:
段错误 (核心已转储)

你的输入参数呢?

**argv是输入参数啊,你输入的时候是不是没带参数?

带参数的程序最好在前面写个判断,避免这种错误:

if(argc != 2)
    return 0;

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-10-02
你的命令行中的参数呢?你应该首先判断一下命令行参数的个数和长度,应该是if(*(argv[1]+0)=='-')越界了追问

argv是一个指针数组,它存储的字符串地址,不涉及参数长度和越界吧
只输入程序名时才会出现错误,程序名本身也是参数

追答

指针怎么不会越界?比如int *a=new int[2],你访问a[10]不会越界吗
指针数组就是指针的指针,任何一次跳转越界都会出错

相似回答