c - 如何将 '\0' 转换为 const void*?

标签 c posix

我正在将一些代码迁移到 u18,并且 poisix write 函数似乎更改了签名

ssize_t write(int fd, const void *buf, size_t nbytes);

调用过去是 write(output, '\0', 1);

但是我会在 u18 上遇到异常 error: invalid conversion from 'char' to 'const void*'

初始化空字符数组的正确方法是什么?

最佳答案

初始化 C 字符串字符数组的正确方法是 "",它是一个空字符串文字,只包含一个空终止符。 ""'\0' 之间的区别在于前者有一个内存位置 - 它是一个衰减为指针的数组,因此您可以将指针分配给直接它。而'\0'只是一个字符常量,没有内存位置。

但是,对于 Linux write,您不需要提供以 null 结尾的字符串。它通过检查大小参数来工作,并且不会像字符串处理函数那样寻找空终止。

但是如果您想将一个字符(空终止符)写入文件,那么正确的方法是:

write(output, "", 1);

关于c - 如何将 '\0' 转换为 const void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63735559/

相关文章:

c - ENXIO 对于 i2c ioctl 意味着什么?

c++ - 如何发现Linux系统内存泄漏?

c++ - 使用c++在当前运行的进程中获取X显示变量

c - 如何在 C 中将 float 放入 char 数组中?

c - 消息队列中的目的是什么

c - C 中的运算符优先级

在 shell 中用管道连接 n 个命令?

java - 不区分大小写的 POSIX 正则表达式在 Java Pattern & Matcher 中不区分大小写

c - 如果线程在调用 pthread_mutex_lock() 时没有成功,会发生什么情况?

linux - 如何识别长时间运行的进程是否死亡?