gpt4 book ai didi

c++ - 使用指针符号循环遍历数组

转载 作者:行者123 更新时间:2023-11-28 05:40:21 26 4
gpt4 key购买 nike

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

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

关于c++ - 使用指针符号循环遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37243931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com