c - 在C中使用指针,当反转字符串时,如何获得正确的输出

  显示原文与译文双语对照的内容

我试图用指针反转C中的字符串,但是输出真的很奇怪,逻辑很好,但我不确定它为什么会这样输出,下面是代码:


#include <stdio.h>


#include <string.h>



int main()


{


 char str[20], reverse_str[20], *pointer;


 int i = 0;



 printf("%s","Enter any string:");


 scanf("%s", str);


 pointer = str;



 int string_length = strlen(pointer);



 //int count = 0;


 for (int i = string_length; i > 0; i--){


 reverse_str[i -1] = *pointer;


 pointer++;


 }


 printf("%dn", string_length);


 printf("Original string = %sn", str);


 printf("Reversed string = %sn", reverse_str);



}



输出如下所示:


Enter any string: Hello



Original string = Hello


Reversed string = olleH╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Hello



时间:

字符串缺少null结束符,可以执行如下操作:


...


//int count = 0;


i = string_length;


reverse_str[i] = '';


for ( ; i > 0; i--){


 reverse_str[i -1] = *pointer;


 pointer++;


}


...



要打印字符串,字符串需要NUL-terminator (' ),但reverse_str没有一个。

你需要在revers_str的末尾设置,例如:


reverse_str[string_length] = '';



打印正确的输出。

...