我正在尝试使用strlen来打印字符串的长度。我知道它的长度为2个字节。但是,strlen返回零。有人可以解释一下为什么?请帮我。
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int16_t f = -105;
unsigned char *s = malloc(2+1);
uint16_t m = htons((uint16_t)f);
memcpy(s,(unsigned char*)&m, 2);
int16_t v = s[0] << 8 | s[1];
printf("%i \n",m);
printf("%i \n",v);
printf("%zu \n", strlen(s));
return 0;
}
答案 0 :(得分:1)
如果要将uint16_t写入文件描述符
Observable
.Defer(() => Observable.FromAsync(SomeAsync))
.Catch<T, CustomException>(exception => ShouldRetry(exception) ? ____ : Observable.Throw<T>(exception));
此处无需使用字符串或缓冲区。
如果您需要编写多个值,可以使用缓冲区。一个小例子。
int socket;
...
uint16_t m = htons(-105);
write(socket, &m, sizeof(m));
答案 1 :(得分:0)
您将数字的一部分复制到数组
memcpy(s,(unsigned char*)&m, 2);
可能会出现这种情况,因此数组的第一个字节将等于0,而strlen也将返回0.
函数strlen
计算字节,直到遇到零字节。