こんにちは、私は C の構造の原理を本当に理解していないことを経験しています。私の構造の 1 つに 2 つの文字列 ('seq' と 'foldedSeq' という名前) が含まれています。これらの文字列は両方とも同じ寸法である必要があります。ただし、1 つを変更しようとすると、2 つ目は文字列の指定された同じ場所で同じ変更を自動的に行います。
興味深いコードのチャンクは次のとおりです。
typedef struct MD {
int nb_line;
int nb_colomn;
EM ** matrix;
char * seq; // Initial sequence.
char * foldedSeq;
} MD;
void set_sequences(MD * M, char * seq) {
M->seq = seq;
M->foldedSeq = M->seq; //Purpose: give to foldedSeq the seq dimensions (perhaps it is useless).
printf("seq= %s\tstrlen= %d\nM->seq= %s\nM->foldedSeq= %s\n", seq, strlen(seq), M->seq, M->foldedSeq);
// Up to this point 'seq' = 'foldedSeq'
int i;
for( i = 0; i < strlen(seq); i++) {
M->foldedSeq[i] = '-'; // Original purpose: make 'foldedSeq' string filled with hyphens only.
}
printf("seq= %s\tstrlen= %d\nM->seq= %s\nM->foldedSeq= %s\n", seq, strlen(seq), M->seq, M->foldedSeq);
// Here is the problem: the string 'seq' REALLY IS modified alongside with 'foldedSeq'... WHY? :(
}
"M->foldedSeq[i]" を変更する必要があると書いたのに、なぜ "M->seq[i]" も変更する必要があるのでしょうか??
説明を読んでくれてありがとう、私の論理はここで行き止まりを見つけました。