当前位置: 技术问答>linux和unix
为什么gets()在gcc编译时会报warning,且经socket发往server端只显示一个字符?
来源: 互联网 发布时间:2015-11-29
本文导语: 请问:为什么gets()在gcc编译时会报warning,且经socket发往server端只显示一个字符? 在linux下用c做一个简易的聊天小程序,代码大概如下: /*server.c*/ int accept() { while(1) { if (recv(...)==-1) { perror(...
请问:为什么gets()在gcc编译时会报warning,且经socket发往server端只显示一个字符?
在linux下用c做一个简易的聊天小程序,代码大概如下:
/*server.c*/
int accept()
{
while(1)
{
if (recv(...)==-1)
{
perror(...);
exit(1);
}
if (buf[0]=='q') break;
}
}
int main()
{
createsockect();
listen();
accept();
closesocket();
}
/*client.c*/
int connect()
{
while(1)
{
gets(buf);
if (buf[0]=='q') break;
if (send(...)==-1)
{
perror("send error");
exit(1);
}
}
}
int main()
{
createsocket();
connect();
closesocket();
}
在linux下用c做一个简易的聊天小程序,代码大概如下:
/*server.c*/
int accept()
{
while(1)
{
if (recv(...)==-1)
{
perror(...);
exit(1);
}
if (buf[0]=='q') break;
}
}
int main()
{
createsockect();
listen();
accept();
closesocket();
}
/*client.c*/
int connect()
{
while(1)
{
gets(buf);
if (buf[0]=='q') break;
if (send(...)==-1)
{
perror("send error");
exit(1);
}
}
}
int main()
{
createsocket();
connect();
closesocket();
}
|
是不是这个:
warning: the `gets' function is dangerous and should not be used.
看字面很容易理解,gets是一个危险的函数,因为它不检查边界,如果用户输入的字串长度大于buf长度,就会指针越界。
用fgets代替gets。
man fgets查找帮助
warning: the `gets' function is dangerous and should not be used.
看字面很容易理解,gets是一个危险的函数,因为它不检查边界,如果用户输入的字串长度大于buf长度,就会指针越界。
用fgets代替gets。
man fgets查找帮助
|
gets用于从标准的输入设备读入到参数中
gets无法知道s的大小。必须要到换行才可以结束,容易造成安全问题
buffer类的建议使用fgets
从socket接受数据建议使用recv
recvfrom
recvmsg
gets无法知道s的大小。必须要到换行才可以结束,容易造成安全问题
buffer类的建议使用fgets
从socket接受数据建议使用recv
recvfrom
recvmsg