我试图从字符数组复制到字符指针.我的代码:
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)
谁能解释这种行为?
我们只需使用strcpy函数将数组复制到指针中.
char str[] = "Hello World";
char *result = (char *)malloc(strlen(str)+1);
strcpy(result,str);
Run Code Online (Sandbox Code Playgroud)
在您的第一个片段中,您修改循环中的指针,因此在循环之后它将不再指向malloc调用返回的相同位置.
这样看一下,在调用malloc指针后,内存看起来像这样:
result | v +---+---+---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+
在循环的第一次迭代之后,它将如下所示:
result
|
v
+---+---+---+---+---+---+---+---+---+---+---+---+
| H | | | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+---+---+
循环完成后,它将如下所示
result
|
v
+---+---+---+---+---+---+---+---+---+---+---+----+
| H | e | l | l | o | | W | o | r | l | d | \0 |
+---+---+---+---+---+---+---+---+---+---+---+----+
进行复制,但指针不再指向原始位置.
[注意:在复制之前,分配的内存malloc不会是"空"或以任何方式初始化,为了简单起见,我只是在这里展示它.
| 归档时间: |
|
| 查看次数: |
21049 次 |
| 最近记录: |