李青山(●—●) 2019-11-17 09:29 采纳率: 0%
浏览 190

求大神解答一下这是神魔情况 试了几个版本都这样,程序无法运行·用C写的

源代码:

#include
#include
#include
#define MAXSIZE 100
#define ERROR 0
#define OK 1

/*串的顺序存储表示*/
typedef struct
{
char *data;
int length;
int stringsize;
} SqString;

int strInit(SqString s); /初始化串*/
int strCreate(SqString s); /生成一个串*/
int strLength(SqString s); /求串的长度*/
int strCompare(SqString s1,SqString *s2); /两个串的比较*/
int subString(SqString sub,SqString *s,int pos,int len); /求子串*/
int strConcat(SqString t,SqString *s1,SqString *s2); /两个串的连接*/

/*初始化串*/
int strInit(SqString s)
{
s->data=(char *)malloc(MAXSIZE*sizeof(char));
if(!s->data)
return ERROR;
s->length=0;
s->stringsize=128;
return OK;
}/*strInit
/

/*生成一个串*/
int strCreate(SqString s)
{
printf("input string :");
scanf("%s", &(s->data));
s->length = strlen(s->data);
return OK;
}/*strCreate
/

/*(1)---求串的长度*/
int strLength(SqString *s)
{
return s->length;

}/*strLength*/

/*(2)---两个串的比较,S1>S2返回>0,s1 int strCompare(SqString *s1,SqString *s2)
{
int i;
for(i=0;ilength&&ilength;i++)
if(s1->data[i]!=s2->data[i])
return s1->data[i]-s2->data[i];
return s1->length-s2->length;

}/*strCompare*/

/*(3)---求子串,sub为返回的子串,pos为子串的起始位置,len为子串的长度*/
int subString(SqString sub,SqString *s,int pos,int len)
{
int i;
if(poss->length||lens->length-pos+1)
return ERROR;
sub->length=0;
for(i=0;i,len;i++)
{
sub->data[i]=s->data[i+pos-1];
sub->length++;
}
sub->data[i]='\0';
return OK;
}/*subString
/

/*(4)---两个串连接,s2连接在s1后,连接后的结果串放在t中*/
int strConcat(SqString t,SqString *s1,SqString *s2)
{
int i=0,j=0;
if(s1->length+s2->length>=t->stringsize)
{
t->data=(char
)realloc(t->data,(t->stringsize+20)*sizeof(char));
if(!t->data)
return ERROR;
t->stringsize=t->stringsize+20;
}
while(ilength)
t->data[i]=s1->data[i++];
while(jlength)
t->data[i++]=s2->data[j++];
t->data[i]='\0';
t->length=s1->length+s2->length;
return OK;

}/*strConcat*/

int main()
{
int select,k,pos,len;
SqString s,t,x;
do
{
printf("************菜单************\n");
printf("1.求串长\n");
printf("2.两个串比较\n");
printf("3.求子串\n");
printf("4.连接两个串\n");
printf("\n*********菜单*************\n");
printf("\n输入你的选择:");
scanf("%d",&select);
getchar();
switch(select)
{
case 1:
printf("\n*****show strlgenth *******\n");
strCreate(&s);
printf("strlength is %d\n",strLength(&s));
break;
case 2:
printf("\n*****show strCompare *******\n");
strCreate(&s);
strCreate(&t);
k=strCompare(&s,&t);
if(k==0)
printf("two string equal");
else if(k printf("first string else
printf("first string >second string ");
break;
case 3:
printf("\n*****show substring *******\n");
strCreate(&s);
printf("input substring poos,len:");
scanf("%d,%d", &pos, &len);
if (subString(&t, &s, pos, len))
printf("substring is %s\n", t.data);
else
printf("pos or len ERROR!\n");
break;
case 4:
printf("\n*****show subConcat *******\n");
strCreate(&s);
strCreate(&t);
if (strConcat(&x, &s, &t))
printf("Concat string is %s\n", x.data);
else
printf("Concat ERROR");
break;
default:
break;

    }

}

while (select);
return 0;

}


```![图片说明](https://img-ask.csdn.net/upload/201911/17/1573954137_103108.png)
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-11-17 09:30
    关注

    要看完整的代码,或者你自己检查下,s和s->data有没有初始化分配内存

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站