【发布时间】:2013-02-07 03:22:24
【问题描述】:
我一直在开发一个程序,我需要使用 C 来扫描文件中的行并将它们存储在结构中。
我的 .txt 文件格式为:
NAME 0.2 0.3
NAME2 0.8 0.1
或者通常它是一个字符串,后跟两个双打
我的结构是:
struct device {
char* name;
double interruptProbability, interruptTime, startTime, endTime;
} myDevice;
现在,我可以很好地扫描这些行,但是当需要将它们放入我的结构时,有些事情会变得一团糟。以下是我进行扫描的方式:
char line[BUFSIZ];
while(fgets (line, BUFSIZ, devicesFile) != NULL){
struct device *d = &myDevice;
if(!isspace(*line)){
printf("String: %s \n", &line);
d->name = "success"; // for testing purposes
printf("device name before: %s \n", d[0]);
sscanf(line, "%s %f %f",&d->name, &d->interruptProbability, &d->interruptTime);
printf("device name after: %s \n", d[0]);
}
}
当我运行它时,它会打印出来:
String: Disk 0.2 0.00005
device name before: success
在给我一个段错误之前。
我运行 GDB 来测试扫描的结果,无论出于何种原因,它都会将其放入 d->命名一个巨大的十六进制数字,该数字旁边有(地址越界)。
有什么想法吗?
【问题讨论】:
标签: c file segmentation-fault