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

时间:2014-12-11 19:51:26

标签: c

为什么输出这个程序总是:

example 

example

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

EXAMPLE

EXAMPLE

我做错了什么?

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);

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

这里,ukeylkey可能都是指向内存中同一数组的指针。在C中,数组引用只是指向数组中第一项的指针,并且使用[]运算符只返回数组中每个位置的值(取消引用)。

所以,ukey和lkey都指的是完全相同的字符。

您希望使用strcpy()代替普通作业,或使用自定义类型string的等效作品。

或者使用C ++及其字符串类型。