首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

采取堆分配存储结构的串的SubString函数用在结尾人工加'\0'吗

2013-07-16 
采用堆分配存储结构的串的SubString函数用在结尾人工加'\0'吗?Status SubString(HString *Sub,

采用堆分配存储结构的串的SubString函数用在结尾人工加'\0'吗?

Status SubString(HString *Sub, HString T, int pos, int len) {
int i;
if(pos < 1 || pos > StrLength(T) || len < 0 || len > StrLength(T) - pos + 1) {
return ERROR;
}
if((*Sub).ch) {
free((*Sub).ch);
}
(*Sub).ch = (char *) malloc(len * sizeof(char));
if(!(*Sub).ch) {
exit(OVERFLOW);
}
for(i = 0; i < len; i++) {
(*Sub).ch[i] = T.ch[pos + i - 1];
}
(*Sub).ch[i] = '\0';
(*Sub).length = len;
return OK;
}


在上面的SubString()函数的倒数第3行,我在串的结尾上工加上了'\0',因为我发现不加这一句的话,下面这段代码打印出的字符后面会带很多空格或者乱码,加'\0'了就不会带了。这是否说明编译器在编译时没有自动加上'\0'啊。



void main() {
int i;
HString S1, Sub;
char *SS1 = "beijing";
InitString(&Sub);
InitString(&S1);
StrAssign(&S1, SS1);
SubString(&Sub, S1, 1, 3);
for(i = 0; Sub.ch[i] != '\0'; i++) {
printf("%c", Sub.ch[i]);
}
}



[解决办法]
你是说 malloc 应该帮你初始化成 0?

编译器只会在你定义双引号的时候 "xxx" 会帮你加 0, 其余时候你得自己处理.

热点排行