要返回字符串 需要返回char*类型
需要注意的是 返回的字符串 不能是该函数的局部变量,否则会导致出错
可以是参数字符串,全局变量,静态局部变量,或者动态分配的内存
比如
char?*my_str_cpy(char?*d,?char?*s)
{
char?*p=d;
while(*p++=*s++);
return?d;//返回参数字符串.?
}
char *fun()
char* s = (char*)calloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
但这种方式需要注意,必须由使用将将返回的地址free掉
将地址由入参传入
char* fun(char*s)
strcpy(s, "abc ");
这种方式调用都要注意给s分配的大小是足够.
可以这样:
char* fun(char*s, int len)
strncpy(s, "abc ", len-1);
s[len-1] = 0;
或才使用局部静态变量
char* fun()
static char s[100];
这种方式需要注意,不要修改返回的这个字符串,由于是共享地址,对它的修改会反应到每个调用者的.可以这样:
const char* fun()
还有一种是使用全局变量
char g_s[100];
strcpy(g_s, "abc ");
同样的,也要注意这个变量可存储的最大空间.
堆上分配就是这情况,你不释放(delete一下),它就认为你在用着;不会再给别人用
如果给你的你不用了,或是你把它给忘记了,那就算是内存泄露了、
当然,你程序退出的时候,系统会替你回收、不过这样的习惯不好,你想,如果你写了死循环(操作系统、服务器程序等)、那里面不断滴在内存泄露,你就危险了、后来发现,不知不觉,内存怎么就不够用了,明明自己用的不多啊、、
修改一下:
char* fanhui()
static char str[100]; // 局部变量,静态局部变量,它在第一次调用的时候分配,
cin str; // 函数返回了,str的空间还是存在的,也就是不会重复申请、
return str; // 而且,函数外面通过,指针也是可以访问他们的、、
而
char str[100]; // 局部变量,默认动态局部变量,它在每一次调用的时候分配,
cin str; // 函数返回了,str的空间也就不存在了,他是在,栈,上分配的、
return str; // 函数外面通过,指针想访问?、非法!!!人都不在了,你喊他干嘛啊?
①.、puts函数——输出字符串的函数
一般的形式为puts(字符串组)
作用:将一个字符串输出到终端.如,char一个string,并赋予初值.调用puts(string);进行字符串的输出.
一般的形式:gets(字符数组)
作用:从终端输入一个字符串到字符数组,并且得到一个函数值成为字符数组的起始地址.
gets(str);
键盘输入,,,,你懂得.
注意:puts和gets函数只能输出或者输入一个字符串.
说明:字符数组1必须足够大,以便容纳连接后的新字符串.
执行后的结果为:你懂得
注意:
① 不能用赋值语句直接将一个字符串常量或者字符数组直接给一个字符数组.
作用:用来比较两个字符串的差异.具有不同的比较规则.
一般形式:strlen(字符数组);
如:char str[10]="DongTeng";
printf("%d",strlen(str));
一般形式:strlwr(字符串);
一般形式:strupr(字符串).
别听 楼上 的 瞎说, 也 别 百度 了, 都是 错 的, 我 告诉 你 正确 答案
函数 中 的 字符 串 在 函数 结束 的 时候 会 自动 被 释放 掉, 所以 即使 返回 char* 指向 的
也 就是 原 函数 字符串 的 地址, 访问 的 是 一个 系统 没有 分配 给 程序 的 内存, 虽然 编译器 不会 报错, 但 语法 绝对 是 错误 的,而且 你 不一定 能 得到 一个 正确 的 结果
三种 解决 方法:
①., struct ret { char a[100]; }; 返回 一个 结构, 结构里面 包含 字符串
在time1()函数里,char now[]是个在函数里声明的临时变量
函数返回 char * p之后 ,char now[]的空间就已经释放掉了
如果你想返回时间字符串
用malloc函数申请空间,函数返回之后空间就不会被释放掉了
以上就是土嘎嘎小编为大家整理的c语言返回字符串形式函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!