我有这个我自己写的非常简单的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