此程序为什么打印带有奇怪字符的字符串?尽管释放了内存泄漏?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了此程序为什么打印带有奇怪字符的字符串?尽管释放了内存泄漏?相关的知识,希望对你有一定的参考价值。
我是C语言的初学者,并将其作为大学课程的一部分进行学习。给我们的实践问题之一是要求我们创建一个函数,该函数返回用户定义的字符串,该字符串前后带有连字符('-')字符。用户还将定义字符总数。该函数将被称为“ center”,并将被调用如下:center(char userString [],totalLength)。因此,如果userString =“ cat”且totalLength = 5,则center应该返回“ -cat-”。
中心功能可以正常工作。它创建一个带有连字符的字符串。但是,当尝试打印时,我在输出中看到奇怪的字符。在讲座中有人告诉我有关内存泄漏的信息,但是我尝试分配和释放内存。
中心功能:
char *center(char s[], int totalLength){
int dashes = totalLength-strlen(s);
int i;
char* ret=malloc(totalLength+1);
int left = dashes/2;
for(i=0; i<left; i++){
ret[i]='-';
}
for(i=left;i<strlen(s)+1;i++){
ret[i]=s[i-left];
}
for(i=strlen(s)+left;i<totalLength;i++){
ret[i]='-';
}
ret[totalLength+1]=' ';
return ret;
}
主要功能:
int main(void) {
char s[] = "cat";
char *ret=malloc(100);
ret = center(s,5);
printf("%s
", ret);
free(ret);
ret = center(s, 6);
printf("%s
", ret);
free(ret);
ret = center(s, 7);
printf("%s
", ret);
free(ret);
return 0;
}
实际输出:
-cat-
-cat--o
--ca└--
预期输出:
-cat-
-cat--
--cat--
答案
char* ret=malloc(totalLength+1);
...
ret[totalLength+1]=' ';
数组的最高索引比大小小1。大小为totalLength+1
的缓冲区的索引从0
到totalLength
。错位的