你这段代码错了很多地方。首先从socket取得数据的时候就应该得到数据块的大小。这个一般是从数据包解析出来,或者`recv()`,`read()`等函数都可以得到数据包的大小。
其次,复制数据的时候错了。应该是`memcpy(name, dirlistbuf, sizeof(name));`你的第一个参数多个一个`&`。`name`本身被声明为一个数组,数组名实际上就是`const char*`指针。真奇怪你这段代码竟然可以跑起来没报内存错误。
C语言的`char *`使用`\x0`结束一个字符串,在`\x0`之后的字符是无意义的字符。所以你在调用`QString::fromLocal8Bit()`时,第二个参数应该传入字符串的实际长度,而不是`sizeof(name)`。你应该用`strnlen()`函数来代码`sizeof(name)`。
你的基础知识应该很不牢靠。如果真的打算学好C++的话,建议拿本《C++ Primer》、《The C++ Programming Language》好好看看。