请编一个函数fun(char *s),该函数的功能是:把字符串中的内容逆置。

#include<string.h>例如,字符串中原有的字符串为"abcdefg",则调用该函数后,串中的内容为"gfedcba"。其中只有fun函数是我填写的,不知道问... #include <string.h>

例如,字符串中原有的字符串为"abcdefg",则调用该函数后,串中的内容为"gfedcba"。
其中只有fun函数是我填写的,不知道问题出在哪?哪位好心人帮忙解答下?

#include <conio.h>
#include <stdio.h>
#define N 81
void fun(char*s)
{
int i,j;
char *t;
t=s;
j=strlen(s);
for(i=0;i<j;i++)
s[i]=t[j-i-1];

}

main()
{
char a[N];
FILE *out;
printf("Enter a string:");
gets(a);
printf("The original string is:");
puts(a);
fun(a);
printf("\n");
printf("The string after modified:");
puts(a);
strcpy(a,"Hello World!");
fun(a);
/******************************/
out=fopen("out.dat","w");
fprintf(out,"%s",a);
fclose(out);
/******************************/
}
展开
 我来答
寻秦记记
推荐于2017-11-22 · TA获得超过1040个赞
知道小有建树答主
回答量:1098
采纳率:100%
帮助的人:456万
展开全部
你的问题在于for循环里面,字符串前面的一部分被都后面的一部分赋值以后,就丢失了,那后一半的值再用前一半的来赋值就是相同的了,那结果就是输入123456,输出是654456,只需要在赋值前把原值保存起来,然后再赋值就可以了,我帮你修改了一下:
void fun(char*s)
{
int i,j;
char *t;
t=s;
j=strlen(s);
char temp;
for(i=0;i<j/2;i++)
{
temp = s[i];
s[i]= t[j-i-1];
t[j-i-1] = temp;

}

}
百度网友4893825
2016-09-21 · TA获得超过361个赞
知道小有建树答主
回答量:352
采纳率:0%
帮助的人:146万
展开全部
char* Reverse(char* s)
{
//将q指向字符串最后一个字符
char* q = s ;
while( *q++ ) ;
q -= 2 ;

//分配空间,存储逆序后的字符串。
char* p = newchar[sizeof(char) * (q - s + 2)] ;
char* r = p ;

// 逆序存储
while(q >= s)
*p++ = *q-- ;
*p = '\0' ;

return r ;
}
追答
你t和s指向了同一个地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式