Chinaunix

标题: 急求,字符串数组返回值问题,为何不能赋值? [打印本页]

作者: 极光029    时间: 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    时间: 2004-02-06 16:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: FH    时间: 2004-02-06 16:42
标题: 急求,字符串数组返回值问题,为何不能赋值?
这个问题说来话长,函数不应当返回内部变量(指针和整数除外)。
解决方法很简单,把result变量定义成static。
作者: 极光029    时间: 2004-02-06 16:52
标题: 急求,字符串数组返回值问题,为何不能赋值?
恩, 变成static后的确可以了,除了用static申请内存也可以吗?
作者: lylzp    时间: 2004-02-06 16:56
标题: 急求,字符串数组返回值问题,为何不能赋值?
[quote]原帖由 "极光029"]恩, 变成static后的确可以了,除了用static申请内存也可以吗?[/quote 发表:

可以,但是这就会涉及内存释放的问题!
因为你这时要在这个函数外来释放,调用这个函数的人有可能会忘了释放。
作者: towerjt    时间: 2004-02-06 17:11
标题: 急求,字符串数组返回值问题,为何不能赋值?
这与编译器或OS有关吗?我用AIX和solaris+cc就没这个问题。当然这样作肯定是存在问题的。
作者: FH    时间: 2004-02-06 17:21
标题: 急求,字符串数组返回值问题,为何不能赋值?
这与编译器有关,AIX的变量顺序与SCO Unix和Linux不同,别的我没玩过。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2