愿你 发表于 2018-4-16 09:39:41

为什么我的substr不对??

# include <stdio.h>
# include <string.h>
# define MAXSIZE 100
typedef struct{
        char *ch;
        int length;
}HString;

int initstr(HString *str)
{
        str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
        if(!str->ch)
        {
                printf("存储空间分配失败。\n");
                return -1;
        }
       
        printf("请给字符串str赋值:");
        gets(str->ch);
        str->length=strlen(str->ch);
        printf("该字符串的长度为:%d\n",str->length);
        printf("赋值成功\n");
        return 0;
}
/*int initstr(HString *str)
{
        char str2;

        str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
        if(!str->ch)
        {
                printf("存储空间分配失败。\n");
                return -1;
        }

        printf("请输入字符串str2:");
        gets(str2);
        strcpy(str->ch,str2);
        printf("赋值成功。\n");
        return 0;
}*/

/*int initstr(HString *str)
{
        char *str2;
        str2=(char*)(malloc(sizeof(char)*MAXSIZE));

        str->ch=(char*)(malloc(sizeof(char)*MAXSIZE));
        if(!str->ch)
        {
                printf("存储空间分配失败。\n");
                return -1;
        }

        printf("请输入字符串str2:");
        gets(str2);
        strcpy(str->ch,str2);
        printf("赋值成功。\n");
        return 0;
}*/

int lengthstr(HString str) //求串长
{
        printf("您的字符串长度为%d\n",str.length);
        return str.length;
}


void printstr(HString *str) //打印字符串
{
        printf("您所需要打印的字符串为:%s\n",str->ch);
        //printf("您所需要打印的字符为:%s\n",str->ch+2);
        //printf("您所需要打印的字符为:%s\n",&str->ch);

}

int comparestr(HString *str1,HString *str2)
{
        int i;
        for(i=0;i<str1->length&&i<str2->length;i++)
        {
                if(str1->ch!=str2->ch)
                {
                        printf("两者相差%d\n",str1->ch-str2->ch);
                        return 1;
                }
                else
                {
                        printf("两者相等。\n");
                        return 0;
                }
        }
}

void copystr(HString *str1,HString *str2)
{
        int i=0;
        while(i<=str2->length)
        {
                str1->ch=str2->ch;
                i++;
        }
}

void concatstr(HString *str1,HString *str2)
{
        int i,j;
        i=0;
        j=str1->length;
        while(i<=str2->length)
        {
                str1->ch=str2->ch;
                i++;
                j++;
        }
        printf("字符串连接成功.\n");
}

int lenstr(HString *str)
{
        int i=0,len=0;
        while(str->ch!='\0')
        {
                len++;
                i++;
        }
        printf("该字符串的长度为%d\n",len);
        return 0;
}

void substr(HString *str)
{
        int pos,len,i,j;
        HString *strsub;
        printf("请输入寻找子串的起始位置:");
        scanf("%d",&pos);
        printf("请输入寻找子串的长度:");
        scanf("%d",&len);
        if(pos<1||pos>str->length||len>=str->length)
                printf("data error!");
        else
        {
                for(i=pos;i<pos+len;i++)
                {
                        strsub->ch=str->ch;
                }
                strsub->ch='\0';
                strsub->length=len;
                printf("您所需要查询的子串为:%s",strsub->ch);
        }
}









int main()
{
        HString str1,str2;
        initstr(&str1);
        //initstr(&str2);
        //comparestr(&str1,&str2);
        //copystr(&str1,&str2);
        //lengthstr(str1);
        //concatstr(&str1,&str2);
        lenstr(&str1);
        substr(&str1);
        printstr(&str1);
        return 0;
}

BngThea 发表于 2018-4-16 10:20:10

错误提示?

愿你 发表于 2018-4-16 10:26:26

BngThea 发表于 2018-4-16 10:20
错误提示?

没有错误提示,可以执行一下,然后直接跳出程序

BngThea 发表于 2018-4-16 11:01:57

愿你 发表于 2018-4-16 10:26
没有错误提示,可以执行一下,然后直接跳出程序

那你怎么知道你的不对?

愿你 发表于 2018-4-16 11:49:49

BngThea 发表于 2018-4-16 11:01
那你怎么知道你的不对?

因为没执行完就退出来了啊

BngThea 发表于 2018-4-16 11:51:41

愿你 发表于 2018-4-16 11:49
因为没执行完就退出来了啊

那你就设置断点追踪一下,看执行到哪一步跳出来的

愿你 发表于 2018-4-16 11:58:42

BngThea 发表于 2018-4-16 11:51
那你就设置断点追踪一下,看执行到哪一步跳出来的

我现在就在学怎么调试...
有点难{:10_277:}
页: [1]
查看完整版本: 为什么我的substr不对??