将字符指针复制到C中的另一个字符指针而不使用strcpy

时间:2016-10-30 02:24:13

标签: c pointers

我在将一个指针的内容复制到另一个指针时遇到了一些问题。我无法将* s的内容复制到* a。如果我移除* a的凹凸,则只会复制s中的最后一个字符。此外,不允许使用任何字符串库函数或任何数组表示法。抱歉,如果格式不佳,这是我的第一篇文章。在此先感谢您的帮助。

 char* copy( char *s )
 {
     char *a = (char *) malloc(sizeof(char)*length(s));
     if (s == NULL)
     {
         printf("ERROR: OUT OF MEMORY\n" );
         return 0;
     }
     while( *s != '\0' )
     {
         *a = *s;
         s++;
         a++;
     }

     *a = '\0';
     return a;
 }

1 个答案:

答案 0 :(得分:3)

永远不要修改已分配的指针的值。如果您这样做,可能会忘记地址并无法释放地址。

char* copy( const char *s )
{
    char *a = malloc(length(s)+1);
    if (a == NULL)
    {
        perror( "malloc failed" );
        return NULL;
    }

    char *c = a;
    while( *s != '\0' )
    {
        *c = *s;
        s++;
        c++;
    }

    *c = '\0';
    return a;
}

非常简单的测试:

int main(int argc, char *argv[])
{
    const char *s = "this is a test string";
    char *a;

    if (NULL != (a = copy(s))) {
        printf("The copy is: %s\n", a);
        free(a);
    }
}

结果:

  

副本是:这是一个测试字符串