从char *复制到char数组

时间:2013-03-11 09:11:07

标签: c visual-c++

我的角色指针指向一些记忆中说“Hello world”,我想将其与其他指针进行比较,之后想要做strcpy。我认为可以使用char *

char *A ="hello"
char *B ="";

strcmp(A,B); // this compares correctly because B points to diff string
strcpy(B,A); // will this statment copies the string alone or both will point to same memory

2 个答案:

答案 0 :(得分:5)

char *B ="";

这意味着B是一个指针,你已指向常量字符串""

使用A

B字符串复制到strcpy(B,A);

这意味着您正在将A的字符串复制到B所指向的内存(并且B指向一个常量字符串),这将导致未定义的行为

为了避免这样的问题,B指针应该指向一个内存空间,例如你可以将B指向一个用malloc分配的动态内存空间:

char *B = malloc(10*sizeof(char));

你可以使内存的大小与A字符串大小相同:

char *B = malloc((strlen(A)+1)*sizeof(char));

+1表示字符串

的空终止符

避免此问题的另一种解决方案:将B定义为字符数组而不是指针:

char B[10];

答案 1 :(得分:0)

您的代码将成功编译,因为strcpy需要destination和source char *作为参数。

char * strcpy(char * destination,const char * source);

但执行时会出现分段错误... bcoz B指向no,首先必须分配B指向的内存块,B = malloc(6);

char *A ="hello";
char *B;

B = malloc(6);

strcmp(A,B);
strcpy(B,A);

一旦你这样做,是strcpy会复制一个新的字符串。 A和B都指向两个不同的位置。