【问题标题】:Why tolower() affecting other string?为什么 tolow() 会影响其他字符串?
【发布时间】:2014-12-12 04:23:34
【问题描述】:

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

example 

example

如果我在 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);

【问题讨论】:

  • AFAIK,string 不是 C 中的定义术语。因此,答案将取决于它是如何定义的。
  • 发布string的定义。是char *吗?
  • 某处有typedef char* string;吗?或者更糟糕的是,#define string char*?它可能在你#include的头文件中。
  • 我在标题中有#include &lt;string.h&gt;。我是菜鸟程序员,我不知道如何回答你的问题

标签: c


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

听起来您想使用 strcpy() 而不是普通赋值,或者您的自定义类型 string 的等效项。

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

【讨论】:

  • 那得看string的定义吧?
  • 是的。我在做一个假设,我想。固定。
猜你喜欢
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多