Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:“;改为:“地址不正确”;及;写:“地址不正确”;_C_Linux_Unix_System - Fatal编程技术网

C:“;改为:“地址不正确”;及;写:“地址不正确”;

C:“;改为:“地址不正确”;及;写:“地址不正确”;,c,linux,unix,system,C,Linux,Unix,System,我想使用FIFO和客户机获取目录路径的服务器客户机模型,但我得到错误“读取:错误地址”和“写入:错误地址” 客户端 服务器错误:“读取:错误地址” 客户端错误:“write:Bad address”您可能误用了read和write的返回值。成功后,它们返回正值,您将其作为错误处理 另外,在读取字符串时,字符串的大小是未知的。所以strlen是不合适的 if( (controlRead = read(fdp,pathName,sizeof(pathName)) ) <= 0) {

我想使用FIFO和客户机获取目录路径的服务器客户机模型,但我得到错误“读取:错误地址”和“写入:错误地址”

客户端

服务器错误:“读取:错误地址”


客户端错误:“write:Bad address”

您可能误用了
read
write
的返回值。成功后,它们返回正值,您将其作为错误处理

另外,在读取字符串时,字符串的大小是未知的。所以strlen是不合适的

 if( (controlRead = read(fdp,pathName,sizeof(pathName)) ) <= 0)
 {
     // error ...
阅读:

void read_string(int fd, char *buffer, size_t size, size_t *len)
{
    size_t t_len;

    read(fd, &t_len, sizeof(t_len));
    if (t_len > size) t_len = size;
    read(fd, buffer, t_len);
    if (t_len < size) buffer[t_len] = 0; // null-terminate if there is enough space
    if (len) *len = t_len; // return length if wanted
}
void read\u string(int-fd,char*buffer,size\t size,size\t*len)
{
尺寸;
读取(fd和t_len,尺寸(t_len));
如果(t_len>size)t_len=size;
读取(fd、缓冲器、t_len);
如果(t_len
阅读一些关于C编程和Linux编程的好书。使用
strlen(路径名)
作为
read
的长度参数确实是错误的,这表明您很困惑。。。在花了一两天的时间阅读好的材料后,再次编写程序,使用
gcc-Wall-g
进行编译,直到没有警告为止,然后使用
gdb
调试器对其进行调试。不,
strlen(路径名)
应该是
sizeof(路径名)
@BasileStarynkevitch是的,也是这个。非常感谢。
void read_string(int fd, char *buffer, size_t size, size_t *len)
{
    size_t t_len;

    read(fd, &t_len, sizeof(t_len));
    if (t_len > size) t_len = size;
    read(fd, buffer, t_len);
    if (t_len < size) buffer[t_len] = 0; // null-terminate if there is enough space
    if (len) *len = t_len; // return length if wanted
}