从char *复制到char arrray

问题描述:

我的字符指针指向一些存储器,说“Hello world”,我想将它与其他指针进行比较,然后想要执行strcpy。我坐下可能的字符做*从char *复制到char arrray

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

那么,你可以很容易地检查这一点。 – Maroun 2013-03-11 09:13:51

+0

指针“B”指的是只读内存位置,因此您将无法复制该字符串。检查这个问题http://*.com/questions/4051347/in-c-can-i-initialize-a-string-in-a-pointer-declaration-the-same-way-i-can-init – Ifthikhan 2013-03-11 09:18:41

+0

' char * B'是只读的,你必须'char B [6]'或'char * b = malloc(strlen(a)+ 1)'为了得到拷贝空间 – 2013-03-11 09:18:58

char *B =""; 

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

A字符串到Bstrcpy(B,A);

这意味着你要复制A到的B指向内存中的串(和B指向一个常量字符串),因此这将导致复制未定义行为

为了避免这样的问题在B指针应指出,例如存储空间,您可以B点到使用malloc分配的动态内存空间:

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

,并可以使内存的大小exactely相同的字符串大小为:

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

+1是为字符串

另一种解决方案,以避免空终止符问题:将B定义为字符数组而不是指针:

char B[10]; 
+0

+1用于指出未定义的行为。 – 2013-03-11 10:21:24

您的代码将成功编译为strcpy需要的目标和源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都将指向两个不同的位置。

+0

@Alex,同意......但目的是理解这个概念 – 2013-03-11 09:33:38