c - 我收到运行时错误 : Segmentation Fault (SIGSEGV),,为什么?

标签 c

我遇到了一个运行时错误,我似乎无法弄清楚。 这是我的代码,用于反转字符串并将 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';

您错过了终止 \0 的 1 个额外字节。

顺便说一下...请不要将返回值从 malloc 转换为指针。

关于c - 我收到运行时错误 : Segmentation Fault (SIGSEGV),,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45329286/

相关文章:

c++ - 从 C/C++ 中的数据缓冲区扫描

使用 _stscanf_s C 库函数转换成功,但实际上失败

c - 如何在czmq上设置发送/接收超时?

linux - 为什么这段代码可以在 Linux 上运行,但不能在 SunOS 上运行?

c - 如何在 linux 中为 c 程序分配更多的 cpu 和 RAM

c - snprintf 错误。 sizeof 的参数与目标相同

c - 如何将数组索引传递给c中的另一个函数

c++ - 在 8 字节边界上对齐 double ?

c - 按值将指针传递给c函数中的指针

c - 在 C 中修改字符串数组中的字符串