如何从字符数组复制到字符指针?

dcd*_*cds 2 c

我试图从字符数组复制到字符指针.我的代码:

char str[] = "Hello World";
char *result = (char *)malloc(strlen(str)+1);
int index=0;
while(index <= strlen(str))
{
  *result = str[index];
  result++;
  index++;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,下面的代码工作正常

char str[] = "Hello World";
char *result = (char *)malloc(strlen(str)+1);
int index=0;
while(index <= strlen(str))
{
  result[index] = str[index];
  index++;
}
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?

Raj*_*hmi 8

我们只需使用strcpy函数将数组复制到指针中.

     char str[] = "Hello World";
     char *result = (char *)malloc(strlen(str)+1);
     strcpy(result,str);
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 6

在您的第一个片段中,您修改循环中的指针,因此在循环之后它将不再指向malloc调用返回的相同位置.

这样看一下,在调用malloc指针后,内存看起来像这样:

result
|
v
+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+

在循环的第一次迭代之后,它将如下所示:

    result
    |
    v
+---+---+---+---+---+---+---+---+---+---+---+---+
| H |   |   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+

循环完成后,它将如下所示

                                                 result
                                                 |
                                                 v
+---+---+---+---+---+---+---+---+---+---+---+----+
| H | e | l | l | o |   | W | o | r | l | d | \0 |
+---+---+---+---+---+---+---+---+---+---+---+----+

进行复制,但指针不再指向原始位置.

[注意:在复制之前,分配的内存malloc不会是"空"或以任何方式初始化,为了简单起见,我只是在这里展示它.

  • 也许我们应该添加使用`result`指针,这样OP甚至不能再"释放"它了; 这就是为什么大多数情况下我更喜欢数组符号,它也更具可读性 (3认同)