如何给strcat加上异常处理

malj988 2010-12-12 04:17:45
下面是我重新写的strcat函数:
char *strcat (char *strDest, const char *strSrc)
{
char* strTemp = strDest;

while(*strTemp != '\0')
{
strTemp++;
}

do
{
*(strTemp++) = *(strSrc);
}while( *(strSrc++) != '\0');

return strDest;
}

问题是:
1、如何在该函数内检查,保证strDest之前分配的空间容得下strDest和strSrc长度之和,否则报错?
2、该函数在处理过程中还可能需要其他哪些异常情况?
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
malj988 2010-12-12
  • 打赏
  • 举报
回复
基本明白了,谢谢 jackyjkchen
jackyjkchen 2010-12-12
  • 打赏
  • 举报
回复
k[Quote=引用 7 楼 malj988 的回复:]
可以考虑在c++层面上解决,没有关系的
[/Quote]
看来您没明白,既然内存分配体制是有操作系统决定的,而C/C++又都没有提供现成的库函数(实际上这个库即便有,各个平台上实现也是不一样的),那作为跨平台语言的c/c++都无法实现一个各平台通用的内存已分配长度计算函数。

因此只能利用内存越界产生的异常,使用try catch,这个最简单
malj988 2010-12-12
  • 打赏
  • 举报
回复
可以考虑在c++层面上解决,没有关系的
prohibit 2010-12-12
  • 打赏
  • 举报
回复
assert判断指针是否为空
malj988 2010-12-12
  • 打赏
  • 举报
回复
to bdmh:用strlen得到的长度只是占有字符的那部分长度,即'/0'以前的,对于‘/0’以后的,但是属于strDest的那部分没有得到;
to jackyjkchen:除了try...catch,就没有简单的处理办法了吗,这个问题很明确的啊
jackyjkchen 2010-12-12
  • 打赏
  • 举报
回复
strlen可以在确认一定是是有效内存且存储的一定是\0结尾的字串的前提下得到字串长度。

至于判断内存是否有效,判断内存已分配的长度,从标准C语言的层面上无法做到,这些是操作系统维护的

楼主,不要做无谓的研究了
luciferisnotsatan 2010-12-12
  • 打赏
  • 举报
回复
strlen求字符串长度
C里面没有异常,你只能返回错误值或者设置全局的error code
jackyjkchen 2010-12-12
  • 打赏
  • 举报
回复
1.C库不需要太复杂的异常处理,顶多判断一下是否为NULL(事实上这都不需要,几乎所有的C标准库都不会多管闲事)

2.一定要做的话,用C++的try...catch
bdmh 2010-12-12
  • 打赏
  • 举报
回复
用strlen应该可以得到长度的,不知道副不符合你

69,371

社区成员

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

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