arrays - 尝试使用 cstrings 读取文本文件
问题描述
我正在尝试从“;”中提取数据 使用 cstrings 分隔文本文件。我不能在这个作业中使用字符串。我的程序可以正常打开文件并读取前 3 个字段,然后输入流进入失败状态。此外,使用 gdb,读入的第一个 var 的值 info[i].songName 显示歌曲名称已分配给 var,但末尾附加了 93 个字节的垃圾数据。我确定它与将 cstring 声明为 100 个字符有关,但我不确定如何处理源文件中每个新数据行的自定义数组大小。该程序编译但当我尝试运行它时抛出一个分段错误错误,可能是由于导致数组超出范围的原因。
这是源文件的第一行:
Divine;Supreme Beings of Leisure;4;26;Divine Operating System
这是 song.h 中结构的定义
5 struct song {
6 char song_Name[100];
7 int min;
8 int sec;
9 char album[100];
10 char artist[100];
11 };
...这是 main.cpp
1 //This program tracks a text file list of songs and prompts user to add, delete,
2 //search the list.
3
4 #include "main.h"
5
6
7
8 int main() {
9
10 int size = 0;
11 int i = 0;
12 ifstream infile;
13 song info[size];
14
15 infile.open("songs.txt");
16 while (!infile.is_open()) {
17 cout << "File not found" << endl;
18 return 1;
19 }
20
21 while (!infile.eof()) {
22 infile.getline(info[i].song_Name, 100, ';');
23 infile.ignore();
24 infile.getline(info[i].artist,100,';');
25 infile >> info[i].min;
26 infile.clear();
27 infile >> info[i].sec;
28 infile.clear();
29 infile.getline(info[i].album, 100, ';');
30 i++;
31 }
32
33 for (i = 0; i < 7; i++) {
34 cout << info[i].song_Name << " "
35 << info[i].min << " " << info[i].sec << " "
36 << info[i].album << " " << info[i].artist << endl;
37 }
38
39
40
41 song add (char songN[100],int min, int sec, char album[100], char artist[]);
42 return 0;
并且...最后...这是 gdb 报告的第一行的 vars 值...
Breakpoint 1, main () at main.cpp:21
21 while (!infile.eof()) {
(gdb) n
22 infile.getline(info[i].song_Name, 100, ';');
(gdb) n
23 infile.getline(info[i].artist,100,';');
(gdb) n
24 infile >> info[i].min;
(gdb) n
25 infile.clear();
(gdb) n
26 infile.clear();
(gdb) n
27 infile >> info[i].sec;
(gdb) n
28 infile.clear();
(gdb) n
29 infile.clear();
(gdb) n
30 infile.getline(info[i].album, 100, ';');
(gdb) n
31 i++;
(gdb) p info[i].song_Name
$1 = "Divine\000\000\243\r@\000\000\000\000\000\001\000\000\000\000\000\000\000\320\336\377\377\377\177\000\000\020\062\335\367\377\177\000\000\001\000\000\000\000\000\000\000\030\061\335\367\377\177\000\000`Na\000\000\000\000\000\203Na\000\000\000\000\000\232Oa", '\000' <repeats 24 times>
(gdb) p info[i].min
$2 = 4
(gdb) p info[i].sec
$3 = 0
(gdb) p info[i].album
$4 = "\000\177", '\000' <repeats 42 times>, " La\000\000\000\000\000\001\000\000\000\000\000\000\000\b", '\000' <repeats 31 times>, "`Na\000\000\000\000"
(gdb)
编辑:将 song.h 更改为:
struct song {
6 int min;
7 int sec;
8 char song_Name[];
9 char album[];
10 char artist[];
11 };
...已经消除了 char vars 的问题。song_Name 现在只存储“;”之前的行中的字符 分隔符。但是第 24 行 main 中的代码以某种方式破坏了程序。它仍然可以编译,但仍然会引发分段错误,并且一次单步执行代码显示它在第 24 行中断。
解决方案
推荐阅读
- python - 我不能用 dict 替换列值
- eclipse - Eclipse IDE:在工作集中按文件名过滤文件
- java - 为什么我们不能增加 asList() 返回的 ArrayList 对象的大小?
- java - 如何在 Java 中以特定方式对 JSON 列号进行排序
- node.js - 部署后如何解决heroku中的page not found错误
- python - 使用模式 coverage-reports/coverage.xml 未找到 sonar.python.coverage.reportPaths 的报告
- android - 两行约束布局
- python - 当我试图通过 BeautifulSoup 获取它时,它变成空的
我正在尝试从网站解析表格
https://www.kp.ru/best/kazan/abiturient_2018/ivmit/
。Chrome 的 DevTools 向我展示了该表:<div class="t431__table-wapper" data-auto-correct-mobile-width="false"> <tab
- python - .csv 加载重复每个单元格中一列中的所有条目
- python - 从python for循环函数返回一个值