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

时间:2015-01-22 11:21:43

标签: c

我正在尝试从字符数组复制到字符指针。 我的代码:

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

以上代码无效,代码正常工作

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

任何人都可以解释这种行为吗?

6 个答案:

答案 0 :(得分:8)

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

     char str[] = "Hello World";
     char *result = (char *)malloc(strlen(str)+1);
     strcpy(result,str);

答案 1 :(得分:6)

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

以这种方式看待它,在调用malloc之后指针和内存看起来像这样:

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

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

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

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

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

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

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

答案 2 :(得分:3)

试试这段代码.. 使用strcpy()函数。

char str[] = "Hello World";
char *result = (char *)malloc(strlen(str)+1);
strcpy(result,str);

答案 3 :(得分:2)

您已经为该指针分配了内存,因此您只需使用strcpy()函数来复制字符

 strcpy(result,str);

str复制到结果。

答案 4 :(得分:1)

在我看来,没有实际的理由来修改你的指针(就像你在第一个片段中所做的那样),你可以添加一个偏移量(就像你在第二个片段中那样)。它只是使代码更难以正确。

对于第一个代码段,请尝试保存原始result,如下所示:

char *result = ...
char *start = result;

在循环之后,尝试打印start,而不是result。它应该像你期望的那样指向新复制的字符串。

答案 5 :(得分:0)

您的第一个代码段完全复制了字符串,但在此过程中您移动了已分配的字符指针。如果必须将其初始值保存在某个临时指针

char str[] = "Hello World";
char *result = (char *)malloc(strlen(str)+1);
char *tmp = result;
int index=0;
while(index <= strlen(str))
{
  *result = str[index];
  result++;
  index++;
}
printf("%s\n", tmp);