我正在尝试从字符数组复制到字符指针。 我的代码:
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++;
}
任何人都可以解释这种行为吗?
答案 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);