![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
大家看看这个c语言程序的结果 运行报错求解释
挺简单的一个程序,win7上用dev-c++4.9.9.2编译通过,运行报错如下图,希望大家运行看看,求结果#include<stdio.h>#include<strin...
挺简单的一个程序,win7上用dev-c++4.9.9.2编译通过,运行报错如下图,希望大家运行看看,求结果
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
void fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
int main(int argc, char *argv[])
{
char *p="1234567";
fun(p,strlen(p));
printf("%s",p);
system("PAUSE");
return 0;
}
看了各位的回答,个人认为,这个程序本想实现修改p的内容为7654321
但是 t=*s1++; *s1=*s2--;*s2=t;简洁的过分了,导致s1指针的后一个值被s2的值覆盖
s2的前一个值被s1覆盖,没什么意义,估计结果应为1714717
今天找个合适的版本运行一下再选择满意答案
我把这个程序稍微改动了一下:
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
void fun(char *w,int n);
int main(int argc, char *argv[])
{
char p[]="1234567";
fun(p,strlen(p));
printf("%s",p);
system("PAUSE");
return 0;
}
void fun(char w[],int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
结果为:1711717
指针和数组的不同
防不胜防
仍然感谢大家的参与,我就闭眼选满意答案了 展开
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
void fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
int main(int argc, char *argv[])
{
char *p="1234567";
fun(p,strlen(p));
printf("%s",p);
system("PAUSE");
return 0;
}
看了各位的回答,个人认为,这个程序本想实现修改p的内容为7654321
但是 t=*s1++; *s1=*s2--;*s2=t;简洁的过分了,导致s1指针的后一个值被s2的值覆盖
s2的前一个值被s1覆盖,没什么意义,估计结果应为1714717
今天找个合适的版本运行一下再选择满意答案
我把这个程序稍微改动了一下:
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
void fun(char *w,int n);
int main(int argc, char *argv[])
{
char p[]="1234567";
fun(p,strlen(p));
printf("%s",p);
system("PAUSE");
return 0;
}
void fun(char w[],int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
结果为:1711717
指针和数组的不同
防不胜防
仍然感谢大家的参与,我就闭眼选满意答案了 展开
3个回答
展开全部
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
void fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=s1++;
s1=s2--;
s2=t;
}
}
int main(int argc, char *argv[])
{
char *p="1234567";
fun(p,strlen(p));
printf("%s\n",p);
system("PAUSE");
return 0;
}
结果为:1234567
你可以自己试一试。
其中,*s1=*s2--;这句话出错,这真不是这样赋值,修改后就可以运行了。还有就是,fun()似乎没用,因为最后输出是指针p的内容,而不是fun()函数的内容。
#include<string.h>
#include <stdlib.h>
void fun(char *w,int n)
{
char t,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<s2)
{
t=s1++;
s1=s2--;
s2=t;
}
}
int main(int argc, char *argv[])
{
char *p="1234567";
fun(p,strlen(p));
printf("%s\n",p);
system("PAUSE");
return 0;
}
结果为:1234567
你可以自己试一试。
其中,*s1=*s2--;这句话出错,这真不是这样赋值,修改后就可以运行了。还有就是,fun()似乎没用,因为最后输出是指针p的内容,而不是fun()函数的内容。
追问
为什么不能这样赋值,课本上很多类似的例子,而且完全没有错误
void main()
{
char *a="I am a boy",b[20],*p1,*p2;
int i;
p1=a;p2=b;
for(;*p1!='\0';)
*p2++=*p1++;
*p2='\0';
printf("string a is:%s\n",a);
printf("string b is:");
printf("%s",b);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(s1<s2)
这里可能有问题,因为你比较的是指针,不是下标。
这里可能有问题,因为你比较的是指针,不是下标。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵 LZ自己都看出问题了 还来提问,逗我们玩?
whlie()语句第二条的S1、第三条S2已近发生变化了
把自加和自减写到最后, t=*s1;*s1=*s2;*s2=t;*s1++;*s2--;
whlie()语句第二条的S1、第三条S2已近发生变化了
把自加和自减写到最后, t=*s1;*s1=*s2;*s2=t;*s1++;*s2--;
追问
关键是这个破程序编译没错误,一运行就出错,很不爽
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询