你好,我正在經歷的事情,我真的不明白C中的結構的原理。 我的結構之一包含2個字符串(名爲'seq'和'foldedSeq')。這兩個字符串(應該)具有相同的尺寸。 但是,當我嘗試修改一個,第二個自動在字符串的相同指定位置進行相同的修改。Unfathomable C結構
這裏是代碼的有趣塊:
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->序列[I]」 進行修改,以及??
謝謝你閱讀並提供給我解釋,我的邏輯在這裏發現了一個死衚衕。
你是不是在'malloc'之後缺少'strcpy'?就目前而言,代碼提供了適當大小的未初始化內存塊。 – simonc
@simonc評論只是說它想要的長度不一樣相同的內容。他立即用'-'填充它。 – FDinoff
什麼是q?您是否意味着+ 1的無效終止? – Lundin