使用memcpy的垃圾

Sam*_*tac -1 c++ arrays string char

我正在使用memcpy将特定数量的字符从char数组复制到char*.但是当我读到char*时,最终总是垃圾.

我正在使用libssh2 lib向我的raspberry pi发送命令并接收输出.

libssh2_channel_read将返回输出的字符数,int x输出文本将在char buffer[32].

我正在使用的代码:

char buffer[32];
int x = libssh2_channel_read(channel, buffer, sizeof(buffer));
char * output = (char *)malloc(sizeof(char)*x);
memcpy(output, buffer, x-2); // x - 2 because of "\r\n"
libssh2_channel_free(channel);
channel = NULL;
cout << output << endl;
Run Code Online (Sandbox Code Playgroud)

输出示例:

0??²²²²
Run Code Online (Sandbox Code Playgroud)

我只想要 0

jan*_*anm 7

欢迎使用C++.

您正在复制您关心的值,但不会复制终止的'\ 0'字符.假设x有效(即:x> 3且x <= sizeof(缓冲区)),您可以说:

output[x - 2] = '\0';
Run Code Online (Sandbox Code Playgroud)

打电话给memcpy()你后,你应该得到你所期望的.

但是:当你处理这样的通信和缓冲时,你需要小心并检查所有内容.