我的程序在C中反转字符串有什么问题?

时间:2016-09-14 17:31:58

标签: c string pointers reverse

我想创建一个函数来反转C中的字符串。我在互联网上发现了一对预制,但我希望创建我的。这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char* inverseCarac(char* chaine){
    if(chaine==0||*chaine==0) return NULL;  

    int j, i;
    int taille=strlen(chaine); 
    char* inverse=malloc(taille*sizeof(char));

    for(j=taille-1, i=0; j>0; j--, i++){
        *(inverse+i)=*(chaine-j);
    }

    return inverse;

}

int main(void){
    char* test="bonjour";
    char* inv=inverseCarac(test);
    printf("%s", inv);
    return 0;
}

我无法弄清楚为什么会出现分段错误。

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个错误,最重要的是chaine在错误方向上的偏移。此外,字符串终结符空间不足,j过早结束。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* inverseCarac(char* chaine){
    if(chaine==0||*chaine==0) return NULL;  

    int j, i;
    int taille=strlen(chaine); 
    char* inverse=malloc(taille+1);             // add 1 for terminator

    for(j=taille-1, i=0; j>=0; j--, i++){       // change j>0 to j >= 0
        *(inverse+i)=*(chaine+j);               // change -j to +j
    }
    inverse[taille] = '\0';                     // write terminator
    return inverse;
}

int main(void){
    char* test="bonjour";
    char* inv=inverseCarac(test);
    printf("%s\n", inv);
    return 0;
}

节目输出

ruojnob