1、recfrom缓冲区越界,这个问题很典型,先了解一下这个函数。
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
当创建一个char buffer1024,此时有一个缓冲区,但是我在写udp编程的时候出现了一个错误就是这么写的。int n=recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)from,&len);
buffern='\0',这么写看似正确对吧,但是有一个错误,就是,n就是接受到的数据大小,我们设置的就是1024,当超过这个大小的时候对吧此时buffern,就已经超过了这个buffer的范围,此时就会越界,所以必须这么写int n=recvfrom(sockfd,buffer,sizeof(buffer)-1,0,(struct sockaddr*)from,&len);
2、先写一段代码,char buffer1024; (string)buffer,这个是一个c风格强转,内存很多都是不同的所以此时就会导致报错,所以需要这么些string(buffer);这样就会去调用正确的构造函数,此时就不会有问题了。
3、char buffer1024;当使用cin>>buffer此时如果用户输入的过多就会导致栈溢出。此时推荐更安全的做法,char buf1024; getline(buf,sizeof(buf));
4、find找不到的话返回的是string npos;
5、char,string如果sendto时大小用strlen,因为strlen返回的是使用的大小,比如说hello world就是11不含'\0',如果用sizeof(buffer),此时就会把1024全部给sendto,光传一堆垃圾值,但是strlen不是无脑使用,必须还有'\0',所以上边哪里都是推荐带'\0'的在自己弄的char数组里边。
6、
这一个坑也是比较隐蔽的,可能是有一段时间没有写C++的缘故,这个问题也需要注意右值不能和非const引用。下图为改正
