用指针反转字符串?

我试图用函数和一些指针反转一个字符串,但我无法获得更新原始字符串的函数。

#include  #include  void rev(char* string) { char str2[strlen(string)]; char *p1; char *p2; p1 = string + strlen(string)-1; p2 = str2; while(p1 >= string) *p2++ = *p1--; *p2 = '\0'; p2 = p2 - strlen(string); string = p2; // This codesn't seem to update s1 or s2 } int main(void) { char s1[100] = "What does the fox say?"; char s2[100] = "Titanic sinks"; rev(s1); rev(s2); printf("\n\n%s\n", s1); printf("%s\n", s2); return 0; } 

function有效,但我无法获取main中的字符串以更新反向字符串。 Imo string = p2应该将字符串更新为它的反转值。 它确实如此,但仅限于function内,而不是主function……

您还需要实现交换语义,否则您将丢失原始字符

  void rev(char *s) { if (s != NULL) { int n = strlen(s) - 1; char *p1 = s; char *p2 = s + max(n, 0); while (p2 > p1) { char temp = *p1; *p1++ = *p2; *p2-- = temp; } } } 

C使用带指针的传值语义以及任何其他值。 将指针传递给函数时,其值将复制到变量string 。 对string任何更改都将保留在函数的本地(但将保留对指向的数据的更改)。 您可能希望返回指向修改数据的指针,或者修改字符串“就地”。

好吧,你可以改变这个: string = p2; 对此: strcpy(string, p2);

它会工作得很好。

您也可以使用strrev函数。 在string.h ,定义如下:

char * strrev(char *)

它会将字符串中的所有字符更改为与终止空字符相反的顺序。

例如,下面的代码将数组更改为逆序并将其打印在屏幕上:

char *a = "HELLO";

strrev(a);

printf("%s", a);