出于某些奇怪的原因,当我将长度传递为12时,它会继续创建未初始化的值,它会创建一个约16的数组,并将其余的不需要的废话存储起来。有人知道为什么这行不通吗?这是明天要交的作业,这是我的最后一个问题。谢谢您的任何帮助。
char * convertToUppercase (char* toUpSize, int length) {
std::cout << "ToUpsize: " << toUpSize << "\nLength: " << length << "\n";
char * upsized = new char[length];
for (int i = 0; toUpSize[i]; i++) {
upsized[i] = toupper(toUpSize[i]);
}
return upsized;
}
最佳答案
我认为您可以在for循环中编写i< length
,而不是将toUpSize[i]
编写为:
for (int i = 0; i < length; i++) {
upsized[i] = toupper(toUpSize[i]);
}
如果要在
toUpSize
循环条件中编写toUpSize[i]
,则可以将for
传递为以空终止的字符串。如果这样做,则必须在退出循环后将\0
放在upsized
的末尾,即i
为toUpSize[i]
的索引\0
处。为此,您已经将i
的定义移至for
循环之外,以便在退出循环后可以使用它。空终止的字符串是在字符串末尾带有
\0
字符的字符串。char x[] = {'N', 'a', 'w', 'a', 'z' };
char y[] = {'N', 'a', 'w', 'a', 'z', '\0' };
在这里,
x
不是以空值结尾的字符串,但是y
是以空值结尾的字符串。如果字符串定义为:
char z[] = "Nawaz";
const char *s = "Nawaz";
此处
z
和s
是空终止的字符串,因为它们都是从“Nawaz”(空终止的字符串)创建的。请注意,sizeof("Nawaz")
将返回6
而不是5
,正是因为字符串的末尾有一个\0
。