通过函数调用的方法,获取字符串,主要有四种方式:
1. 使用堆空间,返回申请的堆地址,注意释放
2. 函数参数传递指针,返回该指针;或者传入指针,对指针的内容进行修改,无需返回,调用函数后,指针的内容已修改。
3. 返回函数内定义的静态变量(共享)
4. 返回全局变量
/*使用堆分配的内存,地址是有效,但这种方式需要注意,必须由使用的地方将返回的地址free掉 */
char *fun1()
{
char* s = (char*)calloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
}
/*将地址由入参传入 */
char* fun2(char*s)
{
if (s)
strcpy(s, "abc ");
return s;
}
/*或者用如下函数:在函数中给字符指针赋值*/
void fun3(char*s)
{
if (s)
strcpy(s, "abc ");
}
/*这种方式调用都要注意给s分配的大小是足够。
可以这样: */
char* fun4(char*s, int len)
{
if (s)
{
strncpy(s, "abc", len-1);
s[len-1] = 0;
}
return s;
}
/*或可以如下: */
void fun5(char*s, int len)
{
if (s)
{
strncpy(s, "abc", len-1);
s[len-1] = 0;
}
}
/*或使用局部静态变量 */
char* fun6()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
/*这种方式需要注意,不要修改返回的这个字符串,由于是共享地址,对它的修改会反应到每个调用者的。可以这样:*/
const char* fun7()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
/*还有一种是使用全局变量 */
char g_s[100];
char* fun8()
{
strcpy(g_s, "abc ");
return g_s;
}
/*同样的,也要注意这个变量可存储的最大空间。*/