临时问题【过后删文】
#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
则就会出现控制台无输出的情况,按道理说这句代码五任何问题,但是注释掉这段代码,就能正确运行。想知道问题到底出在了哪里。

更多精彩