c++ - 动态字符数组没有给出正确的字符串长度?

标签 c++ memory-management char

我想要一个长度等于循环迭代的动态字符数组。

char* output;
for (short i=0; i<2; i++){
    output = new char[i+1];
    printf("string length: %d\n",strlen(output));
    delete[] output;
}

但是 strlen 返回 16,我希望它是 1 和 2。

最佳答案

output 指向的新分配内存未初始化:它可能有任何内容。

strlen 要求它的参数是一个指向空终止字符串的指针,output 不是,因为它还没有被初始化。调用 strlen(output) 会导致您的程序表现出未定义的行为,因为它读取了这个未初始化的内存。任何结果都是可能的。

关于c++ - 动态字符数组没有给出正确的字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942565/

相关文章:

c - 求char**形式的字符串数组的长度?

char * 变量地址 vs. char [] 变量地址

c++ - 使用 SSE 计算无符号整数之间的绝对差

c++ - 如何在 Poco C++ 中复制缓冲区字节 block ?

c - 格式化 C 程序

c - 分配的变量不可访问

.net - 销毁所有对象还是让垃圾收集器完成工作更好?

C++ 线程和变量

c++ - C++ 容器上的通用操作

c++ - 在 for 循环中调用一个函数来删除 vector (或列表)中的元素