我目前正在为 C 编程课程做一个项目,但遇到了问题。我对 C 语言还是很陌生,但有 Java 编程经验。
当我尝试为struct的char *变量成员赋值时,我的程序遇到了问题。有问题的代码如下:
void ReadFile(ComponentType * Data, int * numEl, int * numNodes)
{
size_t index;
FILE * dataFile;
char * data;
float * value;
numEl = malloc(sizeof(int *));
numNodes = malloc(sizeof(int*));
Data = malloc(6 * sizeof(ComponentType));
* numEl = 0;
* numNodes = 0;
index = 0;
if((dataFile = fopen("mydata.dat", "r")) == NULL)
puts("Error - file \"mydata.dat\" could not be opened!");
else
{
while(!feof(dataFile))
{
fscanf(dataFile, "%s", data);
Data[index].name = (char *)malloc(strlen(data)+1);
strcpy(Data[index].name, data);
fscanf(dataFile, "%s", data);
Data[index].node1 = (char *)malloc(strlen(data)+1);
strcpy(Data[index].node1, data);
fscanf(dataFile, "%s", data);
Data[index].node2 = (char *)malloc(strlen(data)+1);
strcpy(Data[index].node2, data);
fscanf(dataFile, "%f", value);
Data[index].value = * value;
int i = char2int(CircuitData[index].node1);
if(i > * numNodes)
* numNodes = i;
i = char2int(CircuitData[index].node2);
if(i > * numNodes)
* numNodes = i;
(* numEl)++;
(* numNodes)++;
index++;
}
fclose(dataFile);
}
free(Data);
free(numEl);
free(numNodes);
}
结构定义如下:
typedef struct
{
char * name;
char * node1;
char * node2;
float value;
} ComponentType;
我已经对程序进行了调试,基本上发生的是文件被正确读取并且存储在数据中的值是正确的,但是打印出Data[index].name或者在格式化为char *时会导致分段错误,或者调试程序,打印出 0x0。简而言之,从文件中读取的值不会被复制到我想要它们的结构变量中。
任何建议/帮助将不胜感激。谢谢你。
编辑:我正在使用 Linux 64 位编码
编辑 2:我添加了发生错误的整个函数,并进行了以下建议的更改