私は、C を使用してファイルから行をスキャンし、それらを構造体に格納する必要があるプログラムに取り組んできました。
私の .txt ファイルは次の形式です。
NAME 0.2 0.3
NAME2 0.8 0.1
または、一般に、文字列の後に 2 つの double が続く
私の構造体は次のとおりです。
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 に (アドレス範囲外) が横にある巨大な 16 進数を入力しました。
何か案は?