-3

我的字符指针指向一些内存说“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
4

2 回答 2

5
char *B ="";

这意味着 thatB是一个指针,并且您已指向常量 string ""

A字符串复制到Bwithstrcpy(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];
于 2013-03-11T09:26:37.530 回答
0

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

char * strcpy ( char * 目标, const char * 源);

但是当你执行它时你会遇到分段错误...bcoz B 指向 no 首先你必须在 B 指向的地方分配内存块,通过 B=malloc(6);

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

B = malloc(6);

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

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

于 2013-03-11T09:27:33.790 回答