2015-06-21 54 views
0

我必须编写一个函数,它获取一个字符串然后将其反转。我写了这个代码,这给了我没有编译错误:printf函数不会打印反转字符串

#include <stdio.h> 
#include <string.h> 
char *reverse(char *str); 

int main(void){ 

    char string[100]; 
    printf("Insert the string to be inverted: "); 
    gets(string); 
    reverse(string); 
    printf("Inverted string is: %s\n", string); 
    } 

char *reverse(char *str){ 

    char h; 
    int i, j; 
    for(i=0, j=strlen(str); i<j; i++, j--){ 

     h=str[i]; 
     str[i]=str[j]; 
     str[j]=h; 
     } 

    } 

唯一的问题,我得到的是,显然,printf将不打印逆转字符串。谁能帮我?

+0

'str [strlen(str)]'是什么? –

+0

切勿使用'gets'功能。它本质上是不安全的(如果用户键入200个字符,或者你的猫坐在键盘上?),并且它已从2011年标准的语言中删除。 'fgets'使用起来有点麻烦,但它可以安全地使用。 –

回答

1

该反向串具有终止子\0在位置0

0

strlen(str)给你字符串的尺寸,即终止空字符的索引。

你不想交换空终止符,所以strlen(str) - 1是你想交换的最后一个字符的索引。因此,j应该从strlen(str) - 1开始。

+0

谢谢!起初我没有意识到,strlen在分析字符串时包含了\ 0。现在该程序起作用。谢谢! –