如何为字符串的“数组”适当地动态分配内存

问题描述 投票:-1回答:1

所以,我只是在弄乱一些代码,询问用户他们想雇用多少人员。输入他们想要的数字后,我启动3个指针。我关注的指针是字符串指针“ employee_Names”。初始化之后,我尝试根据用户输入向指针“ employee_Names”动态分配所需的适当内存量。

我认为我的语法对该部分有用,但是当我尝试将信息实际存储在分配的内存中时,就会出现问题。如代码中所示,我尝试直接将employee_Names [0]设置为等于名称,但这会给我带来错误。

personnel = requested_service() - 1;

string  *employee_Names;
int *employee_Ages;
char *employee_Company;

employee_Names = (string*)malloc(personnel);

employee_Names[0] = "Bahn";

printf("Employee number 1 is: %s", employee_Names[0]);

我真的很喜欢启示。让我知道是否需要在一个区域中更加具体,或者是否需要查看更多代码。

c++ string malloc dynamic-memory-allocation
1个回答
0
投票

问题是您使用了malloc()。您为personnelbytes而不是strings个分配内存。而且,您根本不会在该内存中构造任何string对象。

如果可以避免的话,请不要在C ++中完全使用malloc()。请改用newnew[],例如:

#include <string>
#include <cstdio>

personnel = ...;

std::string *employee_Names;
...

employee_Names = new std::string[personnel];
employee_Names[0] = "Bahn";
...

std::printf("Employee number 1 is: %s", employee_Names[0].c_str());

...

delete[] employee_Names;

也就是说,您确实应该直接使用std::vector而不是new[]。另外,使用std::cout代替printf()

#include <iostream>
#include <vector>
#include <string>

personnel = ...;

std::vector<std::string> employee_Names(personnel);
...

employee_Names[0] = "Bahn";
...

std::cout << "Employee number 1 is: " << employee_Names[0];

最后,给定变量名,请考虑使用classstruct将员工的详细信息分组在一起:

#include <iostream>
#include <vector>
#include <string>

struct Employee
{
    std::string Name;
    int Age;
    char Company;
};

...

personnel = ...;

std::vector<Employee> employees(personnel);

employees[0].Name = "Bahn";
...

std::cout << "Employee number 1 is: " << employees[0].Name;
© www.soinside.com 2019 - 2024. All rights reserved.