指向数组C++的指针值

指向数组C++的指针值,c++,C++,我试图在Tran类中将指针数组设置为char数组,但是它只应用字符串的第一个字母。我尝试了许多其他方法,但无法将整个字符串输入到名称中 编辑:name是一个私有变量 字符名[MAX_name+1] 尝试使用cout输出它 这些是虫子。NULL表示指针。名称[0]和名称[0]都是字符。它可以一个接一个地工作,我的意思是在某些系统上,它会将第一个字符指定为null终止符字符,因为0既是null指针常量,也是整数文本,因此可以转换为char,null可以定义为0。但是NULL也可以定义为nullptr

我试图在Tran类中将指针数组设置为char数组,但是它只应用字符串的第一个字母。我尝试了许多其他方法,但无法将整个字符串输入到名称中

编辑:name是一个私有变量

字符名[MAX_name+1]

尝试使用cout输出它 这些是虫子。NULL表示指针。名称[0]和名称[0]都是字符。它可以一个接一个地工作,我的意思是在某些系统上,它会将第一个字符指定为null终止符字符,因为0既是null指针常量,也是整数文本,因此可以转换为char,null可以定义为0。但是NULL也可以定义为nullptr,在这种情况下,程序将是格式错误的

请改用名称[0]='\0'

但是,它只应用字符串的第一个字母

嗯,您只指定第一个字符,因此这是意料之中的

如果要复制整个字符串,则需要指定所有字符。这可以通过循环实现。不过,复制字符串有一些标准函数;您可以使用std::strncpy


也就是说,等长数组通常是有问题的,因为几乎不可能正确预测所需的最大大小。std::string是一种更健壮的替代方法。

您试图将常量char*分配给char*常量的根本问题。申报时

char name[MAX_NAME + 1];
您正在声明一个包含可变字符数据char*const的常量内存地址。向函数传递常量char*时,传递的是包含常量数据的可变指针。这将无法编译。您应该使用以下命令执行char数组的深度复制:

strcpy_s(dst, buffer_size, src);
此复制函数将确保数组不会溢出,并且以null结尾

为了能够将指针分配给char数组,需要在堆上使用

char* name = new char[MAX_NAME + 1];

这将允许在以后为其分配char*或char*常量。不过,此时您需要动态管理内存,我建议您不要这样做,因为一旦char*const namee超出范围,传递Birth Tran将导致未定义的行为。

您有什么理由希望使用char数组而不是std::string?@infinitezero可能是C兼容性?我不知道。@infinitezero代码要求我使用char arraysAnyways,您要做的是将指针地址复制到指针。当前您取消引用第一个字符的指针名称,并将其保存在数组的第一个索引位置。@infinitezero抱歉,我如何才能做到这一点?我刚试过几次,但都会出错,因为这是一个常量
char name[MAX_NAME + 1];
strcpy_s(dst, buffer_size, src);
char* name = new char[MAX_NAME + 1];