私の構造体のフィールドである文字列配列に値を代入する際に問題があります。この場合、この構造体の配列も使用しています。 forループなしで値を割り当てると、すべて正常に動作します。しかし、問題はforループで発生します。私はすべての課題を印刷しており、問題はありません。しかし問題は実際には、すべての代入が実際にはそのフィールドのすべての構造体のすべての配列位置を書き換えるということです。forループは構造体Cの配列のすべての値を書き換えます
struct ship
{
int length;
char *fields[4];
};
struct ship shipPositions[6];
for(int h=0; h < length; h++) //goes from 0 to 3 for first two values
{
char c = getCharFromInt(begin + h); //my function which works fine; begin = 2;
char coord[3] = "$";
append(coord, c); // also works fine
append(coord,ships[i][1]);
shipPositions[i].fields[h] = coord;
printf("shipPositions[%d].fields[%d] = %s\n", i,h,shipPositions[i].fields[h]);
}
printf("Position: %s\n",shipPositions[0].fields[0]);
printf("Position: %s\n",shipPositions[0].fields[1]);
/* it prints assignments and then on the first two values after for loop
shipPositions[0].fields[0] = $C2
shipPositions[0].fields[1] = $D2
shipPositions[0].fields[2] = $E2
shipPositions[1].fields[0] = $F0
shipPositions[1].fields[1] = $G0
shipPositions[1].fields[2] = $H0
shipPositions[5].fields[0] = $H8
shipPositions[5].fields[1] = $I8
Position: $I8
Position: $I8
*/
そして私はforループの最初の2例をシミュレートする際に、すべてのものも結構です:
char c1 = getCharFromInt(2 + 0);
char coord1[3] = "$";
append(coord1, c1);
append(coord1,ships[0][1]);
shipPositions[0].fields[0] = coord1;
printf("shipPositions[%d].fields[%d] = %s\n", 0,0,shipPositions[0].fields[0]);
char c2 = getCharFromInt(2 + 1);
char coord2[3] = "$";
append(coord2, c2);
append(coord2,ships[0][1]);
shipPositions[0].fields[1] = coord2;
printf("shipPositions[%d].fields[%d] = %s\n", 0,1,shipPositions[0].fields[1]);
printf("Position: %s\n",shipPositions[0].fields[0]);
printf("Position: %s\n",shipPositions[0].fields[1]);
/*
shipPositions[0].fields[0] = $C2
shipPositions[0].fields[1] = $D2
Position: $C2
Position: $D2
*/
これは、ブロック*の終わりに*死んでいる*変数へのポインタがあるからです。また、そのようなフィールドの場合は* strings *ではなく、代わりに 'struct Position {int x、y; } 'は言う。 –
お返事ありがとうございました。このループを修正する方法を教えてください。前もって感謝します。 –
[関連](https://stackoverflow.com/q/46969661/2371524) –