sizeof

sizeof与strlen的区别及运用

喜欢而已 提交于 2020-02-21 22:29:37
sizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以/0结尾。 sizeof是一个C语言中的一个关键字,求的是数据类型所占空间的大小,而strlen是一个函数,用来计算字符串的长度,遇见/0就结束。 #include <stdio.h> int main(void) { char a[] = "abcdefg"; int b[4]; int m, n,u; m = sizeof(a); n = strlen(a); u = sizeof(b); printf("m=%d\n",m); printf("n=%d\n",n); printf("u=%d\n",u); return 0; } 运行结果: m=8 //计算的是数组a所占用的空间大小,包括结束符/0 n=7 //计算的是数组a中字符串的长度,不包括结束符/0 u=16 //计算数组b占用的空间大小,int是4字节,所以4*4=16 来源: https://www.cnblogs.com/qwcblog/p/12343291.html

[Python进阶] 列表与元组的比较

隐身守侯 提交于 2020-02-21 16:27:30
[Python进阶] 列表与元组 文章目录 [Python进阶] 列表与元组 一、基础知识 列表和元组常用的内置函数 二、列表和元组的存储方式 三、列表和元组的性能 四、列表和元组的使用场景 五、总结 一、基础知识 列表和元组,都是一个可以放置 任意数据类型 的有序集合,列表或元组中的元素数据类型不需要保持一致。 列表是 mutable 而元组是 immutable 。 Python中的列表和元组都支持负数索引,-1表示最后一个元素。 列表和元组都支持切片操作,且都可以随意嵌套。 两者可以通过 list() 和 tuple() 函数相互转换。 列表和元组常用的内置函数 count(item) 表示统计列表 / 元组中 item 出现的次数。 index(item) 表示返回列表 / 元组中 item 第一次出现的索引。 list.reverse() 和 list.sort() 分别表示原地倒转列表和排序(注意,元组没有内置的这两个函数)。 reversed() 和 sorted() 同样表示对列表 / 元组进行倒转和排序,但是会返回一个倒转后或者排好序的新的列表 / 元组。 二、列表和元组的存储方式 >> > l = [ 1 , 2 , 3 ] >> > l . __sizeof__ ( ) 64 >> > tup = ( 1 , 2 , 3 ) >> > tup . _

Struct 和 Union 的详细区别

自作多情 提交于 2020-02-21 02:06:21
Union: 共用体 Struct :结构体 两者的区别: 1 :共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量。 2 :对于共用体的不同成员赋值,将会对其他成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的 3 :内存分配不同 union 的大小为其内部所有变量的最大值,按照最大类型的倍数进行分配大小 如: typedef Union { char c[10]; char cc1; }u11; typedef union { char c[10]; int i; }u22; typedef union { char c[10]; double d; }u33; sizeof(u11) 结果是 10 sizeof(u22) 结果是 12 ,按照 sizeof(int)*3 分配空间 sizeof(u33) 结果是 16 ,按照 sizeof(double)*2 分配空间。 结构体 struct 非配方法类似,也是按照最大类型的倍数进行分配大小 , 但是还与顺序有关 如: typedef struct s1 { char c; double d; }s11; typedef struct s2 { char c; char cc; double d; }s22;

IO 多路转接 epoll

☆樱花仙子☆ 提交于 2020-02-20 01:15:28
read 函数返回值 >0 :实际读到的字节数 =0 :socket中,表示对端关闭 close() -1 : 如果errno = EINTR 被异常中断。需要重启。 如果errno =EAGIN 或 EWOULDBLOCK 以非阻塞的方式读数据,但是没有数据。需要再次读 如果errno = ECONNRESET 说明连接被重置。需要close()。 移除监听队列 错误 突破 1024 文件描述符限制 cat /proc/sys/fs/file-max 当前计算机能打开的最大文件个数。受硬件影响 ulimit -a -->当前用户下的进程。默认打开文件件描述符个数 缺省 为 1024 修改: 打开 sudo vi /etc/security/limits.conf 写入 * soft nofile 65536 -->设置默认值 可以直接借助命令修改【注销用户 使其生效】 * hard nofile 100000 --》命令修改上限 命令修改: ulimit -n 21000 突破 1024 文件描述符限制 cat /proc/sys/fs/file-max 当前计算机能打开的最大文件个数。受硬件影响 ulimit -a -->当前用户下的进程。默认打开文件件描述符个数 缺省 为 1024 修改: 打开 sudo vi /etc/security/limits.conf 写入 *

IO 多路转接 select

痴心易碎 提交于 2020-02-19 00:52:40
TCP状态时序图: 1.主动发起连接请求端: CLOSE --发送SYN--SEND_SYN --接受 ACK、SYN --SEND_SYN--发送 ACK --ESTABLISHED(数据通信状态) 2.主动关闭连接请求端; ESTABLISHED(数据通信状态) --发送FIN --FIN_WAIT_1 --接受 ACK --FIN_WAIT_2(半关闭) --接受对端发送 FIN --FIN_WAIT_2(半关闭) --回发 ACK --TIME_WAIT(只有主动关闭连接方会经历该状态) -- 等 2MLS时长(大约40s) --CLOSE 3.被动接受连接请求端: CLOSE -- LISTEN --接收 SYN -- LISTEN --发送 ACK SYN --SYN_RCVD --接收ACK --ESTABLISHED 4.被动关闭连接请求端: ESTABLISHED -- 接收 FIN --ESTABLISHED --发送ACK --CLOSE_WAIT (说明对端【主动关闭连接请求端】处于半关闭状态) --发送 FIN--LASK_ACK --接收ACK--CLOSE 重点记忆: ESTABLISHED 、FIN_WAIT_2 <->CLOSE_WAIT 、TIME_WAIT(2MLS) 2MLS时长: 一定出现在 主动关闭连接请求端 ---TIME_WAIT

windows socket client server 测试

时光怂恿深爱的人放手 提交于 2020-02-18 07:54:36
client.c: 1 //Client.cpp 2 #include "StdAfx.h" 3 #include <winsock2.h> 4 #include <stdio.h> 5 #include <windows.h> 6 #pragma comment(lib,"ws2_32.lib") 7 int main(int argc, char* argv[]){ 8 //判断是否输入了IP地址和端口号 9 if(argc!=3){ 10 printf("Usage: %s IPAddress PortNumber/n",argv[0]); 11 exit(-1); 12 } 13 //把字符串的IP地址转化为u_long 14 unsigned long ip; 15 if((ip=inet_addr(argv[1]))==INADDR_NONE){ 16 printf("不合法的IP地址:%s",argv[1]); 17 exit(-1); 18 } 19 //把端口号转化成整数 20 short port; 21 if((port = atoi(argv[2]))==0){ 22 printf("端口号有误!"); 23 exit(-1); 24 } 25 printf("Connecting to %s:%d....../n",inet_ntoa(*(in_addr*

UDP编程中client和server中使用recvfrom和sendto的区别

 ̄綄美尐妖づ 提交于 2020-02-18 07:54:15
client中: sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len); recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL); server中: recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr *)&caddr,&len); 将网络字节序的IP地址转换成字符串输出 // inet_ntoa : struct ip -> char *ip char *paddr = NULL; paddr = inet_ntoa(caddr.sin_addr); printf("client[%s] say:%s\n",paddr,buf); sendto(fd,buf,strlen(buf),0,(struct sockaddr *)&caddr,len); struct sockaddr_in saddr; socklen_t len = sizeof(saddr); sendto最后两个参数是(struct sockaddr *)&saddr【 saddr 是自己 新建的sockaddr_in型的变量】, len【len 是socklen_t型的变量 其值为sizeof(saddr)】在client和server的编程中相似。

后缀自动机专题

一笑奈何 提交于 2020-02-17 15:49:10
如果不算pre指针的话后缀自动机就是一个DAG,这是它能很方便地进行dp的前提。 而pre指针返回什么呢,返回的就是上一个的前缀包含改结点所代表子串的那个后缀,和AC自动机上的fail指针很像,都是为了匹配。我目前学得不深,看不出和AC自动机的fail指针有什么区别,用起来也几乎一样。 相比于字典树和回文树,后缀自动机每个结点会有多个父结点,可以表示多种子串(从根节点到它的每条路径都是一个子串),因此子串的信息只能在路径中记录,比如长度,而该子串说记录的长度step,则是根结点到它的最远距离,而某个子串的长度就是该代表该子串的路径的长度了,并不一定是某个结点的step。 spoj1811 求两个串的最长公共子串的长度。 对A串建立后缀自动机,对B串进行匹配,如果匹配失败,沿着失败指针往回走到第一个能匹配的位置继续匹配(看起来似曾相识?没错,这不是AC自动机的过程吗。。。),当然如果到根节点还不能继续匹配,那就只有从头再来了。这里随时记录长度更新答案即可。 当然后缀数组也可以做,把两个串拼接起来,求lcp即可。。。然后后缀自动机好快。。。。在spoj上居然60ms过了。。。 #include<bits/stdc++.h> #define REP(i,a,b) for(int i=a;i<=b;i++) #define MS0(a) memset(a,0,sizeof(a))

2020/2/17自定义协议的学习

前提是你 提交于 2020-02-17 15:22:45
1. 写一个自定义协议,封装了发送和接收message的模块,src/msg.c内容如下: #include "msg.h" #include <unistd.h> #include <string.h> #include <memory.h> #include <sys/types.h> // calculate check code 计算校验码函数 static unsigned char msg_check(Msg *message) { unsigned char s = 0; int i; for(i = 0; i < sizeof(message->head); i++) { s += message->head[i]; } for(i = 0; i < sizeof(message->buff); i++) { s += message->buff[i]; } return s; } //send a message: data in buff 把参数buff中的数据发送出去 int write_msg(int sockfd, char *buff, size_t len) { Msg message; memset(&message, 0, sizeof(message)); strcpy(message.head, "iotek2012"); memcpy

WinCE平台下BMP转JPG代码备份3

安稳与你 提交于 2020-02-17 14:30:15
1 //带参数的保存位图函数 2 BOOL FileOperate::bmpSaveImage(PTSTR pstrFileName, BITMAPFILEHEADER *pbmfh) 3 { 4 BOOL bSuccess ; 5 DWORD dwBytesWritten ; 6 HANDLE hFile; 7 8 hFile = CreateFile ( pstrFileName, GENERIC_WRITE, 0, NULL, 9 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ; 10 11 if (hFile == INVALID_HANDLE_VALUE) { 12 return FALSE ; 13 } 14 15 bSuccess = WriteFile (hFile, pbmfh, pbmfh->bfSize, &dwBytesWritten, NULL); 16 17 CloseHandle (hFile) ; 18 19 if (!bSuccess || (dwBytesWritten != pbmfh->bfSize)) { 20 DeleteFile (pstrFileName) ; 21 return FALSE ; 22 } 23 return TRUE ; 24 } 25 26 //**************