出于某些奇怪的原因,当我将长度传递为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的末尾,即itoUpSize[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";

此处zs是空终止的字符串,因为它们都是从“Nawaz”(空终止的字符串)创建的。请注意,sizeof("Nawaz")将返回6而不是5,正是因为字符串的末尾有一个\0

09-27 08:07