我在将一个指针的内容复制到另一个指针时遇到了一些问题。我无法将* 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;
}
答案 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);
}
}
结果:
副本是:这是一个测试字符串