私は本当にシンプルなC++関数を持っています。
文字列から ' - '文字を取り除くだけです。
ここで私はコメントは自身のために話すことを考えるコードC++は文字列を混ぜていますか?
char* FastaManager::stripAlignment(char *seq, int seqLength){
char newSeq[seqLength];
int j=0;
for (int i=0; i<seqLength; i++) {
if (seq[i] != '-') {
newSeq[j++]=seq[i];
}
}
char *retSeq = (char*)malloc((--j)*sizeof(char));
for (int i=0; i<j; i++) {
retSeq[i]=newSeq[i];
}
retSeq[j+1]='\0'; //WTF it keeps reading from memory without this
return retSeq;
}
です。
私はなぜ知らないが、私はプログラムを起動し、結果をプリントアウトするとき、私は何も悪いことはありますかどうかを確認するために、コードをデバッグしようとした場合、私は、しかし
'stripped_sequence''original_sequence'
のような何かを得ます、流れはちょうどうまく進み、正しいストリップされたシーケンスを返すようになります。
私は2つの変数のメモリをプリントアウトしようとした、とここではメモリの測定値は、配列のための
メモリです:*配列のためのhttp://i.stack.imgur.com/dHI8k.png
メモリ:retSeqためhttp://i.stack.imgur.com/UqVkX.png
メモリ:http://i.stack.imgur.com/o9uvI.png retSeq *用
メモリ:http://i.stack.imgur.com/ioFsu.png
(申し訳ありませんが、理由はスパムフィルタのリンク/写真を含めることができませんでした)
これは私が今、文字列から
for (int i=0; i<atoi(argv[2]); i++) {
char *seq;
if (usingStructure) {
seq = fm.generateSequenceWithStructure(structure);
}else{
seq = fm.generateSequenceFromProfile();
}
cout<<">Sequence "<<i+1<<": "<<seq<<endl;
}
を印刷するために使用しているコードで、私は本当に何が起こっているのかについては考えていますに。
char *の代わりにstd :: stringを使用できますか? –
確かに、私は推測する..しかし、私はここで何が起こっているのか把握したい! – XelharK
これは有効な標準C++ではありません。標準C++は可変長配列を提供しません。 – sellibitze