【发布时间】:2013-04-25 17:28:05
【问题描述】:
注意:我使用的是 c++ 编译器,因此我可以使用按引用传递
我有一个奇怪的问题,我真的不知道发生了什么。
基本上,我有一个文本文件:http://pastebin.com/mCp6K3HB 我正在将文本文件的内容读入一个原子数组:
typedef struct{
char * name;
char * symbol;
int atomic_number;
double atomic_weight;
int electrons;
int neutrons;
int protons;
} atom;
这是我对 atom 的类型定义。
void set_up_temp(atom (&element_record)[DIM1])
{
char temp_array[826][20];
char temp2[128][20];
int i=0;
int j=0;
int ctr=0;
FILE *f=fopen("atoms.txt","r");
for (i = 0; f && !feof(f) && i < 827; i++ )
{
fgets(temp_array[i],sizeof(temp_array[0]),f);
}
for (j = 0; j < 128; j++)
{
element_record[j].name = temp_array[ctr];
element_record[j].symbol = temp_array[ctr+1];
element_record[j].atomic_number = atol(temp_array[ctr+2]);
element_record[j].atomic_weight = atol(temp_array[ctr+3]);
element_record[j].electrons = atol(temp_array[ctr+4]);
element_record[j].neutrons = atol(temp_array[ctr+5]);
element_record[j].protons = atol(temp_array[ctr+6]);
ctr = ctr + 7;
}
//Close the file to free up memory and prevent leaks
fclose(f);
} //AT THIS POINT THE DATA IS FINE
这是我用来读取数据的函数。当我调试这个函数并让它运行到最后时,我使用调试器检查它的内容,并且数组有 100% 正确的数据,也就是说,所有元素都是它们应该与文本文件相关的内容。 http://i.imgur.com/SEq9w7Q.png 这张图片显示了我在说什么。在左边,所有元素,从 0 到 127,都是完美的。 然后,我进入调用它的函数。
atom myAtoms[118];
set_up_temp(myAtoms); //AT THIS POINT DATA IS FINE
region current_button_pressed; // NOW IT'S BROKEN
load_font_named("arial", "cour.ttf", 20);
panel p1 = load_panel("atomicpanel.txt");
panel p2 = load_panel("NumberPanel.txt");
只要调用任何东西,在我调用set_up_temp 之后,我的数组的元素 103 到 127 就会变成乱码。随着越来越多的事情被调用,更多的数组变成了乱码。这很奇怪,我不知道发生了什么......有人知道吗?谢谢。
【问题讨论】:
-
void set_up_temp(atom (&element_record)[DIM1])无效 C:&在那里是非法的。 -
@pmg 抱歉,我可能应该补充说我正在使用 c++ 编译器。我在 OP 顶部添加了一个注释
-
feof可能不像你想象的那样工作。 -
@CarlNorum 或者,就此而言,
fgets
标签: c++ c arrays struct output