C++中strcat的简单问题!!在线求助!

char *a=(char*)malloc(999);
char temp[10];
...//中间就算是给temp赋值

strcat(a,temp);
我用的是vc2010,这里为什么每次都会有breakpoint跳出来 说有unhandled exception啊??然后会打开一个strcat.asm的文件,在“ mov [edi],dl”这里有个breakpoint。

在线求助啊急!!!求高手指点!!谢谢!!!

第1个回答  2013-03-18
你没有把a没有初始化,或者你初始化的字符串最后一个不是空字符,或者你的temp赋值不是以空字符结束
第2个回答  2013-03-18
使用strcat之前加上下面这句
memset(a, 0, 999);
另外,你需要判断a的空闲内存是否够用
if ( 999 - strlen(a) > strlen(temp))
{
strcat(a, temp);
}本回答被提问者和网友采纳
第3个回答  2013-03-20
很多回答纯粹胡说

char temp[10] = {0} 就行了

temp没有初始化导致没有结束导致溢出。
楼主不要被别人误导
第4个回答  2013-03-18
会不会temp定义的短了?定义的长点试试追问

我换了10000了。。也不行。。

追答

你在char *a=(char*)malloc(999);加个断点,跟进去看看,这些变量里面到底是什么。就知道问题在哪了。
断点会加吗? 就把光标移动到char *a=(char*)malloc(999);,按F9,然后运行,接着按F10,一步一步的看。

第5个回答  2013-03-18
溢出了啊 亲追问

请问应该怎么改啊。。。我不太会

追答

能全贴出来么代码

追问

全代码太长了 但是中间对temp处理过的只有这一句:
sprintf( temp, "(%d, %.2f, %.2f, %.2f, ->) ", previous->yMax, previous->x, previous->deltaX, previous->deltaY );

这之前有temp的就是对它的定义,这之后就是strcat那句了。

追答

从这句看
sprintf( temp, "(%d, %.2f, %.2f, %.2f, ->) ", previous->yMax, previous->x, previous->deltaX, previous->deltaY );

temp果断溢出了··

追问

那是还要再大是么。。。。

追答

肯定了

假设你的 "(%d, %.2f, %.2f, %.2f, ->) ", previous->yMax, previous->x, previous->deltaX, previous->deltaY

( 一个长度 然后一个int的 至少得 1个长度 然后逗号 一个长度 1+1+1 = 3 至少3

接着float的还是.2 至少3个长度 逗号一个长度 4

接着float的还是.2 至少3个长度 逗号一个长度 4

接着float的还是.2 至少3个长度 逗号一个长度 4

后面的 ->) 3个长度 3

那么加起来 至少也有 18长度了 你temp定义的是10 你自己算算

pascal决赛求助!!高手快进...
strlcopy 函数 将一个字符串中的字符复制到另一个字符串中 strlen 函数 返回字符串中的字符数 strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 strlicomp 函数 以最大长度比较两个字符串(不区分大小写) strlower 函数 将字符串中的字符转换为小写 strmove 函数 将一个字符串中的字符复制...

相似回答