作业帮 > 综合 > 作业

请大家帮我看看我的这道程序这里为什么会出错?要怎么改?

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/18 18:16:38
请大家帮我看看我的这道程序这里为什么会出错?要怎么改?
#include
void main()
{void fun(char *s1,char *s2);
char *a1,*a2;
gets(a1);
fun(a1,a2);
printf("%s \n%s \n",a1,a2);
}
void fun(char *s1,char *s2)
{int i,j;
for(i=0;*s1[i]!='\0';i++); //(invalid indirection)
for(j=0;i!=0;j++,i--) //(invalid indirection)
*s2[j]=*s1[i];} //(invalid indirection)
请大家帮我看看我的这道程序这里为什么会出错?要怎么改?
编译错误提示什么?
再问: 就是右边的那个 invalid indirection。还有就是说s1,s2从来没有被使用。都在函数里面那几行
再答: for(i=0;*s1[i]!='\0';i++); 改成 for(i=0;s1[i]!='\0';i++); *去掉 还有就是; 去掉
再问: 我是要计算字符串的个数啊。我的目的是要将s1逆置给s2
再答: // 写成这样,一个循环就搞定了! int nIndex = 0; while(s1[nIndex] != '\0') { s2[nIndex]=s1[nIndex]; nIndex++; }
再问: 这样子s2还是等于s1啊。我想从s1的最后一个字母开始到最前一个字符按此顺序賦值给s2。
再答: for(i=0;s1[i]!='\0';i++); for(j=0;i!=0;j++,i--) s2[j]=s1[i]; // 这样能编译过吗
再问: 试过,不过第一个循环后 i 要减一,可是结果输出s2的时候说NULL pointer assigment
再答: // s2 的最后没有结束符 后面加一句 for(i=0;s1[i]!='\0';i++); for(j=0;i!=0;j++,i--) { s2[j]=s1[i]; } s2[j] = '\0';
再问: 我蛋疼了,调试的时候可以输出正确的结果,可是在运行的时候在s2输出的时候又说NULL pointer assigment
再答: //s2 野指针。你s2没有初始化 for(i=0;s1[i]!='\0';i++); s2 = new char[i]; for(j=0;i!=0;j++,i--) { s2[j]=s1[i]; } s2[j] = '\0';
再问: s2输出时是说NULL。。。。。。
再答: void fun(char *s1,char*& s2); // 函数申明也要改一下