#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. Но данные недействительны * я попытался отобразить значение, оно отображает ссылку на память, а не значение….