程序反转字符串
我是C的初学者。我正在尝试这个程序来反转一个字符串。 任何帮助有什么不对吗?
#include #include char *reverse(char *); void main() { char str[]="kundan"; int len=strlen(str); char *ptr; ptr=reverse(str); printf("the reversed string is :%s",ptr); } char *reverse(str) { char *rtr=str; char qtr[10]; for(int i=len-1;i<=0;i--) { qtr=rtr+i; qtr++; } return qtr; }
你不尊重变量scope
。 这里有一个有用的参考。
例如,在reverse()
,在for
循环中引用len
。 但是, len
在main
定义,因此不能用于reverse()
。 (这甚至可以编译吗?)
从reverse()
返回的值是指向堆栈值的指针,该堆栈值仅在该函数的范围内。 虽然调用函数main()
将以有效指针结束,但是当返回reverse()
时,指针引用的信息已经超出范围,因此是易变的 ,可能会发生变化。 对于这个简单的示例,您可以按值返回反转的字符串,而不是通过引用。 (发送回字符数组,而不是指向它们的指针。)