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中? 困扰了一晚上,求大神指点。 求助 while (length = read(fd1, buff, sizeof(buff)) > 0)这个while里面的条件有问题,>的优先级高于=,所以在算完read(fd1, buff, sizeof(buff)) > 0后返回了true也就是1给length 洛阳城 发表于 2021-11-18 09:26
这个while里面的条件有问题,>的优先级高于=,所以在算完后返回了true也就是1给length
那第二个问题呢?data我申请了空间,buff里面gdb显示也有内容,为什么是空? 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:11
1 #include
2 #include
3 #include
这里a是属于int的范围,为什么data打印出来是0? wuxianbiao 发表于 2021-11-19 00:11
1 #include
2 #include
3 #include
如果a=100,打印出来是100,但是1677721600应该也是在int的范围,为什么会这样? 求助大神 wuxianbiao 发表于 2021-11-18 23:11
那第二个问题呢?data我申请了空间,buff里面gdb显示也有内容,为什么是空?
因为while循环一直是真,所以data一直在被修改,可能会导致你所说的异常。另外,你倒数第6行的fd在程序里面没有定义,你定义的是fd wuxianbiao 发表于 2021-11-19 00:12
这里a是属于int的范围,为什么data打印出来是0?
你这里的a已经超出int的取值范围了,要用long long才能放得下了 本帖最后由 洛阳城 于 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 洛阳城 发表于 2021-11-19 09:47
仔细算了一下好像也没错,int有4 bytes,所以取值范围是-(2^31-1)~(2^31-1),也就是-2147483648~+ ...
现在就是这个问题,fd是外面定义的。 求助中
页:
[1]