C语言里面函数返回值的问题,请高手来回答!

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:10:00
今天看到一个书上的例子,说的是函数返回值为指针型.然后我就在机器上测试了一次.结果和这段代码所要达到的目的根本不一样.它本来的目的是通过返回指针指向的地址,来操作两个字符串,使s2连接到s1.但是我运行之后发现,要么输出一个"NULL POINTER ASSINGMET",要么就什么都没有.请问这个问题出在哪里?
下面是代码:
main()
{
char *s,*s1,*s2;
char *user();

gets(s1);
gets(s2);
s=user(s1,s2);
printf("this is:%s\n",s);
}
char *user(char *s1,char *s2)
{
char *temp;
temp=s1;
while(*s1)
s1++;
while(*s2)
{
*s1=*s2;
s1++;
s2++;
}
*s1='\0';
return temp;
}
没有#include <stdio.h>是我省略了的,但是我怎么就运行出来和你不一样啊?

不会吧?
我看了好长时间,好象没有什么错误啊?!
如果非要说,倒是有一个很严重的失误:你没有加包含gets函数的头文件stdio.h
为了证实我的看法,我特地找了个TC2.0
把你的代码前加了#include<stdio.h>
然后试了一下,结果如下:
1545
sdsc
this is:1545sdsc
hand
1546
this is:hand1546

在main()中的函数
char *user();
少了形参,应该改成
char *user(char *s1,char *s2)

重新写了一个C++版的,你参考一下吧.
#include <iostream>

using namespace std;

char *user(char *s1, char *s2)
{
int i;
for ( i=0; s2[i]!='\0'; i++)
s1[i] = s2[i]; //逐一复制字符串的内容
s1[i]='\0'; //设置字符串结束
return s1; //将字符串s1返回给user()
}
int main()
{
char string[50]; //声明原始字符串
char copystring[50]; //声明复制字符串

cout<<"\n请输入字符串: ";

cin>>string; //读取字符串存到变量string

user(c