指针传递有关问题,指针作为返回参数返回,成功接收后在传递给其他函数

指针传递问题,指针作为返回参数返回,成功接收后在传递给其他函数
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>


#define BACKLOG 10

/*服务器端套接字*/
int socketserver (char *pcPort)
{
printf("socket服务端开始\n");

/*变量定义*/
int iListen; /*监听套接字描述符*/
int iTransfer; /*数据传送套接字描述符*/
int iJudge = 0; /*存储返回值判定操作是否成功*/
int iIndex = 0; /*索引标记*/
int iLengthaddr = sizeof(struct sockaddr_in); /*存储地址长度*/
int iFor; /*for语句变量*/
int iRet;
struct sockaddr_in stLocaladdr; /*本机地址信息存放地址结构体*/
struct sockaddr stRemoteaddr; /*远端地址信息存放地址结构体*/


printf("服务端输出pcPort指针字符串为%s\n", pcPort);

/*创建套接字*/
iListen = socket(AF_INET, SOCK_STREAM, 0); /*创建socket,互联网协议族,面向TCP协议联系*/
if(iListen == -1)
{
printf("socket创建失败\n");
return 0;
}
else
{
printf("socket创建成功\n");
printf("socket ID是 %d\n", iListen);
}


/*地址结构题初始化*/
bzero (&stLocaladdr, sizeof(stLocaladdr));
stLocaladdr.sin_family = AF_INET; /*socket使用TCP协议族*/ 
stLocaladdr.sin_port = htons(atoi(pcPort)); /*端口的字节顺序转换成网络顺序的字节*/
stLocaladdr.sin_addr.s_addr = htonl(INADDR_ANY);

printf("端转换为数字端口值为%d\n", atoi(pcPort));


/*绑定服务器地址、端口和socket */
iJudge = bind(iListen, (struct sockaddr*)&stLocaladdr, sizeof(stLocaladdr));
if(iJudge == -1)
{
printf("绑定本机地址信息出错\n");
return 0;
}
else
{
printf("绑定地址成功\n");
printf("绑定端口为%d\n", htons(atoi(pcPort)));
printf("绑定IP地址为%ld\n", htonl(stLocaladdr.sin_addr.s_addr));
}


/*启用监听*/
iJudge = listen(iListen, BACKLOG); /*监听最大完成连接队列数为10*/
if(iJudge == -1)
{
printf("监听出错\n");
perror("listen");
}
else
{
printf("listenning......\n");
}

/*接受链接请求*/
while(1)
{

iTransfer = accept(iListen, (struct sockaddr*)&stRemoteaddr, &iLengthaddr);

if (iTransfer == -1)
{
printf("接受连接请求失败\n");
perror("accept");
continue;
}

if(!fork()) 
{
/*接收客户端发送消息*/
iRet = recv(iTransfer, &stRemoteaddr, sizeof(stRemoteaddr), 0);
if(iRet < 0)
{
printf("接收失败\n");
}
else
{
printf("接收成功\n");
}
}
}

close(iListen); /*关闭监听套接字*/
return 0;
}


char * pubetc(char *pcMark)
{
FILE *pfile;
char sLine[100];
char *p;

pfile = fopen ("/home/socket/etc/etc", "rb");

if (pfile == NULL)
{
printf ("打开文件失败\n");
getchar(); /*等待输入任意键结束*/
return 0;
}

/*一行一行获取配置文件中数据*/
while(fgets(sLine, sizeof(sLine), pfile))
{

if(memcmp(sLine, pcMark, strlen(pcMark)) == 0) /*找到文本中指定标记的一行*/
{
p = strtok(sLine, pcMark);
break;
}
}
printf("pubetc函数返回数据%s\n", p);
return p;
}


int main()
{
char * pcPort;
pcPort = pubetc("PORT:");
printf("main函数中获得的pcPort值为%s\n", pcPort);
socketserver(pcPort);

return 0;
}


配置文件内容
IP:127.0.0.1
PORT:5555
KEY:1024
TIME:3


运行输出结果为
pubetc函数返回数据5555

main函数中获得的pcPort值为5555

socket服务端开始
服务端输出pcPort指针字符串为B B€
socket创建成功
socket ID是 4
端转换为数字端口值为0
绑定地址成功
绑定端口为0
绑定IP地址为0
listenning......

为什么在main函数和pubetc函数中都能成功输出正确的结果,而传递到socketserver函数中输出的就是不是正确结果了??