我是C的初学者。我正在尝试这个程序来反转一个字符串。任何帮助有什么不对吗?
#include<stdio.h>
#include<string.h>
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;
}
答案 0 :(得分:2)
您不尊重变量scope
。关于此问题的一个有用的参考,here。
例如,在reverse()
中,您引用len
循环中的for
。但是,len
中定义了main
,因此reverse()
无法使用reverse()
。 (这甚至可以编译吗?)
从main()
返回的值是指向堆栈值的指针,该堆栈值仅在该函数的范围内。虽然调用函数reverse()
将以有效指针结束,但当{{1}}返回时,指针引用的信息已超出范围,因此 volatile ,可能会有变化。对于这个简单的示例,您可以按值返回反转的字符串,而不是通过引用。 (发送回字符数组,而不是指向它们的指针。)