有人可以告诉我这段代码的不同之处:
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;
}
}
有人可以告诉我为什么第一个是错的。
答案 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
类将根据需要进行扩展以包含内容。它还将管理内存重新分配。