我的连接操作有什么不对?

时间:2015-10-16 12:10:24

标签: c pointers string-concatenation

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

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

#include <stdio.h>

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

 while(*s++ != '\0') ;
 while(*s++ = *d++) ;

 *s = '\0';

 return s;
}

int main(){

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

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

return 0;
}

我必须在d之前结束s

4 个答案:

答案 0 :(得分:2)

  1. 字符串位于只读内存
  2. 字符串dbContext.Configuration.LazyLoadingEnabled = false; 不够长
  3. 修复:

    s

答案 1 :(得分:1)

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

的内容

答案 2 :(得分:1)

我修好了

SELECT * FROM customer WHERE bday BETWEEN "2015-10-01" AND "2015-11-01"

答案 3 :(得分:0)

您声明的字符串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 != '\0' )
    {
        *ptr++ = *d++;
    }

    *ptr = '\0';

    //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;
}