请高手回答,关于形参地址和实参地址的问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 04:51:17
遇到一个很奇怪的问题,就是传入的形参和函数里面的实参地址居然发生冲突。请问高手,这个是什么问题?应该如何解决?

以下是我的代码:
#include <stdio.h>
#include <string.h>

#define LINE_MAX_BIT 10
#define ROW_MAX_BIT 2

typedef struct{
int mark;/*-1 负数;1 正数*/
char num_str[LINE_MAX_BIT + 1];
int zero_number;
}mul;

char *int2str(long num_in)/*将传入数字转换为字符串*/
{
char num[LINE_MAX_BIT+1];
long innum = num_in;
memset(num,'0',LINE_MAX_BIT);
num[LINE_MAX_BIT]='\0';
sprintf(num,"%ld",innum);

printf("int2str[*********]str:[%s]\n",num);

return num;
}

mul *str2mul(char *num_in)/*将传入字符串转换为结构体:因为地址冲突,后面执行的代码会引起core dumped,故删除了*/
{

char *num;
num = num_in;
printf("str2mul[000======]str:[%s][%d]\n",num,num);
printf("str2mul[000======]str:[%s][%d]\n",num_in,num_in);
mul result;
prin

有探索精神是好的, 但是首先要把合理范围内的知识搞清楚, 不要遇到问题就开始搞发明。 如果你有一本合适的参考书, 99%的错误应该可以在上面找到相关的内容

没看明白你这个到底奇怪些什么, 不过这程序本身就有问题。 一个原则就是不要返回本函数在栈里分配的变量的地址, 否则出什么错都正常。

char num[LINE_MAX_BIT+1];
这是栈里分配的本地变量, 你返回地址
mul result;
又是一个栈里的变量, 你又把它返回了

"不要返回本函数在栈里分配的变量的地址" 所以解决方法就是 , 要么你别在栈里分配这个空间, 要么你返回值而不返回地址。
对数组来说返回值是不可能的,所以如果你要返回个数组的内容的话,就得在堆里分配这个数组, char * num = new char[xxxxx+1];
对mul对象你可以返回值, 如果你觉得这样太耗也可以在堆里分配它

乱七八糟,
懒得看。

要问什么问题,就只列出问题的部分好了,一大堆代码,排列的又不整齐。看了伤神。

先看了一遍,貌似
mul *rlt;
char *str;
这两指针之后还没分配内存。。。

额,好像每个指针都没分配内存!!