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

标签 c++

我有这样格式的文本:

NAME(char) ID(int) MARK(int)

例如:

JOSH 1234 100
SARA 5678 90
..
..

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

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

#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;
    }
}

最佳答案

改变这个:

ptr[index].name = word;

为此:

strcpy(ptr[index].name, word);

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


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

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

关于c++ - 从文本文件中读取单词和数字 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54608426/

相关文章:

c++ - 派生类C++访问派生类的基类

c++ - 链接器错误 : Statically Linking of Boost Serialization Library

c++ - 在启动时暂停 Windows 10 应用商店应用程序

c++ - setter和getter vs FRIEND_TEST

c++ - 播放前 SetPosition 后 EVR 在 Window 上显示少量黑框

c++ - 包装到具有可变数量参数的函数

c++ - std::vector::reserve 是否保证在这种情况下实现不会使迭代器无效?

c++ - 是否可以手动定义枚举类的转换?

c++ - 在增量循环的情况下如何使用 SSE?

c++ - 库上的静态变量初始化