繁体   English   中英

新的char(size)在C ++中是什么意思?

[英]What does new char(size) mean in C++?

通过new (在C ++中)分配缓冲区时,我错误地写道:

int size = 1024 * 1024;
char *buf = new char(size);

而不是普通的语法

char *buf = new char[size];

但是,使用此buf变量时,代码确实被编译并导致奇怪的崩溃。 显然,分配了八个字节的缓冲区。

我想知道new char(size)的含义。

char *buf = new char(size);

它仅分配sizeof(char)个字节,并使用size对其进行初始化- 大致等效于此:

char *__internal_buf = new char; //1 byte only

*__internal_buf = size; //or static_cast<char>(size);

 char *buf = __internal_buf; 

这与这两个相同:

 char x(65);  //y is single element initialized to be 'A'. as 65 is 'A'
 char y[65];  //y is an array of size 65

希望能有所帮助。

这意味着您为单个char分配内存,并使用整数size对其进行初始化。 就您而言, size不适合char 如果char恰好是带符号的,则整数size将转换为char ,但是结果是实现定义的。 如果charunsigned ,则int包装char表示的最大值(通常为255)。

非指针也存在类似的语法:

int x(10); // initialize x with 10

要么

char c('a'); // initializes c with 'a'

空,但这是一个更好的示例:

#include <iostream>
using namespace std;

int main() {
    int size = 'A';
    char *buf = new char(size);

    cout << *buf;
}

打印出A

NULL的原因:1024 * 1024 = 0x100000。 最后一个字节进入char。 字符为空。 实际上,我在一段时间内看到的效率最低的null终止字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM