c的库函数 strncpy(char* dest, char *src, int n),让人看一眼就觉得这个函数的行为应该是: 把src里的n个字节复制到dest中去,作用跟memcpy(char* dest, char *src, int n)一样. 其实是有区别的, strncpy会在n个字节复制完后,会追加一个0. 那我说的坑是: 如果strncpy在复制n个字节的过程中遇到0,则终止后续的字节复制,并在遇到0位置的后一位设置0,那么就是对dest写了两个0. 所以,对buffer复制,还是用memcpy. 下面用代码说明:
char dest[10] = {0}; char src[10] = {0}; memcpy(src, "hellow!!!", 9); //src的内容被设置 src[5] = 0;//src的第6个字节被设置为0 dest[6] = 'A';//dest的第7个字节被设置为A strncpy(buf1, sr, 9); //调用后, 在src的第6个位置遇到0,放弃了后续字节的复制,同时设置 //dest的第7个位置为0(并不会因为在第6个位置有0而不对第7个位置设置0)