我正在学习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
添加到输出中的原因进行解释,显然我只是在这里找到要更改的源,而没有其他任何内容添加到输出中。
由于
答案 0 :(得分:1)
字符串是char数组,带有' \ 0' byte作为终止字符。
您的代码正在复制除最终的' \ 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 */;
(纯粹主义者(有效地)可能会在循环条件下使用副作用标记为难闻的气味!但它应该给出一个想法....)