首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符数组指针传递有关问题,在配置文件函数、main函数中输出指针值都正确,为什么传递给socketserver中就不对了呢?多谢

2012-09-13 
字符数组指针传递问题,在配置文件函数、main函数中输出指针值都正确,为什么传递给socketserver中就不对了呢

字符数组指针传递问题,在配置文件函数、main函数中输出指针值都正确,为什么传递给socketserver中就不对了呢?谢谢
#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;
 
 memset(sLine, 0x0, sizeof(sLine));
 pfile = fopen ("/home/swhx/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


在配置文件函数、main函数中输出指针值都正确,为什么传递给socketserver中就不对了呢?谢谢

[解决办法]
strtok的问题,它返回了局部变量数组,而后该返回值被外部使用
[解决办法]
ls看的准,变量生命周期都结束了。

你还操作。。


热点排行