追加字符串内容,需要申请原字符串内存空间吗

fansses 2006-08-20 11:59:28
void Change(char *fName){
if (fName[strlen(fName)-1]!='a')
{

strcat(fName,"a");

std::cout<<fName;

}

vc2003编译通过后出现指针错误。intel c++9.0编译通过后,运行结果达到要求。

请问,是哪个有错误?

如果要申请扩充fName的空间,应该怎么做?
...全文
294 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj860603 2006-08-21
  • 打赏
  • 举报
回复
C++偶不会,不知道哪个函数用来扩充内存,C中用realloc扩充。
lj860603 2006-08-21
  • 打赏
  • 举报
回复
要看空间够不够,不够的话当然要扩充内存空间。

在你的程序需要扩充空间呀,因为要在结尾连接一个字符。
wshjobless 2006-08-21
  • 打赏
  • 举报
回复
这是因为你传递的参数形式为(char *fName),
只在fName为char []数组的定义时,
你才可以在函数内部改变原始字符串的内容
wshjobless 2006-08-21
  • 打赏
  • 举报
回复
char *fName,非常象C的用法,C中字符串的定义一般为char fName[n],
长度取决于n,很显然,你在这个函数内部是无法找变原来字符串的长度的。
你只能在定义时把n放的足够大!
如果外部实参fName给的是常量定义,如char *fName = "abcsd";
同样不能在函数内部把它变长
如果你用的是char *fName = new ...., :(
你在这个函数内部还是无法改变原来变量的长度
believefym 2006-08-21
  • 打赏
  • 举报
回复
重新new一块,然后memcpy过去

MSDN:
Security Note
Because strcat does not check for sufficient space in strDestination before appending strSource, it is a potential cause of buffer overruns.

踏岸寻柳 2006-08-21
  • 打赏
  • 举报
回复
如果字符数组fName的大小大于其内容的话,永远都不会出错。
你可能是遇到了“字符越界”的情况,也就是说你的字符数组满足不了需要了。

但是,由于这个函数的参数是字符指针,你无法更改其地址,所以,就不存在申请新的空间的问题,你只需要在调用该函数时保证这个字符数组足够大即可。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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