遇到C语言编程中的一个问题。代码如下。
#include <stdio.h>
int main ()
{
char * ptr = "how are you";
reverse_string(ptr);
printf("%s",ptr);
}
void reverse_string(char * string)
{
char * last_string;
for(last_string = string; *last_string != '\0';last_string++)
;
last_string--;
while(string < last_string)
{
char temp;
temp = *string;
*string++ = *last_string;
*last_string-- = temp;
}
}
这个代码是C和指针中第六章第三个编程习题的答案。首先,我想问的是,while(string < last_string)
这里比较的是两个内存地址的大小吗?我调试的时候,string 显示的是 我设置的那个字符串,而last_string 显示的这个字符串的最后一个字母。而且这个代码,我去运行的时候也是有问题的。请人来给我讲解下,最后一个个的讲解。还有就是这个代码为什么运行会出问题呢? 还有我是新人一个啊,结贴也不太会,不要见怪啊。吃过晚饭来看看,求高人解答。
[解决办法]
首先你的程序编译出错是应为你没有在调用函数之前声明函数
然后你不能用char *ptr定义字符串,应该用数组
代码修改如下:
#include <stdio.h>
int main()
{
void reverse_string(char *string);
char ptr[500] = "how are you";
reverse_string(ptr);
printf("%s\n", ptr);
}
void reverse_string(char *string)
{
char * last_string;
for (last_string = string; *last_string != '\0'; last_string++)
;
last_string--;
while (string < last_string)
{
char temp;
temp = *string;
*string++ = *last_string;
*last_string-- = temp;
}
}
说明:
while(string < last_string)是比较的地址大小
在for循环结束时last_string指向字符串的最后一个字符,也就是'\0'
所以后面要执行last_string--, 让last_string指向字符串的倒数第二个字符,也就是我们可见的最后一个字符,然而string仍然是指向字符串的第一个字符的。
while(string < last_string)表示当string还在last_string前面的时候执行循环
循环体的内容是就是交换字符串前后的内容实现倒转
注意每次交换要移动指针,代码中的string++,和last_string--的作用就在此