为什么tolower()会影响其他字符串?

sus*_*i33 1 c

为什么这个程序的输出始终是:

example 

example
Run Code Online (Sandbox Code Playgroud)

如果我用for循环中的第二个更改第一行,那么输出将如下所示:

EXAMPLE

EXAMPLE
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

string key = "EXAmple";
string ukey = key; 
string lkey = key;

for (int i = 0; i < strlen(key); i++)
{
  ukey[i] = toupper(key[i]); 
  lkey[i] = tolower(key[i]);
}       

printf("%s\n", ukey);
printf("%s\n", lkey);
Run Code Online (Sandbox Code Playgroud)

Cod*_*dor 5

string很可能是定义char*.因此,key,ukeylkey实际上指点指点完全相同的内存; 它们只是同一个东西的别名.