我的程序在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; }我无法弄清楚为什么会出现分段错误。
I want to create a function to reverse a string in C. I found a couple pre-made on the internet but I wish to create mine. Here is the code:
#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; }I can't figure out why I get a segmentation fault.
最满意答案
您的代码中存在多个错误,最重要的是从错误方向的链接偏移。 此外,字符串终止符缺少空间, 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; }程序输出
ruojnobThere were several errors in your code, the most significant being the offset from chaine in the wrong direction. Also, lack of space for a string terminator, and j ending prematurely.
#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; }Program output
ruojnob更多推荐
发布评论