~~此文总结自《你必须知道的495个C语言问题》第七章内存分配7.7小结内容。
如果函数返回指针 ,必须确保指针指向的内存已经正确分配内存。返回的指针可以指向静态分配的、调用者传入的或者通过malloc调用获得的缓冲区,但是不能是局部的数组。如下例子就是一个错误例子;
char *itoa(int n)
{
char rebuf[20];
sprintf(rebuf, "%d", n);
return rebuf;
}
正确的例子如下:
例1,这样子不太好,最好不要这样做:
char *itoa(int n)
{
static char rebuf[20];
sprintf(rebuf, "%d", n);
return rebuf;
}
例2:
char *itoa(int n, char *rebuf)
{
sprintf(rebuf, "%d", n);
return rebuf;
}
例3:
char *itoa(int n)
{
char *rebuf;
rebuf = (char *)malloc(20);
if(rebuf != NULL)
sprintf(rebuf, "%d", n);
return rebuf;
}