循环使用指针表示法的数组

时间:2016-05-15 21:39:06

标签: c++ arrays pointers

我正在学习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添加到输出中的原因进行解释,显然我只是在这里找到要更改的源,而没有其他任何内容添加到输出中。

由于

1 个答案:

答案 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 */;

(纯粹主义者(有效地)可能会在循环条件下使用副作用标记为难闻的气味!但它应该给出一个想法....)