我正在学习C ++的指针,虽然不像我想的那样清晰,但是我正在慢慢到达那里。
我的目标是使用指针符号编写一个函数,以遍历数组并更改输入的大小写。
例如("ab7d") myToUpper() -> AB7D
这是我实现这一目标的想法。
void myToUpperCase(const char *source, char *dest)
{
for (int i = 0; *(source + i) != '\0'; i++)
{
*(dest + i) = toupper(* (source + i));
}
}
结果
("ab7d") myToUpper() -> AB7D\377
有人介意解释
\377
被添加到输出中的原因吗?显然,我在这里只是在查找要更改的源,而未在输出中添加任何其他内容。谢谢
最佳答案
字符串是char数组,带有'\ 0'字节作为终止字符。
您的代码正在复制除最后一个'\ 0'字节以外的任何内容。
因此,如果您更改代码以\ 0'终止dest
,则一切都很好。 (您正在观察的'\ 377'恰好是dest
中该位置发生的字节。)
例如。您可以将代码更改为:
void myToUpperCase(const char *source, char *dest)
{
for (int i = 0; ; i++)
{
if (*(source + i) == '\\0')
{
*(dest + i) = *(source + i);
break;
}
else
{
*(dest + i) = toupper(* (source + i));
}
}
您也可以根据以下方法尝试另一种没有索引
i
的解决方案:while(*source++ = *dest++) /* empty body */;
(Purists(有效地)可能会在循环条件下使用副作用来标记为难闻的气味!但它只应该给出一个主意...。)
关于c++ - 用指针表示法遍历数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37243931/