我有這個我自己寫的非常簡單的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'
但是,如果我嘗試調試代碼,看看是否有什麼錯,流程恰到好處,並最終返回正確的剝離序列。
我試圖打印出兩個變量的記憶,這裏是存儲器中的讀數
記憶序列:http://i.stack.imgur.com/dHI8k.png
內存*序列:http://i.stack.imgur.com/UqVkX.png
內存retSeq: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;
}
現在的代碼,我也實在沒有什麼回事想法上。
你可以使用std :: string而不是char *嗎? – 2012-02-13 11:29:05
當然,我想..但我想弄清楚這裏發生了什麼! – XelharK 2012-02-13 11:32:08
這不是有效的標準C++。標準C++不提供可變長度數組。 – sellibitze 2012-02-13 11:40:12