'bzero'在此范围内未声明。

5
我已经包含了头文件。
使用这个函数。
bzero(&server, length);

但编译器报错:

错误:'bzero'在此范围中未声明

`


2
你为什么期望bzero被声明?标准库中并没有要求包含这样的函数。 - BeyelerStudios
我认为它只能在Linux/Mac OS上运行,而不能在Windows上运行。在这个视频教程https://www.youtube.com/watch?v=Emuw71lozdA中,我正确地按照C语言中UDP编程的代码进行了跟随,但似乎在Windows上无法工作。他们包括以下内容: #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> 然后使用bzero()函数可以在Linux上运行。 - User10259
@AldwaneLaytonBayarasViegan:这确实在Windows/C++中不起作用。即使在Linux上,它也是糟糕的C++代码。(请注意,C和C++是两种不同但相似的语言) - MSalters
如果你跟随 POSIX 链接,它会告诉你 bzero 函数被包含在 <strings.h> 而不是 <stdio.h> 中。http://pubs.opengroup.org/onlinepubs/009695399/functions/bzero.html。无论如何,你不应该再使用这个函数了,因为它已经被弃用。最好使用 memset 来代替它。 - Rndp13
4个回答

9

bzero()不是标准库的一部分,它属于POSIX。

现在它已经被弃用了(请注意手册中的LEGACY),所以考虑使用memset()代替。


2
在C++中,memset 应该是最后的选择。如果 server 不是一个数组,则 server = {}; 是一个不错的选择。如果它是一个数组,则使用 fill( begin(server), end(server), T{} ); - M.M

3
我正在尝试运行一些旧代码,但是遇到了错误。在我的导入之后,我刚刚插入了以下内容:
#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)

1
尝试添加<unistd.h>,这对于同时使用bzero和read有用。

1
你能详细说明为什么 unistd.h 是使用 bzero 的正确标头吗?这是否在标准中有规定? - bam

0

你应该包含 <string.h>。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接