wuxianbiao 发表于 2021-11-18 00:59:08

memcpy的问题

    char buff;
    int fd1 = open("message.txt", O_RDONLY);
    int length = 0;
    while (length = read(fd1, buff, sizeof(buff)) > 0)
    {
      
      char *data = (char *)malloc(104);
      memset(data, 0, 104);
      int dataLength = htonl(100);
      memcpy(data, &dataLength, 4);
      memcpy(data + 4, buff, 100);
      sendMessage(fd, data, 104);
      memset(buff, 0, sizeof(buff));
      free(data);
      data = NULL;
      usleep(1000);
    }

问题1:这里的length一直是1,为什么不是100?(message.txt有数据)
/问题2:gdb显示data一直是空,为什么buff的内容拷贝不到data中?

wuxianbiao 发表于 2021-11-18 01:00:21

困扰了一晚上,求大神指点。

wuxianbiao 发表于 2021-11-18 01:00:55

求助

洛阳城 发表于 2021-11-18 09:26:49

while (length = read(fd1, buff, sizeof(buff)) > 0)这个while里面的条件有问题,>的优先级高于=,所以在算完read(fd1, buff, sizeof(buff)) > 0后返回了true也就是1给length

wuxianbiao 发表于 2021-11-18 23:11:55

洛阳城 发表于 2021-11-18 09:26
这个while里面的条件有问题,>的优先级高于=,所以在算完后返回了true也就是1给length

那第二个问题呢?data我申请了空间,buff里面gdb显示也有内容,为什么是空?

wuxianbiao 发表于 2021-11-19 00:11:46

1 #include <arpa/inet.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 void main()
6 {
7   int a = 1677721600;
8   char *data = (char *)malloc(4);
9   memcpy(data,&a,4);
10   printf("%d\n",*data);   
11 }

wuxianbiao 发表于 2021-11-19 00:12:28

wuxianbiao 发表于 2021-11-19 00:11
1 #include
2 #include
3 #include


这里a是属于int的范围,为什么data打印出来是0?

wuxianbiao 发表于 2021-11-19 00:33:36

wuxianbiao 发表于 2021-11-19 00:11
1 #include
2 #include
3 #include


如果a=100,打印出来是100,但是1677721600应该也是在int的范围,为什么会这样?

wuxianbiao 发表于 2021-11-19 00:35:06

求助大神

洛阳城 发表于 2021-11-19 09:38:54

wuxianbiao 发表于 2021-11-18 23:11
那第二个问题呢?data我申请了空间,buff里面gdb显示也有内容,为什么是空?

因为while循环一直是真,所以data一直在被修改,可能会导致你所说的异常。另外,你倒数第6行的fd在程序里面没有定义,你定义的是fd

洛阳城 发表于 2021-11-19 09:39:33

wuxianbiao 发表于 2021-11-19 00:12
这里a是属于int的范围,为什么data打印出来是0?

你这里的a已经超出int的取值范围了,要用long long才能放得下了

洛阳城 发表于 2021-11-19 09:47:25

本帖最后由 洛阳城 于 2021-11-19 09:49 编辑

wuxianbiao 发表于 2021-11-19 00:33
如果a=100,打印出来是100,但是1677721600应该也是在int的范围,为什么会这样?

仔细算了一下好像也没错,int有4 bytes,所以取值范围是-(2^31-1)~(2^31-1),也就是-2147483648~+2147483647,确实包含1677721600

wuxianbiao 发表于 2021-11-21 09:23:58

洛阳城 发表于 2021-11-19 09:47
仔细算了一下好像也没错,int有4 bytes,所以取值范围是-(2^31-1)~(2^31-1),也就是-2147483648~+ ...

现在就是这个问题,fd是外面定义的。

wuxianbiao 发表于 2021-11-21 09:36:09

求助中
页: [1]
查看完整版本: memcpy的问题