c语⾔能返回字符串吗,C语⾔实现返回字符串函数的四种⽅法C语⾔实现返回字符串函数的四种⽅法
前⾔
C语⾔返回字符串函数共有四种⽅式,分别如下:
使⽤堆空间,返回申请的堆地址,注意释放
函数参数传递指针,返回该指针
text函数什么意思返回函数内定义的静态变量(共享)
返回全局变量
下⾯来看看详细的介绍
其实就是要返回⼀个有效的指针,尾部变量退出后就⽆效了。
使⽤分配的内存,地址是有效
char *fun()
{
char* s = (char*)calloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
}
但这种⽅式需要注意,必须由使⽤将将返回的地址free掉
将地址由⼊参传⼊
char* fun(char*s)
{
if (s)
strcpy(s, "abc ");
return s;
}
这种⽅式调⽤都要注意给s分配的⼤⼩是⾜够。
可以这样:
char* fun(char*s, int len)
{
if (s)
{
strncpy(s, "abc ", len-1);
s[len-1] = 0;
}
return s;
}
或才使⽤局部静态变量
char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
这种⽅式需要注意,不要修改返回的这个字符串,由于是共享地址,对它的修改会反应到每个调⽤者的。可以这样:
const char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
还有⼀种是使⽤全局变量
char g_s[100];
char* fun()
{
strcpy(g_s, "abc ");
return s;
}
同样的,也要注意这个变量可存储的最⼤空间。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家学习或者使⽤C语⾔能有所帮助,如果有疑问⼤家可以留⾔交流。
时间: 2016-12-11
在讨论着四种⽅法之前,⾸先要对函数有⼀个简单的认识,⽆论是在形实结合时,还是在return语句返回时,都有⼀个拷贝的过程.你传进来的参数是个值,⾃然函数在⼯作之前要把这个值拷贝⼀份供⾃⼰使⽤,你传进来的是个地址,函数也就会拷贝该地址供⾃⼰使⽤.同样return返回时,如果返回⼀个值,函数会将该值拷贝⼀份以提供给主调函数使⽤,返回的是⼀个指针(也就是地址),⾃然拷贝的就是⼀个地址,供主调函数使⽤.
先给出⼀个错误的例⼦: #include #include
函数通过数组作为参数 如果想通过⼀个⼀维数组作为函数的参数,就必须声明函数形式参数,使⽤以下三种⽅式与所有三个声明⽅法之⼀产⽣类似的结果,因为每⼀种⽅式告诉编译器,⼀个整数指针将会要被接收.类似的⽅式,可以使⽤多维数组形式参数. ⽅式-1 形式参数为指针如下.在下⼀章将学习什么是指针. void myFunction(int *param) { . . . } ⽅式-2 如下形式数组参数的⼤⼩: void myFunction(int param[10]) { . . . } ⽅式-3 如下形式
返回值的作⽤ main函数的返回值⽤于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回⾮零代表程序异常退出.下⾯我们在winxp环境下做⼀个⼩实验.⾸先编译下⾯的程序:int main( void ){ return 0;}然后打开附件⾥的"命令提⽰符",在命令⾏⾥运⾏刚才编译好的可执⾏⽂件,然后输⼊"echo%ERRORLEVEL%",回车,就可以看到程序的返回值为0.假设刚才编译好的⽂件是a.exe,如果输⼊&
Linux编程时候,如果我们需要调⽤shell命令或脚本通常使⽤system⽅法.如system("ls") 该⽅法返回值为0或-1,即成功或失败.⽽有的时候我们想要获取shell命令执⾏的结果,该怎么办呢? 我们可以将shell命令结果重定向到⽂件中,然后再读取这个⽂件,如:
system("ls&") FILE *fp = fopen(result, "r") 当然我们也可以直接使⽤管道,如下⾯⽰例: #includ
C语⾔允许函数的返回值是⼀个指针(地址),我们将这样的函数称为指针函数.下⾯的例⼦定义了⼀个函数 strlong(),⽤来返回两个字符串中较长的⼀个: #include #include char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen(str2)){ return str1; }else{ return
str2; } } int main(){ cha
C语⾔strerror()函数:返回错误原因的描述字符串 头⽂件: #include 定义函数: char * strerror(int errnum); 函数说明:strerror()⽤来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回. 返回值:返回描述错误原因的字符串指针. 范例: /* 显⽰错误代码0 ⾄9 的错误原因描述 */ #include main() { int i; for(i =
C语⾔getutent()函数:从utmp⽂件中取得账号登录数据 头⽂件: #include 定义函数: struct utmp *getutent(void); 函数说明:getutent()⽤来从utmp ⽂件(/var/run/utmp)中读取⼀项登录数据, 该数据以utmp 结构返回. 第⼀次调⽤时会取得第⼀位⽤户数据, 之后每调⽤⼀次就会返回下⼀项数据, 直到已⽆任何数据时返回NULL. utmp 结构定义如下: struct utmp { short int ut
企业号根据错误码返回错误信息类封装 开发中返回错误码每次需要查询错误返回码⽂档才知道具体的错误信息(查看返回的errormsg也可知道),因此封装⼀个 错误码返回的类来查看! 纯粹的体⼒劳动 s.wechat.utils; /** * 企业号根据错误码返回错误信息类 * @author sunlight * */ pu
blic class ErrorCodeText { p
将return back()->withErrors($validator->errors())->withInput();替换为下⾯的代码 $validator = \Validator::make($request-
>input(), $rules, $messages); if ($validator->fails()) { //将返回错误循环组装成字符串 $arr = []; foreach ($validator-
>getMessageBag()->to
C语⾔标准库中的错误报告⽤法有三种形式. 1.errno errno在头⽂件中定义,如下 #ifndef errno extern int errno; #endif 外部变量errno 保存库程序中实现定义的错误码,通常被定义为errno.h中以E开头的宏, 所有错误码都是正整数,如下例⼦ # define EDOM 33 /* Math argument out of domain of function. */ EDOM的意思是参数不在数学函数能接受的域中,稍后的例⼦中⽤
C语⾔getcwd()函数:取得当前的⼯作⽬录 头⽂件: #include 定义函数: char * getcwd(char * buf, size_t size); 函数说明:getcwd()会将当前的⼯作⽬录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间⼤⼩. 注: 1.在调⽤此函数时,buf 所指的内存空间要⾜够⼤.若⼯作⽬录绝对路径的字符串长度超过参数size ⼤⼩,则返回NULL,errno 的值则为ERANGE. 2.倘若参数buf
C语⾔stat()函数:获取⽂件状态 头⽂件: #include #include 定义函数: int stat(const char * file_name, struct stat *buf); 函数说
明:stat()⽤来将参数file_name 所指的⽂件状态, 复制到参数buf 所指的结构中. 下⾯是struct stat 内各参数的说明: struct stat { dev_t
st_dev; //device ⽂件的设备编
C语⾔signal()函数:设置信号处理⽅式 头⽂件: #include 定义函数: void (*signal(int signum, void(* handler)(int)))(int); 函数说
明:signal()会依参数signum 指定的信号编号来设置该信号的处理函数. 当指定的信号到达时就会跳转到参数handler 指定的函数执⾏. 如果参数handler 不是函数指针, 则必须是下列两个常数之⼀: 1.SIG_IGN 忽略参数signum 指定的信号. 2
>nul 2>nul 这个">nul 2>nul"可以屏蔽⼀切屏幕的输出可以这样理解: 假如执⾏⼀个命令,但是不想在屏幕⾥看到这个命令的执⾏情况,可以使⽤"[命令]>nul"就可以屏蔽命令在屏幕上的输出,但是有的命令执⾏会出错,即使⽤了">nul"也不能屏蔽命令产⽣的信息,所以就在后⾯加" 2>nul"这个,就是"[命令]>nul+空格+2>
C语⾔getpid()函数:获取进程识别码 头⽂件: #include 定义函数: pid_t getpid(void); 函数说明:getpid ()⽤来取得⽬前进程的进程识别码,许多程序利⽤取到的此值来建⽴临时⽂件, 以避免临时⽂件相同带来的问题. 返回值:⽬前进程的进程识别码 范例 #include main() {
printf("pid=%d\n", getpid()); } 执⾏: pid=1494 /*每
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论