所以,我只是在弄乱一些代码,询问用户他们想雇用多少人员。输入他们想要的数字后,我启动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]);
我真的很喜欢启示。让我知道是否需要在一个区域中更加具体,或者是否需要查看更多代码。
问题是您使用了malloc()
。您为personnel
个bytes而不是strings个分配内存。而且,您根本不会在该内存中构造任何string
对象。
如果可以避免的话,请不要在C ++中完全使用malloc()
。请改用new
和new[]
,例如:
#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];
最后,给定变量名,请考虑使用class
或struct
将员工的详细信息分组在一起:
#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;