C语言 程序运行不了 急!!!

来源:百度知道 编辑:UC知道 时间:2024/06/25 16:42:59
#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);
}
没有错误,就是不好运行,什么问题?

错误的原因是这样的:
你把常量字符串赋给了指针p,而你在函数中试图修改s1和s2指向的内容,这是非法的。s1和s2指向的内容是常量嘛。
可以这样修改,在main函数中不要定义指针p,定义一个数组来存储这个字符串。然后把数组名传进去,这样就应该没问题了。
你可以试一下。不明白的可以hi我。

对了,你在函数体内交换两个字符写的也有问题;请改成如下
t=*s1;*s1=*s2;*s2=t;s1++;s2--;
照你那么写,*s1没有改变,而是改变他的后面的字符。*s2也是一个道理。
帮你改了一下,应该符合你的要求:
#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;s1++;s2--;}
}
main()
{
char p[]={"1234567"};

fun(p,strlen(p));
puts(p);
}

原因大概是因为main函数里面的字符串p未分配储存空间....

{char p[]="1234567";
fun(p,strlen(p));
puts(p);
}

p="1234567";之后
P所指向的内容是静态区是不可以改变,如果试图改变就会使程序蹦掉