char* 转QByteArray
如果这样写
char RECV[10]={'a','b','c','d','e','f','g','h','k','l'};
QByteArray DataContent = QByteArray(RECV);
这样得到的结果又可能是错的,需要这样写
char RECV[10]={'a','b','c','d','e','f','g','h','k','l'};
QByteArray DataContent = QByteArray(RECV,10)
QByteArray转 char*
如果是这样
strcpy(rebackData,DataContent.data());字符串赋值没问题,结构体赋值就出错了。
strcpy字符串复制,不仅会复制其字符串就连其结尾的字符‘\0’也会被复制过去,其复制遇到\0后就结束了;
而memcpy就不一样了,他是内存复制,他不仅可以复制字符串还可以复制任意内容,如字符串数组,结构体等;而且memcpy并不会遇到\0就结束,而是复制你在第三个参数中指定的字节数。
相对而言,memcpy要比strcpy用途要广泛的多,一般我们只需要复制字符串就可以选择strcpy,但是数组或者结构体,那就不要犹豫了,直接上memcpy吧。
memcpy_s,strcpy_s函数明确的指定了目标内存的大小,能够清晰的暴露出内存溢出的问题,而普通的strcpy,memcpy则不会。为了保证内存拷贝有足够的空间,防止笔误,尽量使用memcpy_s代替memcpy。
本文详细解析了C++中char*与QByteArray之间的转换方法,强调了正确使用QByteArray(RECV, size)的重要性,避免内存溢出风险。同时对比了strcpy与memcpy的功能与适用场景,推荐使用memcpy_s确保内存拷贝的安全。

569

被折叠的 条评论
为什么被折叠?



