在struct中为char *赋值

时间:2014-12-09 12:19:21

标签: c++ c pointers struct

我的代码有问题我无法将字符串值分配给结构中的char *。有人能告诉我我的代码有什么问题吗?为什么?

#include <iostream>
using namespace std;

typedef struct{
char* name;
char* city;
int age;
} person;
void main()
{
person * user;
user = (person*)malloc(sizeof(person*));

cout << "Please fill in the user info.." << endl << "Name: ";
cin >> user->name;
cout << "Age: ";
cin >> user->age;
cout << "City";
cin >> user->city;

cout << "The user info is:" << endl << "Name: " << user->name << endl << "Age: " << user->age << endl << "City: " << user->city << endl;
system("pause");
}

非常感谢。

4 个答案:

答案 0 :(得分:3)

你的代码是C和C ++风格的可怕组合,正如Mike的评论所说,选择一种语言并正确使用它。

#include <iostream>
#include <string>
using namespace std;

struct person {
  string name;
  string city;
  int age;
};

int main()
{
  person user;

  cout << "Please fill in the user info.." << endl << "Name: ";
  cin >> user.name;
  cout << "Age: ";
  cin >> user.age;
  cout << "City";
  cin >> user.city;

  cout << "The user info is:\n" << "Name: " << user.name << "\nAge: " << user.age << "\nCity: " << user.city << endl;
  system("pause");
}
当你不需要时,不要动态分配(然后没有购买错误内存量的风险,也没有没有为字符串分配内存的风险,这两者都是你在原计划中犯的错误。)

main必须返回int而不是void

在C ++中不需要

typedef struct {...} x;,只需说struct x {...};

Don't overuse endl

答案 1 :(得分:2)

你用两种不同的语言标记了这个问题,似乎是在两者的可怕混合中进行编码。你应该选择一种语言并坚持下去。

如果这是C ++,那么使用标准库:

#include <string>
#include <iostream>

struct person {
    std::string name;
    std::string city;
    int age;
};

int main() {    // not void
    person user;
    // ...
    std::cin >> user.name;
    // ...
}

如果它意味着是C,那么你需要为字符串分配内存。从堆中分配它们:

person user;
user.name = malloc(MAX_NAME_SIZE);
user.city = malloc(MAX_CITY_SIZE);

或将它们嵌入结构中:

typedef struct {
    char name[MAX_NAME_SIZE];
    char city[MAX_NAME_SIZE];
    int name;
} person;

并在从输入读取时注意不要溢出这些固定大小的缓冲区。

如果你真的想因某种原因使用malloc作为结构本身,那么为结构分配足够的东西,而不只是指针:

user = malloc(sizeof(person));

答案 2 :(得分:0)

malloc(sizeof(person));

这将创建用于保存2个char *和1个int。

的内存

您还需要为错过的struct中的char * s分配内存。

答案 3 :(得分:0)

我不知道c++,但如果您选择坚持c,则user->name未分配内存,user->city。您需要使用具有适当大小的malloc()来为指针变量分配内存,然后使用它们来存储值。

另外,

user = (person*)malloc(sizeof(person*));

应该是

user = malloc(sizeof(*user));

然后,void main()应更改为int main(),并需要添加return 0。将退出状态发送回shell是一种更好的做法。


注意:通过查看

的用法
#include <iostream>
using namespace std;

它看起来更像c++,但IMO,逻辑应该是相同的。