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

What is wrong with my program reversing strings in C?

我想创建一个函数来在 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;
}

我不明白为什么会出现分段错误。

您的代码中有几个错误,最重要的是 chaine 的偏移方向错误。此外,字符串终止符缺少 space,并且 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] = '[=10=]';                     // write terminator
    return inverse;
}

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

程序输出

ruojnob