首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文件中读取单词和数字(c++)

从文本文件中读取单词和数字(c++)
EN

Stack Overflow用户
提问于 2019-02-10 00:53:58
回答 1查看 356关注 0票数 1

我有一个格式如下的文本:

代码语言:javascript
复制
NAME(char) ID(int) MARK(int)

例如:

代码语言:javascript
复制
JOSH 1234 100
SARA 5678 90
..
..

我想读取这个文件,输入一个学生结构的参数,然后在屏幕上打印出来(你可以在代码中看到)。

我的问题是,我似乎不能正确地读取名称,这一行:while (file >> id >> word >> grade) -得到了正确的idmark,但变量word (即char *)中的名称得到了像0x000a8520这样的十六进制地址。

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
struct Student
{
    int id;
    char * name = new char [25];
    int mark;
};
int makeStudentsArr(Student * ptr, char * address);
void printArr(Student * ptr, int number);
int main() {
    char * address = new char[26];
    Student * myptr = new Student[50];
    cin >> address;
    int count;
    count = makeStudentsArr(myptr, address);
    printArr(myptr, count);
    system("pause");
    return 0;
}

int makeStudentsArr(Student * ptr, char * address) {
    ifstream file;
    file.open(address);
    char * word = new char[25];
    int id,grade;
    int index = 0;
    while (file >> id >> word >> grade) {
        ptr[index].id = id;
        ptr[index].name = word;
        ptr[index].mark = grade;
        index++;
    }

    return index;
}
void printArr(Student * ptr, int number) {
    for (int i = 0;i < number;i++) {
        cout << "name: " << (ptr + i)->name << " id: " << (ptr + i)->id << " mark: " << (ptr + i)->mark << endl;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-02-10 01:07:37

更改此设置:

代码语言:javascript
复制
ptr[index].name = word;

要这样做:

代码语言:javascript
复制
strcpy(ptr[index].name, word);

因为第一个复制指针,而第二个复制实际的字符串(指针指向的地方)!

但是,您的程序不会delete您使用new动态分配的内存,这会导致内存泄漏。

如果您使用std::string而不是C字符串,这将会容易得多。此外,如果您使用std::vector而不是普通的C数组,这也会更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54608426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档