【发布时间】:2015-09-12 14:41:33
【问题描述】:
我已经用C编写了以下代码。我需要了解字符指针通过malloc()动态分配内存后如何执行字符串复制操作。
我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFSZ 20
int main()
{
char *name = NULL;
char my_name[BUFFSZ] ;
memset(my_name,0,BUFFSZ);
strcpy(my_name, "vinothkumarsaradavallivaradathirupathi");
printf("string copied is %s\n",my_name);
if ((name = malloc(1 + strlen(my_name)+1)) != NULL)
strcpy(name,my_name);
printf("Name is %s\n",name);
free(name);
name = NULL;
return 0;
}
实际输出:
string copied is vinothkumarsaradavallivaradathirupathi
Name is vinothkumarsaradavalliva��
根据代码,我期待下面的输出,但上面只有一个。如果有人清楚地解释这一点会很有帮助。
预期输出:
string copied is vinothkumarsaradaval
Name is vinothkumarsaradaval
当我在 GDB 中运行这段代码时,我得到了以下输出:
Breakpoint 2, main () at first_pgm.c:12
12 memset(my_name,0,BUFFSZ);
(gdb) n
14 strcpy(my_name, "vinothkumarsaradavallivaradathirupathi");
(gdb) p name
$1 = 0x0
(gdb) p my_name
$2 = '\000' <repeats 19 times>
(gdb) n
Breakpoint 3, main () at first_pgm.c:15
15 printf("string copied is %s\n",my_name);
(gdb) p my_name
$3 = "vinothkumarsaradaval"
(gdb) n
string copied is vinothkumarsaradavallivaradathirupathi
这里,为什么“$3”和“复制的字符串”输出是冲突的?
【问题讨论】:
-
你知道你正在将 39 个字节复制到一个只有 20 个元素的数组中吗?
-
是的,我故意编程来理解内存管理
-
为什么这会帮助您理解内存管理?这只会导致不确定的行为,因此它不会保持一致,因此对学习目的没有用。
标签: c string pointers dynamic-memory-allocation strcpy