一个变量的地址突然被改变

bobo2003 2003-10-21 03:09:50
有一个函数,功能是变换日历,类似与公历变农历的那种
进去一个char的指针,出来一个char的指针
现在我传给它一个8位的char的指针,不过8位后面不是\0,
函数以运行,会把我的主函数的某个变量的地址给变了,比如
本来这个变量的地址是652ec01,现在是652ecc1,很奇怪。
现在我把那个8位char的指针付给9位的char的指针,使其最后
一位变为\0,正常。不过那个函数是人家用了又用的,应该不
会有什么问题,我想知道问什么,那个变量的地址为什么会变。
...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo2003 2003-10-22
  • 打赏
  • 举报
回复
->或者 把我的 回答 改成 最好 那么做 !!
这句话什么意思啊?

这段source只是那个函数,具体调的那个地方没有贴出来
我只是想让大家看看这段有没有问题。
njuhuangmy 2003-10-21
  • 打赏
  • 举报
回复
或者 把我的 回答 改成 最好 那么做 !!

你上面的程序 没看到 那里 有

进去一个char的指针,出来一个char的指针
现在我传给它一个8位的char的指针,不过8位后面不是\0,
函数以运行,会把我的主函数的某个变量的地址给变了,比如
本来这个变量的地址是652ec01,现在是652ecc1,


相符的内容阿
njuhuangmy 2003-10-21
  • 打赏
  • 举报
回复
我现在是读一个文件,里面
取得一个长度len,然后根据len,malloc一段内存,就是说
每次malloc(len+1)的内存,是不是啊?

这段话的回答 ,是 YES
david08 2003-10-21
  • 打赏
  • 举报
回复
In a function, if you define

int myfunc()
{
int a;
int b;
char c[4];
...
}

the stack will be like this (from higher address to lower)

.......: (parameters of this function)
0x80008: a
0x80004: b
0x80003: c[3]
0x80002: c[2]
0x80001: c[1]
0x80000: c[0]

Hence if you do not restrain your strings by using ending '\0', you will sometimes currupt your stack!


bobo2003 2003-10-21
  • 打赏
  • 举报
回复
我把函数贴一下,各位帮忙啊,位就是字节,不好意思。

#include "PIASE_C.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <memory.h>
#include <stdlib.h>
#define ERROR -1
DllExport int RZB2009(
char *in_buf,
char *out_buf)
{
int rtn = 0 ;
int se_nen ;
int len;
char nen[10];

len = strlen(in_buf);
if (len < 4)
{
return ERROR;
}
memset(nen, 0, sizeof(nen));
memcpy(nen, in_buf, 4);
se_nen = atoi(nen) ;

if (se_nen >= 1868 && se_nen <= 1911)
{
sprintf ((char *)out_buf,"1%02d",se_nen - 1867);
}
else
if (se_nen >= 1912 && se_nen <= 1925)
{
sprintf ((char *)out_buf,"2%02d",se_nen - 1911);
}
else
if (se_nen >= 1926 && se_nen <= 1988)
{
sprintf ((char *)out_buf,"3%02d",se_nen - 1925);
}
else
if (se_nen >= 1989 && se_nen <= 2087)
{
sprintf ((char *)out_buf,"4%02d",se_nen - 1988);
}
else
{
rtn = ERROR ;
}

if (rtn != ERROR && len > 4)
{

strcat(out_buf, in_buf + 4);
}
return rtn ;
}
njuhuangmy 2003-10-21
  • 打赏
  • 举报
回复
函数呢 ?

你这个 “位” 用的不好

不如 直接 说 几个字节 几个字节 呢!!!
program2100 2003-10-21
  • 打赏
  • 举报
回复
不清楚,up
bobo2003 2003-10-21
  • 打赏
  • 举报
回复
意思就是说不管什么时候我都要申请一个比我要放的东东
多一位的变量来装?有点奇怪,我现在是读一个文件,里面
取得一个长度len,然后根据len,malloc一段内存,就是说
每次malloc(len+1)的内存,是不是啊?
dddd8888 2003-10-21
  • 打赏
  • 举报
回复
\0是标志,表明结束,若没有则错误不可预测

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧