sizeof的结果与字符串的大小不同

时间:2019-01-18 11:50:52

标签: c linux string pointers

为什么“ Hello World !!”的大小是多少?只显示为8? 我正在尝试通过TCP客户端/服务器程序中的send()发送此消息,并且由于sizeof似乎无法正确读取而无法发送整个字符数组

char *message = "Hello World!!";
int test = sizeof message;
int test2 = sizeof 'H';
printf("%d", test);
printf("%d", test2); 

结果:

(gdb)打印测试

$ 1 = 8

(gdb)打印测试2

$ 2 = 4

这是我程序中仅发送“ Hello Wo”的代码片段

if((numbytes = send(sockfd, message, sizeof message, 0)) == -1){
    perror("recv");
    exit(1);
}

1 个答案:

答案 0 :(得分:4)

此:

char *message = "Hello World!!";
int test = sizeof message;

返回指针的大小,在您的系统中,该大小为8。

Size of pointer of integer type vs Size of int*中了解更多信息。

正如@SomeProgrammerDude所说,请使用strlen()来获取C字符串(即以null终止的字符串)的长度。