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