我正在学习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/

10-11 01:03