我的角色指针指向一些记忆中说“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
答案 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都指向两个不同的位置。