strlen对于两个字节的字符串显示0

时间:2016-11-17 09:59:20

标签: c memcpy

我正在尝试使用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;
}

2 个答案:

答案 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计算字节,直到遇到零字节。