Получение содержимого, переносимого по ссылке

#c #gtk #glib

#c #gtk #glib

Вопрос:

У меня есть ссылка на объект string, как я могу получить из него данные. Вот мой пример:

 string key = "key1";
gpointer somepointer;

GHashTable* myTable;
g_hash_table_insert(myTable,amp;key1,somepointer);         

GList *keysList = g_hash_table_get_keys(myTable);// here i got keys previously set
keysList = g_list_first(keysList);
string recentKey = (keysList->data);
  

данные относятся к ссылке на строку. Как я могу извлечь данные из ссылки

Комментарии:

1. Если data это stringamp; (в действительное местоположение), то ваше заявление string recentKey = (keysList->data); является правильным. Вы пробовали печатать или проверять это?

Ответ №1:

Если keysList->data есть gpointer ( void* ), я предполагаю, что требуется какое-то приведение, подобное следующему:

 string recentKey = *(string*)keysList->data;
  

Надеюсь, это поможет

Ответ №2:

Если данные являются ссылкой на строку, то,

keysList->data возвращает строку.

 #include<iostream>
#include <cstring>
#include <string>

using namespace std;

int main()
{
    string MyString("ABCD");
    string amp;MyString2 = MyString;
    char * cstr;

    cout<<"n"<<MyString;
    cout<<"n"<<MyString2;

    cstr = new char [MyString.size() 1];
    strcpy (cstr, MyString.c_str());

    cout<<"n"<<cstr;
    delete[] cstr; 

    return 0;
}
  

Ответ №3:

Что вы имеете в виду, говоря «Как я могу извлечь данные из ссылки?» Вы пробовали просто делать это?

Единственными данными в std::string являются длина строки и массив полезной char* нагрузки.
keysList->data.length() получит доступ к длине, в то время как keysList->data.c_str() получит доступ к char* массиву.

Ваше последнее утверждение — это получение данных из ссылки:

 string recentKey = (keysList->data);
  

Этот оператор создает полную копию строки. Поскольку это копия, любые изменения в recentKey не будут отображаться в keysList->data . Хорошо это или плохо, зависит от ваших намерений.

Комментарии:

1. Но данные недействительны * я попытался отобразить значение, оно отображает ссылку на память, а не значение….