0
配列に文字列を保存して印刷しようとしていますが、最初のレコードが保存された後、配列全体がナンセンスで(Visual Studioデバッガにしたがって)私は間違って何をしていますか?最初の挿入後に配列が不確定な値で埋められます
int saveRecord(int ixA, int ixB, int length, int* ocupied, char**arr)
{
char r[50];
sprintf(r,"%d: %d - %d", length, ixA, ixB);
arr[*ocupied] = r;
(*ocupied)++;
return 0;
}
int printRecords(int ocupied, char** arr)
{
for (int i = 0; i < ocupied; i++)
{
printf("%s\n", arr[i]);
}
printf("Options: %d\n", ocupied);
return 0;
}
int main()
{
int length = 0, ixA = 0, ixB = 0;
int* ocupied;
int a = 0;
ocupied = &a;
char r[50] = "";
char *arr[250000];
for (int i = 0; i < 250000; i++)
{
arr[i] = "";
}
for (int i = 0; i < 10; i++)
{
scanf("%d %d %d", &ixA, &ixB, &length);
saveRecord(ixA, ixB, length, ocupied, arr);
}
printRecords(*ocupied, arr);
}
あなたは、誰もがそれをすべて読むことを期待していた場合、適切にあなたのコードをフォーマットしてください。 –
'saveRecord'では、ローカル配列' r'を 'arr []'に代入します。この配列は、関数を終了するときに範囲外になります。そのため、配列を印刷すると無効になります。あなたの配列を配列の配列にするか、メモリを割り当てて文字列をコピーして(そして後で解放する)必要があります。 –