您的位置:首页 > 其它

通过函数调用,获取字符串的方法

2014-07-15 17:22 281 查看
通过函数调用的方法,获取字符串,主要有四种方式:

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;

}

/*同样的,也要注意这个变量可存储的最大空间。*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: