关于字符串反序的问题
void string_in(char pc[])//定义的一个函数,功能是读取一个字符串,并将字符串反序{
char*pr=pc;
int a,i=0;
char temp;
while(*pr!='\0')//求这个字符串的字符个数和最后一个字符的地址
{
pr++;
i++;
}
for(a=0;a<i;i++)//将最后一个字符的地址 取值并将值赋给字符串数组的第一个字符位置
{
temp=*--pr;
*--pr=pc;
pc=temp;
}
puts(pc);
}
请问我的程序哪里有问题吗?运行的时候就会中断,运行不了。求大神帮忙看一下~ 数组越界操作,还有就算不越界你的函数能交换成功吗?比如五个字符你要交换五次才停止,前三次就行了你还要强行交换。越界原因,*--pr两次相当于pr-2最后肯定向前越界了。 本帖最后由 joker11111 于 2016-9-8 14:15 编辑
{:10_329:} 楼上已然说明了问题,不过看到这个题目,还是手痒实现下,毕竟代码要多敲,多敲,多敲。。。
#include <stdio.h>
#include <conio.h>
void string_in(char pc[]);
int main(void)
{
char string = "abcde";
printf("原字符串为:");
puts(string);
string_in(string);
return 0;
}
void string_in(char pc[])//定义的一个函数,功能是读取一个字符串,并将字符串反序
{
char *pr = pc;
int i,length = 0;
char temp;
while(*pr!= '\0')//求这个字符串的字符个数和最后一个字符的地址
{
pr++;
length++;
}
printf("length = %d\n", length);
printf("pr = %s\n", pr);//此时pr指在'\0'的位置,所以打印不出任何字符
pr--;
printf("pr = %s\n", pr);
for(i=0; i < length/2; i++)//将最后一个字符的地址 取值并将值赋给字符串数组的第一个字符位置
{
temp = *pr;
*pr = pc;
pc = temp;
pr--;
}
printf("交换结果为:");
puts(pc);
}
附上运行结果图:
joker11111 发表于 2016-9-8 14:14
楼上已然说明了问题,不过看到这个题目,还是手痒实现下,毕竟代码要多敲,多敲,多敲。。。
...
感谢~~ 星空·无限 发表于 2016-9-8 01:23
数组越界操作,还有就算不越界你的函数能交换成功吗?比如五个字符你要交换五次才停止,前三次就行了你还要 ...
懂了~感谢~
页:
[1]