实际输出的结果一直都是错误的,甚至b.ch数组是乱码

#include
#define max 10
typedef struct
{
char ch[max];
int length;
}sstring;
int substring(sstring &sub,sstring s,int pos,int length)
{
int i;
if(pos+length-1>s.length)
return -1;
for(i=pos;i
sub.ch[i-pos+1]=s.ch[i];
sub.length=length;
return 1;
}

int main()
{
sstring a;
sstring b;
gets(a.ch);
printf("%d\n",substring(b,a,3,2));
puts(b.ch);
return 0;
}

如果是要求实现的功能是:求子串。用Sub返回串S的第pos个字符起长度为len的子串。那代码需要修改一下,下面的例子将substring函数第二个参数结构a的字符数组的第3个元素起的2个字符的子串存储到第一个参数b的字符数组ch中,但不知道是不是你所问的那个要求,代码修改如下:

#include <stdio.h> 
#include <string.h>
#define max 10
typedef struct
{
    char ch[max];
    int length;
}sstring;

int substring(sstring &sub,sstring s,int pos,int length)
{
    int i;
    if(pos+length-1>s.length)
        return -1;
        
    for(i=pos;i<pos+length;i++)
        sub.ch[i-pos]=s.ch[i]; //sub结构的ch字符数组的第0个位置开始存储s结构的ch数组第pos位置的元素,往后依次存储length个元素 
    sub.ch[i-pos]='\0';     //sub结构的ch字符数组后面增加空字符,形成一个字符串 
    sub.length=length;
    
    return 1;
}
//https://ask.csdn.net/questions/7767563?spm=1005.2025.3001.5141
int main()
{
    sstring a;
    
    gets(a.ch);
    a.length=strlen(a.ch); 
    
    sstring b;
    printf("%d\n",substring(b,a,3,2));
    puts(b.ch);
    
    return 0;
}

img

该算法是求串中的子串