C语言中指针型函数返回值相关的问题

指针型函数的返回值,应该是变量地址、数组首地址或者已经定向的指针变量,也可以是结构变量地址、结构数组的首地址。并且要着重注意的是不能将该函数内部局部变量的地址作为返回值,因为在函数调用结束之后,函数内部的局部变量就自动消失了,存放它们的空间也就被释放了。

之前在参考书中看到的一个例子,来说明这个问题正好:

#include <stdio.h>
char *strcut(char *s, int m, int n);
void main(){
    char s[] = "goodmorning";
    char *ps;
    ps = strcut(s, 3, 4);
    printf("%s\n", ps);
}
char *strcut(char *s, int m, int n){
    char substr[20];
    int i;
    for(i=0;i<n;i++){
        substr[i]=s[m+i-1];
    }
    substr[i]='\0';
    return substr;
}
运行上述程序时,会发现ps并不能接收到函数返回的子数组的正确地址,原因很简单,因为在函数定义中,substr是函数内部的变量,当函数执行完之后,该地址就释放了,最后return的当然就不是正确地址了。

而修改这个函数的方法也很简单,只需要将substr改为全局寿命的static类型就行。

static char strsub[20];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值