有一个问题:
m_dir是类的一个char型数组,长度定义为256.
在某个功能函数中,定义一个变量:char tmp[100];
操作如下:
char tmp[100];
strncpy(tmp, m_dir, sizeof(tmp) -1);
tmp[sizeof(tmp) - 1] = '\0';
编译的时候有个警告:
x_directory.cpp:39:11: warning: ‘char* strncpy(char*, const char*, size_t)’ output may be truncated copying 99 bytes from a string of length 255 [-Wstringop-truncation]
strncpy(tmp, m_dir, sizeof(tmp) -1);
首先第一个分析与尝试:
就是m_dir定义的长度是256,tmp的长度只定义了100,把m_dir复制给tmp,长度会被截断。解决就是把tmp也定义成256长度就可以了。
然而编译警告还是存在。
第二个尝试方法:
把strncpy改成memcpy:
char tmp[256];
//strncpy(tmp, m_dir, sizeof(tmp) -1);
memcpy(tmp, m_dir, sizeof(tmp) - 1);
tmp[sizeof(tmp) - 1] = '\0';
编译没报警了。
总结:以后用strncpy的地方,都可以换成memcpy去实现。