如何解决这个错误Error C2039: 'sprintf_s' : is not a member of '`global namespace''

liangchaoxi 2014-10-08 08:47:09


拷贝了下面的代码放到VS2010上,却遇到这个C2039 err,怎么解决呀??


error C2039: 'sprintf_s' : is not a member of '`global namespace''



http://blog.csdn.net/zaffix/article/details/7274627

01.#include <iostream>   
02.#include <WinSock2.h>
03.
04.const unsigned short LISTEN_PORT = 8700;
05.
06.int main(int argc, char* argv[])
07.{
08. using namespace std;
09.
10. WORD wVersionRequested = MAKEWORD(1, 1);
11. WSADATA wsaData;
12.
13. int err = WSAStartup(wVersionRequested, &wsaData);
14. if ( 0 != err )
15. {
16. cout<<"WSAStartup failed. return: "<<err<<endl;
17. return -1;
18. }
19.
20. if ( wsaData.wVersion != wVersionRequested )
21. {
22. cout<<"wsaData.wVersion: "<<wsaData.wVersion<<" is not equal to wVersionRequested: "<<wVersionRequested<<endl;
23. WSACleanup();
24. return -2;
25. }
26.
27. SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
28. if ( INVALID_SOCKET == sock )
29. {
30. cout<<"socket error: "<<WSAGetLastError()<<endl;
31. return -3;
32. }
33.
34. SOCKADDR_IN addr_server;
35. addr_server.sin_family = AF_INET;
36. addr_server.sin_port = htons(LISTEN_PORT);
37. addr_server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
38.
39. err = bind(sock, (SOCKADDR*)&addr_server, sizeof(addr_server));
40. if ( SOCKET_ERROR == err )
41. {
42. cout<<"bind error: "<<WSAGetLastError()<<endl;
43. return -4;
44. }
45.
46. err = listen(sock, SOMAXCONN);
47. if ( SOCKET_ERROR == err )
48. {
49. cout<<"listen error: "<<WSAGetLastError()<<endl;
50. return -5;
51. }
52.
53. cout<<"Start listening on port "<<LISTEN_PORT<<endl;
54.
55. SOCKADDR_IN addr_client;
56. int addrlen = sizeof(addr_client);
57.
58. while (true)
59. {
60. SOCKET sock_con = accept(sock, (SOCKADDR*)&addr_client, &addrlen);
61. if ( INVALID_SOCKET != sock_con )
62. {
63. cout<<inet_ntoa(addr_client.sin_addr)<<":"<<ntohs(addr_client.sin_port)<<" connected!"<<endl;
64.
65. char recv_buf[256];
66. char send_buf[512];
67.
68. while (true)
69. {
70. err = recv(sock_con, recv_buf, sizeof(recv_buf), 0);
71. if ( err <= 0 )
72. {
73. cout<<"recv error: "<<WSAGetLastError()<<endl;
74. break;
75. }
76.
77. sprintf(send_buf, "%s:%d said: %s", inet_ntoa(addr_client.sin_addr), ntohs(addr_client.sin_port), recv_buf);
78.
79. cout<<send_buf<<endl;
80.
81. sprintf(send_buf, "you said: %s", recv_buf);
82.
83. err = send(sock_con, send_buf, strlen(send_buf) + 1, 0);
84. if ( SOCKET_ERROR == err )
85. {
86. cout<<"send error: "<<WSAGetLastError()<<endl;
87. break;
88. }
89. }
90.
91. cout<<inet_ntoa(addr_client.sin_addr)<<":"<<ntohs(addr_client.sin_port)<<" left!"<<endl;
92.
93. err = closesocket(sock_con);
94. if ( SOCKET_ERROR == err )
95. {
96. cout<<"closesocket error: "<<WSAGetLastError()<<endl;
97. }
98. }
99. else
100. {
101. cout<<"accept error: "<<WSAGetLastError()<<endl;
102. }
103. }
104.
105. WSACleanup();
106.
107. return 0;
108.}
...全文
1287 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhubo_1117 2014-10-17
  • 打赏
  • 举报
回复
楼主要包含<stdio.h>头文件就可以了。
liangchaoxi 2014-10-16
  • 打赏
  • 举报
回复
引用 3 楼 tiger9991 的回复:
楼主错误是报在现有名称空间找不到对应的函数。 sprintf_s不需要名称空间。载入对应的.h文件就能解决
我这个直接拷贝别人的代码放到编译器 编译的,为什么别人没有报这个错误,而我却报了呢,不解
傻X 2014-10-09
  • 打赏
  • 举报
回复
楼主错误是报在现有名称空间找不到对应的函数。 sprintf_s不需要名称空间。载入对应的.h文件就能解决
l357630798 2014-10-09
  • 打赏
  • 举报
回复
如果添加#include <stdio.h>还是好不了, 会不会前面还有代码使用命名空间,没使用好。
oyljerry 2014-10-09
  • 打赏
  • 举报
回复
#include "stdio.h"

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧