我在这里遇到了运行时错误,我似乎无法弄明白。 这是我的代码,用于反转字符串并将A更改为T,反之亦然,将C更改为G,反之亦然,
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* reverse(char *input)
{
int len=strlen(input);
char *rev=NULL;
rev=(char*)malloc(sizeof(char)*len);
int i,k=0;
for(i=len-1;i>=0;i--)
{
rev[k++]=input[i];
if(rev[k-1]=='A')
rev[k-1]='T';
else if(rev[k-1]=='T')
rev[k-1]='A';
else if(rev[k-1]=='C')
rev[k-1]='G';
else if(rev[k-1]=='G')
rev[k-1]='C';
}
rev[k]='\0';
return rev;
}
int main()
{
char *input=(char *)malloc(sizeof(char)*1000);
scanf("%s",input);
char *str =NULL;//(char*)malloc(sizeof(char)*1000);
str=reverse(input);
printf("%s",input);
free(input);
}
答案 0 :(得分:4)
您没有分配足够的内存来保存反向字符串:
int len=strlen(input);
...
rev=(char*)malloc(sizeof(char)*len);
...
rev[k]='\0';
您为终止\0
错过了1个额外字节。
顺便说一句......请不要将malloc
的返回值强制转换为指针。
答案 1 :(得分:1)
首先,您在for循环中使用i++
而不是i--
。这意味着for
循环永远不会结束,而k
会变得非常大,而rev[k]
会尝试访问它不应该的值。
其次,您不需要为str
分配内存,因为您在函数中分配了内存。
如果对于'\0'
,你应该为函数中的一个char分配内存。