我创建了一个低级包装函数,用于在 C 中写入:
void MyWrite(int fd, unsigned char *buffer, unsigned int length){
len=write(fd, buffer, len);
printf("Output Length = %u \n", len);
}
现在当我发送以下内容时:
MyWrite(fileDescriptor, 0, 1);
导致段错误的命令
编辑:
我想写入 ASCII 值 0
而不是 ASCII 字符 48,即 '0'
最佳答案
是的,这很明显。您本质上将缓冲区
作为NULL (0
)传递。
当write()
尝试从NULL地址读取数据时,最明显的副作用将是undefined behaviour .
您需要传递一个有效的指针,从中可以正确读取数据。当您编写包装器时,我建议为包装器内的传入指针添加 NULL 检查。
<小时/>编辑:
如果要写入数字0
,则需要传递包含该值的缓冲区。一些伪代码:
unsigned char val = 0;
MyWrite(fileDescriptor, &val, 1);
关于c - 低电平写入段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666499/