我一直在开发一个程序,我需要使用 C 来扫描文件中的行并将它们存储在结构中。
我的 .txt 文件格式为:
NAME 0.2 0.3
NAME2 0.8 0.1
或者一般来说它是一个字符串,后跟 2 个双打
我的结构是:
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->name 中放入一个巨大的十六进制数字,该数字旁边有(地址越界)。
有任何想法吗?