2014-11-02 90 views
-3

我试图扭转一个字符串而不使用临时字符串,但是当我执行该程序时,我的olllo结果不是olleH如何在不使用临时字符串和C库的情况下反转字符串?

这里是我的代码:

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

    int main(){ 
     char *str = strdup("Hello"); 
     int reverse(char * str){ 
      int i=0; 
      int j = strlen(str)-1; 
      while(i<=j){ 
       (str[i]) = (str[j]); 
       i++; 
       j--; 
      } 
     return 0; 
     } 
     reverse(str); 
     printf("string = %s\n", str); 
     return 0; 
    } 
+0

这不是C.您不能在C中嵌套函数定义。 – rightfold 2014-11-02 15:04:55

+1

@rightføld:他可能使用允许它的gcc扩展名。 – Jack 2014-11-02 15:07:08

+0

这不是重复的,我试图创建一个函数,它可以在不使用临时字符串的情况下反转字符串。我没有找到这样的例子 – 2014-11-02 15:14:26

回答

1

你不能做这样的事情,因为你的char *str是一种不断变化的:你只要把它的东西,而无需使用任何动态内存分配函数像malloc()。除非您复制它,否则您不能修改此指针的内容。

使用strdup(char *)这样的:

char * str = strdup("Hello"); 

然后你就可以修改你的字符串的内容。

+0

我试过这个,但我有olllo作为结果,而不是olleH – 2014-11-02 15:19:41

+1

@JamesH现在分段错误已解决,我建议问一个新问题。 – 2501 2014-11-02 15:22:45

+0

现在问题出在你的算法中。当你交换你的角色时,你永远不会把str [i]的前一个值存储在tmp_char中,你只会丢失它。 – Amina 2014-11-02 15:25:15

相关问题