我在这里面得到了一个运行时错误,我似乎无法解决它。
这是我的代码,可以反转字符串,将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);
}
最佳答案
您没有分配足够的内存来保存反转的字符串:
int len=strlen(input);
...
rev=(char*)malloc(sizeof(char)*len);
...
rev[k]='\0';
您丢失了1个额外的字节。
顺便说一下请不要将返回值从
\0
强制转换为指针。关于c - 我遇到运行时错误:段错误(SIGSEGV),为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45329286/