问题描述
我正在将一些代码迁移到u18,看来poisix写函数更改了签名
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结尾的字符串。它通过检查size参数来工作,并且不会像字符串处理函数那样寻找空终止。
但是,如果您要向文件中写入一个字符-空终止符,则正确的方法是:
write(output,"",1);