从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
char *B ="";
这意味着B
是一个指针,你已经指出了常量字符串""
。
的A
字符串到B
与strcpy(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];
+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都将指向两个不同的位置。
@Alex,同意......但目的是理解这个概念 – 2013-03-11 09:33:38
那么,你可以很容易地检查这一点。 – Maroun 2013-03-11 09:13:51
指针“B”指的是只读内存位置,因此您将无法复制该字符串。检查这个问题http://stackoverflow.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
' char * B'是只读的,你必须'char B [6]'或'char * b = malloc(strlen(a)+ 1)'为了得到拷贝空间 – 2013-03-11 09:18:58