関数への構造体ポインタを渡しました。私が必要とするのは、main関数内の文字列 "connection refused"(ssh_get_error()からの戻り値)を取得することです。他の関数で変更された構造体のcharポインタメンバーから値を取得する方法
#include <libssh/libssh.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
typedef struct rtns {
bool state;
char* desc;
} rtns;
int connect_host(rtns *con_host) {
const char* desc;
char desc2[1000];
ssh_session my_ssh_session;
int rc;
my_ssh_session = ssh_new();
if (my_ssh_session == NULL)
exit(-1);
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "localhost");
rc = ssh_connect(my_ssh_session);
if (rc != SSH_OK) {
(*con_host).state = false;
desc = ssh_get_error(my_ssh_session);
strcpy(desc2, ssh_get_error(my_ssh_session));
(*con_host).desc = strdup(desc2);
cout << "from connect_host function->" <<con_host->desc << "\n";
} else {
(*con_host).state = true;
}
ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
}
int main() {
rtns con_host;
rtns *p = (rtns*) malloc(sizeof(struct rtns));
p = (rtns*) malloc(20);
connect_host(&con_host);
cout << "from main function->" << *(con_host.desc) << "\n\n";
}
出力 -
from connect_host function->Connection refused
from main function->C
問題は、私が唯一の主要な機能で1文字 "C" を取得していますということです。私はいくつかのアイデアを私は間違ったメモリ割り当てを行っているが、私はそれを正しく行う方法がわからない。私はまた、con_host関数でmalloc割り当てをシフトしようとしましたが、どちらもうまくいきませんでした。
mallocの部分は必要ありませんか?私はそれを再実行し、それなしで動作しています。しかし、インターネット上では、構造体の文字ポインタが最初にメモリを割り当てる必要があることがわかりました。説明していただけますか? –
@ RishabhSoniあなたはそれをいくつかのメモリに割り当てます。 [strdup](http://en.cppreference.com/w/c/experimental/dynamic/strdup)を参照してください。それはあなたのための文字列のメモリを作成します、実際にあなたは後で文字列をクリアするには無料で呼び出す必要があります。 –