通过指针实现strcat [英] implementation of strcat by pointer

查看:223
本文介绍了通过指针实现strcat的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试此代码,但它在运行时显示分段错误.
但是当我使用char s []和char t []代替main()中的char * s,char * t时,问题得到纠正.我不知道为什么吗?

I am trying this code ibut it is showing segmentation fault at run time.
But when I am using char s[] and char t[] instead of char *s , char *t in main(), the problem gets rectified.I dont know why ?

void my_strcat ( char *s , char *t)
 {int i , j;
  for( i=0;s[i] !=''\0''; i++)
    ;
   for( j=0; t[j] !=''\0'';j++)
     s[i+j]=t[j];

   s[i+j]=''\0'';

   cout<<"concatenated string is"<<endl<<s;
 }

int main ()
 {

   char *s="lion";
   char  *t="california";
   my_strcat(s , t );

   return 0;
 }

推荐答案

ARopo是正确的.您必须在缓冲区中提供足够的空间以放置多余的字符.
使用此
ARopo is right. You must provide enough space in your buffer to put the extra characters.
Use this
char s[100] = "lion";
...



最好提供缓冲区的长度.这称为防御性编程:



And it is always a good practice to give the length of your buffer. This is called defensive programming:

void my_strcat (char *s, int maxLength, const char *t)
{
    if (maxLength <= 0)
        return;
    int i, j;
    //always make sure we don't go too far by testing the maxLength
    for (i = 0; i < maxLength && s[i] != '\0'; i++);

    for (j = 0; i + j < maxLength && t[j] != '\0'; j++)
       s[i + j] = t[j];

    if (i + j < maxLength)
       s[i + j] = '\0';
    else
       s[maxLength - 1] = '\0';

    cout << "concatenated string is " << endl << s;
}

int main ()
{
    char s[100] = "lion";
    char *t = "california";
    my_strcat(s, 100, t);
    return 0;
}


您不能复制到s,因为它已分配了字符串常量,所以没有为要添加的字符分配内存,请尝试此操作


You can''t copy to s this is assigned a string constant so has not memory allocated for the characters you are adding , try this


char s[20];
s[0]=''l'';
s[2]=''i'';
s[3]=''o'';
s[4]=''n'';
s[5]=''\0'';

my_strcat(s , t );



您也可能想将功能更改为



also you might want to change your function to

void my_strcat ( char *s , const char *t)


您必须为生成的字符串分配内存...
you must alloc memory for resulting string ...


这篇关于通过指针实现strcat的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆