一道中等难度的C语言题

来源:百度知道 编辑:UC知道 时间:2024/07/04 13:12:36
#include<stdio.h>
#include<string.h>
fun(char *w,int n)
{ char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t;}
}
main()
{ char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
这段程序的结果是多少?要有解答过程!

#include<stdio.h>
#include<string.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;s1++;s2--;}
}
main()
{ char
p[100]="1234567";
fun(p,strlen(p));
puts(p);
}
//简单修改了下 实现功能为字符串倒序存放

#include<stdio.h>
#include<string.h>
fun(char *w,int n)
{ char t,*s1,*s2;
s1=w;s2=w+n-1; /*s1指向首地址,s2指向末元素地址*/
while(s1<s2)
{t=*s1++;*s1=*s2--;*s2=t;}
/*第一个与最后一个值互换,第二个与倒数第二个互换,以此类推*/
}
/*这个函数的作用是将给定的字符串w倒序排列*/
main()
{ char *p;
p="1234567";
fun(p,strlen(p));
puts(p); /*输出结果应该是 7654321 */
}

运行时出现段错误

因为 p = "1234567" ,对于这个字符串,它是一个复杂型常量,是存储在rodata段里的,是不能修改的。所能当运行到while(s1<s2) {t=*s1++;*s1=*s2--;*s2=t;}时,就会出现段错误。