#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct 
{
    char * ch;
    int length;
}Str;
int strassign(Str &str,char * ch)
{
    if(str.ch)
    {
        //free(str.ch);   //此个语句存在,则,输出为空,百思不得解,求哥哥姐姐指点一下 
    }
    int len = 0;
    char * c = ch;
    while(*c)
    {
        ++len;
        ++c;
    } 
    if(len == 0)
    {
        str.ch = NULL;
        str.length = 0;
        return 1;
    }
    else
    {
        str.ch = (char *) malloc(sizeof(char) * (len+1));
        if(str.ch==NULL)
        {
            return 0;
        }
        else
        {
            c = ch;
            for(int i = 0;i<=len;++i,++c)
            {
                str.ch[i] = *c;
                
            }
            str.length = len;
            return 1;
        }
    }
} 
void travelStr(Str str)
{
    int i;
    for(i=0;i<str.length;++i)
    {
        printf("%c",str.ch[i]); 
    }   
    printf("\n");
    
    
        
    
} 

//length
int strlength(Str str)
{
    return str.length;
}
int strcompare(Str s1,Str s2)
{
    for(int i=0;i<s1.length && i<s2.length;++i)
        if(s1.ch[i] != s2.ch[i])
            return s1.ch[i] - s2.ch[i];
    
    return s1.length - s2.length;
    
}

int concat (Str &str,Str str1,Str str2)
{
    if(str.ch)
    {
        free(str.ch);
        str.ch = NULL;
    }
    str.ch = (char *) malloc(sizeof(char) * (str1.length+str2.length+1));
    if(str.ch == NULL)
    {
        return 0;
    }
    int i = 0;
    while(i<str1.length)
    {
        str.ch[i] = str1.ch[i];
        ++i;
    }
    int j = 0;
    while(j<=str2.length)
    {
        str.ch[i+j] = str2.ch[j];
        ++j;
    }
    str.length = str1.length + str2.length;
    return 1;
}
int substring (Str &substr,Str str,int pos,int len)
{
    if(pos<0 ||pos>=str.length || len<0 ||len>str.length-pos)
        return 0;
    if(substr.ch)
    {
        
        free(substr.ch);
        substr.ch = NULL;
    }
    if(len == 0)
    {
        substr.ch = NULL;
        substr.length  = 0;
        return 1;
    }
    else
    {
        substr.ch = (char *)malloc(sizeof(char)*(len+1));
        int i = pos;
        int j = 0;
        while(i<pos+len)
        {
            substr.ch[j] = str.ch[i];
            ++i;
            ++j;
        }
        substr.ch[j] = '\0';
        substr.length = len;
        return 1; 
    }
}
int clearstring(Str &str)
{
    if(str.ch)
    {
        free(str.ch);
        str.ch = NULL;
    }
    str.length = 0;
    return 1;
}
int main()
{
     
    Str str,str1,str2,substr;

    char * ch;
    cout << strassign(str,"cur input") << "字符串赋值成功!"<< endl;
    cout << "字符串的长度为:"<< strlength(str) << endl;
    travelStr(str);
    strassign(str1,"cur input");
    strassign(str2,"cur inputss");
    cout << strcompare(str1,str2) << "字符串str1,str2 比较成功!并输出了差值!" << endl;
    cout << concat(str,str1,str2) << "字符串atr1,str2合并成功!"<<endl;
    travelStr(str);
    
    cout << substring(substr,str,0,3) << "字符串截取成功!"<< endl;
    travelStr(substr);
    cout << "字符串str清空成功!:";
    cout << clearstring(str) << endl;
    travelStr(str);
         
    
    return 0;
}

问题

if(str.ch)
    {
        //free(str.ch);   //此个语句存在,则,输出为空,百思不得解,求哥哥姐姐指点一下 
    }

已经测试,在字符串赋值函数 strassign只要 free 则就会出现控制台无输出的情况,按道理说这句代码五任何问题,但是注释掉这段代码,就能正确运行。想知道问题到底出在了哪里。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。