1.在计算malloc这种手动分配的空间大小的字符串中,不能简单用strlen和sizeof来进行空间大小的计算,这两个都不能得到你想要的值。
如:
char *str = (char*)malloc(100);
memset(str,0,100);
memcpy(str,"hello",strlen("hello"));
printf("strlen = %d\n",strlen(str)); //strlen = 4
printf("sizeof = %d\n",sizeof(str)); //sizeof = 4
2.在运用memcpy和strcpy两个上面,后者是在复制的过程中遇到'\0'后自动停止复制拷贝,而前者是有多大复制多大。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
3.wireshark抓取本地包
在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己和自己通信。但是wireshark此时是无法抓取到数据包的,需要通过简单的设置才可以。
具体方法如下:
①:以管理员身份运行cmd
②:route add 本机ip mask 255.255.255.255 网关ip
此时再利用wireshark进行抓包便可以抓到本机自己同自己的通信包
在命令行提示下面输入: route add 192.168.10.10 mask 255.255.255.255 192.168.10.1 metric 1 就这么简单!其中192.168.10.10是自己的IP,192.168.10.1是自己的网关
使用完后使用delete替换add将这个给删除掉,不然每次本机包都往外面兜一圈再回来费时间。
4.当你频繁读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)
5.C++中的c_str()的使用,这个函数主要针对的就是C++的string类型的字符串,具体使用方式如下:
语法:
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
比如:最好不要这样:
char* c;
string s="1234";
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:char c[20];
string s="1234";
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作再举个例子
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = "Hello World!";
printf("%s", s.c_str()); //输出 "Hello World!"