int main(int argc,char argv[]) {
//MessageBox(NULL,TEXT(“HELLO”),TEXT(“First Window”),MB_OK);
char
m = “china”;
char m1[] = “china”;
printf(“%s\n%s”,m,m1);
system(“pause”);
}

字符数组

char m1[] = “china”;

00D8179F mov eax,dword ptr [string “china” (0D86B30h)]
00D817A4 mov dword ptr [m1],eax
00D817A7 mov cx,word ptr ds:[0D86B34h]
00D817AE mov word ptr [ebp-18h],cx

以字符数组形式创建的字符串,实际上是从字符串常量池中复制了一个副本,所以修改字符数组的内容时,只是修改的自己的副本,并不会影响到常量池中的字符串

指向字符串的指针

char* m = “china”;
00D81798 mov dword ptr [m],offset string “china” (0D86B30h)

  1. m = “I love C!”; //正确 可以更改指针变量本身的指向
  2. m[3] = ‘P’; //错误 不能修改字符串中的字符

那么我们可以使用 malloc 动态分配内存来解决