免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2984 | 回复: 6
打印 上一主题 下一主题

急求,字符串数组返回值问题,为何不能赋值? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-06 16:09 |只看该作者 |倒序浏览
代码如下:
#include <stdio.h>;

char * getResult(char * cmd)
{
        int        i = 0;
        char        result[18];
        char        ch_record;
        FILE        *fp;
       
        memset(result,0,sizeof(result));
       
        if((fp = fopen(cmd,"r") == NULL){
                printf("file read error!";
                return NULL;
        }
        while (!feof(fp))
                {
                        ch_record = fgetc(fp);
                        if(ch_record == '!'){
                                do{
                                        result = fgetc(fp);
                                        ch_record = result;
                                        i++;
                                        //printf("i = %d:result[i-1] = %c \n",i,result[i-1]);
                                        if(i >; 7){
                                                printf("error of array!\n";
                                                return result;
                                        }
                                }while(ch_record != '!');
                                //break;       
                        }
                }
        result[i-1] = '\0';
        printf("result = %s result's length is : %d\n",result,strlen(result));
        //return result;
        fclose(fp);
        return &(result[0]);
}

void main()
{
       
        char str[20] = {"result.txt"};
        char str1[20];
        char *p1 = str1;

        printf("=====%s\n",getResult(str));
        strcpy(p1,getResult(str));
        printf("str1 = %s;\n",p1);
}
结果为:

result = 1000 result's length is : 4
=====1000

result = 1000 result's length is : 4
str1 = ;

为何可以打印不可以赋值?高人指点!
tommy 该用户已被删除
2 [报告]
发表于 2004-02-06 16:38 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2004-02-06 16:42 |只看该作者

急求,字符串数组返回值问题,为何不能赋值?

这个问题说来话长,函数不应当返回内部变量(指针和整数除外)。
解决方法很简单,把result变量定义成static。

论坛徽章:
0
4 [报告]
发表于 2004-02-06 16:52 |只看该作者

急求,字符串数组返回值问题,为何不能赋值?

恩, 变成static后的确可以了,除了用static申请内存也可以吗?

论坛徽章:
0
5 [报告]
发表于 2004-02-06 16:56 |只看该作者

急求,字符串数组返回值问题,为何不能赋值?

[quote]原帖由 "极光029"]恩, 变成static后的确可以了,除了用static申请内存也可以吗?[/quote 发表:

可以,但是这就会涉及内存释放的问题!
因为你这时要在这个函数外来释放,调用这个函数的人有可能会忘了释放。

论坛徽章:
0
6 [报告]
发表于 2004-02-06 17:11 |只看该作者

急求,字符串数组返回值问题,为何不能赋值?

这与编译器或OS有关吗?我用AIX和solaris+cc就没这个问题。当然这样作肯定是存在问题的。

论坛徽章:
0
7 [报告]
发表于 2004-02-06 17:21 |只看该作者

急求,字符串数组返回值问题,为何不能赋值?

这与编译器有关,AIX的变量顺序与SCO Unix和Linux不同,别的我没玩过。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP