我在这里面得到了一个运行时错误,我似乎无法解决它。
这是我的代码,可以反转字符串,将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/

10-13 08:16