69,371
社区成员
发帖
与我相关
我的任务
分享
typedef long strsizeT;
typedef char* pChar;
typedef struct cString {
pChar str;
strsizeT Len;
}cString;
/* 初始化一个cString类变量 */
cString Init( )
{
cString tmp;
tmp.str = NULL;
tmp.Len = 0;
return tmp;
}
/*
构造一个字符串结构体
接受一个常量字符串 或是 一个 char *类型的的变量返回一个cString类型
( 如果str为空字符串,将返回一个空的cString )
当返回的cStringName.LengthSF()的长度为 Error 时,为创建错误
*/
cString GreateStr( const pChar str )
{
cString tmp;
strsizeT strSize = __SizeS( str );
if( strSize == 0 )
return Init();
else if( !(tmp.str = (pChar) malloc( strSize ) ) )
{
tmp.Len = Error;
return tmp;
}
else
{
strncpy( tmp.str, str, strSize );
tmp.str[ strSize ] = '\0';
tmp.Len = strSize;
}
return tmp;
}
/*
销毁一个字符串,
DestoryStr函数只销毁由GreateStr()创建的cString 类型的数据
*/
void DestroyStr( cString *s )
{
s->Len = 0;
free( s->str );
s->str = NULL;
}
int main(void)
{
cString test = Init();
test = GreateStr( "This is a test of cString Type!" );
printf( "%s\n", test.str );
DestroyStr( &test );
/* 释放函数在执行 free( test->str); 这句的时候就不往下走了,我单步跟进的时候是停在了一句汇编语言上.
另外,没有任何的错误信息提示。编译器为vs10. */
}