构建代码:" strlwr"通过指针

时间:2014-06-09 13:52:54

标签: c++ visual-studio-2010 visual-c++

有人可以告诉我这段代码的不同之处:

char *s1 ="Con Chim Non";

和这一个:

char *s=new char[100];
gets(s);

然后,我添加了单词:"Con Chim Non"

之后,我构建了一个更改指针值的代码。在第一个代码中,我遇到了有关该地址的问题。第二个是对的。这是我的代码:

void Strlwr(char *s)
{
    if (s == NULL )
        return ;
    for (int i = 0; s[i] != '\0'; ++i)
    {
        if ( s[i] <= 'Z' && s[i] >= 'A')
            s[i] = s[i]+32;
    }
}

有人可以告诉我为什么第一个是错的。

1 个答案:

答案 0 :(得分:1)

第一个例子:

char *s1 ="Con Chim Non";

指针声明为文本文字,这是常量。 无法修改文字文字。

正确的语法是:

char const * s1 = "Con Chim Non";

请注意const

在你的第二个例子中,你要声明,在动态内存中保留100个字符的内存:

char *s=new char[100];
gets(s);

然后,您将从输入中获取未知数量字符并将其放入数组中。

由于您使用C ++语言进行编程,因此应避免使用此类文本处理并使用更安全的std::string数据类型。

例如,gets函数会将未知数量的字符从控制台读入数组。如果您声明一个包含4个字符的数组并输入10,那么您将拥有buffer overflow非常糟糕

std::string类将根据需要进行扩展以包含内容。它还将管理内存重新分配。