我的串联操作有什么问题?

What is Wrong with My Concatenation Operation?

我试图实现 strcat(),所以我想出了这段代码。但是,我不知道这有什么问题?它给我分段错误。

我在想这可能是内存分配混乱?是吗?如何在不使用 malloc() 的情况下修复它?

#include <stdio.h>

char *strcat(char *s,char *d){

 while(*s++ != '[=10=]') ;
 while(*s++ = *d++) ;

 *s = '[=10=]';

 return s;
}

int main(){

char s[20]= "source";
char d[20]= "dest";

printf("%s\n",strcat(s,d));

return 0;
}

我必须在 s 之前连接 d

  1. 字符串在只读内存中
  2. 字符串s不够长

修复:

   ...
   #define S_STR "source"

   char *d= "dest";
   char *s= S_STR;
   s = malloc(strlen(s) + strlen(d) + 1);
   strcpy(s, S_STR);
   printf("%s\n",strcat(s,d));
   free(s);
   return 0;
}

s,d是字符串常量!你不应该做这样的事情。 有一个像 char s[100] 这样的大数组,将源复制到它,然后使用你的连接。请记住,s 应该有空间容纳 d 的内容!

你声明的字符串s和d是常量字符串字面量,你不能修改它们。 您应该声明两个 char 数组,并确保要复制到的数组足够大以容纳另一个数组。

#include <stdio.h>

char *strcat(char *s,char *d)
{
    //Get length of s string
    size_t len = strlen(s);

    //declare new pointer and assign it the value of s
    char *ptr = s;

    //move the pointer to the end of the string
    ptr += len;

    //copy contentes of d string to s string
    while( *d != '[=10=]' )
    {
        *ptr++ = *d++;
    }

    *ptr = '[=10=]';

    //return s
    return s;
}

int main()
{
    //make sure s array length is big enough to accomodate d string
    char s[50] = "source";

    char d[] = "dest";

    printf("%s\n",strcat(s,d));

    return 0;
}

我修好了

#include <stdio.h>
#define SIZE 20

char *strocat(char *s,char *d){

 char *temp = s;

 while(*s++ != '[=10=]');
 *--s;
 while(*s++ = *d++);

 *s = '[=10=]';

 return temp;
}

int main(){

char s[SIZE] = "source";
char d[SIZE] = "dest";

printf("%s\n",strocat(s,d));

return 0;
}