我的字符指针指向一些内存,说“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
最佳答案
char *B ="";
这意味着 B
是一个指针,并且您指向常量字符串 ""
。
复制A
字符串到 B
与 strcpy(B,A);
这意味着您正在复制 A
的字符串到内存B
指向(并且 B
指向常量字符串),因此这将导致未定义的行为
为了避免此类问题,B 指针应该指向内存空间,例如您可以将 B 指向使用 malloc 分配的动态内存空间:
char *B = malloc(10*sizeof(char));
您可以使用以下方法使内存大小与字符串大小完全相同:
char *B = malloc((strlen(A)+1)*sizeof(char));
+1 表示字符串的空终止符
避免该问题的另一种解决方案:将 B 定义为字符数组而不是指针:
char B[10];
关于从 char * 复制到 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334736/