首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strcat函数的实现一问解决方案

2012-03-29 
strcat函数的实现一问Strcat函数定义代码OpenBSD对这个函数的实现如下:char *strcat(char *s, const char

strcat函数的实现一问
Strcat函数定义代码 
OpenBSD对这个函数的实现如下:
char *  
strcat(char *s, const char *append)  
{  
  //将s所指向的字符串的首地址保存下来,以便使用  
  char *save = s;  
  
  //将s所指向的字符串的首指针移至串尾处,s指针指向的字符元素为'\0'  
  for (; *s; ++s);  
   
  //将append所指的字符串的元素复制到s所指向的字符串尾部,直至遇到'\0'  
  while ((*s++ = *append++) != '\0');  
   
  //返回追加后的字符串首地址  
  return(save);  
}  

我的问题是:传给第一个参数s的是不是必须是字符数组?如果是指针好像会有问题吧?

[解决办法]
可以是指针,但是这个指针必须先分配了内存空间
[解决办法]
我的问题是:传给第一个参数s的是不是必须是字符数组?如果是指针好像会有问题吧?
不会的,只要传的这个指针所指向的内存足够存下这两个字符串
[解决办法]
你自己写代码试试就知道了啊。
[解决办法]

C/C++ code
#include <iostream>#include<cstring>using namespace std;int main(){      char*p=new char[20];      strcpy(p,"hello ");      strcat(p,"world");      cout<<p<<endl;          system("pause");    return 0;}
[解决办法]
数组名在传递给函数参数时已经变成一个指针了。

[解决办法]
这要看指针指向哪里
比如 char *p="hello"; 这个就不行
[解决办法]
从语法上来说用指针是可以的。
如果指针指向的内存区是只读的(比如常量区),运行会出错。
如果指针指向的内存区是可以写的(堆、栈、全局/静态变量),就没问题。
[解决办法]
还有,指针s指向的空间必须够大,否则会越界。
比如,char s[5]; strcat(s, "fsdaruiweqfdjrewqrewqska"); 这也不行。
[解决办法]
我帮你占楼,我也学习了,正好要期末考试了
[解决办法]
刚才忘了说,如果指针没初始化(所谓野指针)那就更不行了。

热点排行