LINUX.ORG.RU

Изменить тип данных строки..

 , , ,


0

1

Вот получаю данную ошибку:

In function ‘void app_activate(GApplication*, gpointer)’:test.cpp:62:52: error: cannot convert ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const char*’
   62 |         label = gtk_label_new( GetStdoutFromCommand("netstat -tuwapn"));std::string {aka std::__cxx11::basic_string<char>}

Не понимаю, как изменить тип данных с std::string на const char* на чистом «linux c++»?



Последнее исправление: xaizek (всего исправлений: 1)

У std::string есть метод c_str().

Главное помнить, что возвращаемая сишная строка живёт столько же сколько и std::string, то есть это не копия строки.

fsb4000 ★★★★★
()
Ответ на: комментарий от rumgot

Работает c_str() . Хорошо, при оформлении кода, использую апострофы <?php echo "test"; ?> и FILE * stream; const int max_buffer = 256; char buffer[max_buffer]; cmd.append("&1"); Программа моя .. network monitor traffic https://ibb.co/nnQJ9zn

wersto8top
() автор топика
Ответ на: комментарий от wersto8top

Давай уже, покажи нам как надо! Стань миллиардером!

LamerOk ★★★★★
()
Ответ на: комментарий от anonymous

Изменить тип данных строки..

(const char*) stdString.data()

А можете так: (float *) (INT ) (const char) stdString.data()

Компилятор вам поверит на слово, что вам так нужно …

anonymous
()
Ответ на: комментарий от anonymous

Руки крюки …

(float *) (INT *) (const char *) stdString.data()

anonymous
()
Ответ на: комментарий от PhysShell

Я пользуюсь поисковиками Google,Yandex..но говорю же, в 2009-2011 годах, мне Google показывал в поиске множество примеров исходных кодов с того, же github…а сейчас, в 2021 году, я ищу в Google, почти ничего не находит..А в Yandex, искать не вариант, в нем, обычно ищутся исходные коды, только «базовые», только «под ру»..

wersto8top
() автор топика
Ответ на: комментарий от wersto8top

И что тут не даёт читать доку? С примерами? Или в самом GH набрать поиск? Ты же понимаешь, что MS не зря отвалило 35 лярдов?

Not_a_Troll
()
Ответ на: комментарий от Not_a_Troll

Поисковик duckduckgo.com работает в обычном интернете у меня и в tor…но он также почти ничего не находит.Я не понимаю, этоже обычные исходные коды, которые должны быть доступны, таким как я из рф, снг, уа..Т.к. я пытаюсь создать приложения/игры/программы для нормальных интернет-сторов, типа github, sourceforge и других.А windows не буду устанавливать, он на моем слабом ноутбуке работает «медленно» и «с тормозами».

wersto8top
() автор топика
Ответ на: комментарий от wersto8top

А я создаю биологическую жизнь. А на луну не буду лететь, у меня корабль «красный» и «ролики».

Такое ощущение, что со мной разговаривает бот-шизофреник. Создателю респект.

Not_a_Troll
()
Ответ на: удаленный комментарий

Интернет, «на гражданке» по рф.уже более 22 лет, к 2021 году…CIA (USA) выгодно, чтобы люди, писали на «гражданских» технологиях приложения, игры, программы для интернет-сторов github.com, sourceforge.net, google play, appstore, wordpress.org/themes, wordpress.org/plugins, codecanyon.net , themeforest.net , packages.ubuntu.com , snapcraft.io , launchpad.net , huawei store и других….у почти всех «таких» «из рф» разработчиков ноутбуки с разрешением экранов 1366x768 и 1920x1080 и настольные компьютеры с экранами чуть более большего разрешения.. CIA (USA) может запустить в рф «на гражданку» исходные коды для разработки программного обспечения (игры, приложения) для этих интернет-сторов.

wersto8top
() автор топика
Ответ на: комментарий от wersto8top

На скрине все ссылка ведут на исходные тексты GitHub.

Кажется ты нас обманываешь

поиске множество примеров исходных кодов с того, же github…а

IIIypuk ★★★★
()
Ответ на: комментарий от yoghurt

The returned array is not required to be null-terminated. Ну и зачем такое советовать

Если он так сделает из нормальной строки, то указатель будет на НОРМАЛЬНУЮ строку.
Но ТС чегой-то там хочет НЕОБЫЧНОГО …

anonymous
()
Ответ на: комментарий от anonymous

Но ТС чегой-то там хочет НЕОБЫЧНОГО …

Молодежь ныне из серии

Не ХОЧУ учиться, а хочу ... /здесь вариаций много/
anonymous
()
Ответ на: комментарий от anonymous

Если он так сделает из нормальной строки, то указатель будет на НОРМАЛЬНУЮ строку.

Это не гарантируется для .data(). Только для c_str() (который внезапно может быть дубликатом исходной строки, что лежит под .data()).

yoghurt ★★★★★
()
Ответ на: комментарий от untitl3d

Такая функция пишется в 2 строки…

напиши. скорее всего ты ошибаешься, так как в реализации стандартных библиотек строк чуток больше.

аноним уже обосрался с data()

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Стандартные библиотеки обрабатывают все возможные жизненные ситуации и варианты развития событий + оптимизации под разные типы железа иногда. Тут же надо просто сделать сишную строку и скопировать туда содержание плюсовой строки. ТСу за глаза хватит такой реализации безовсяких приведений типов и прочих УБ.

untitl3d
()
Ответ на: комментарий от yoghurt

Это не гарантируется для .data()

Уж десять лет как гарантируется. // другой аноним

anonymous
()
Ответ на: комментарий от anonymous

вы ему еще про reinterpret_cast расскажите и еще 100500 способов злодейского смеха :)

slackwarrior ★★★★★
()
Ответ на: комментарий от yoghurt

Только для c_str() (который внезапно может быть дубликатом исходной строки, что лежит под .data())

    const _Elem *data() const _NOEXCEPT
            {       // return pointer to nonmutable array
            return (c_str());
            }
anonymous
()
Ответ на: комментарий от salozar

это нейросеть походу, а не живой человек.

А давайте чего нибудь ей такое подсунем, чтобы она … /здесь разные варианты/

anonymous
()
Ответ на: комментарий от anonymous

А давайте чего нибудь ей такое подсунем, чтобы она … /здесь разные варианты/

Вот например скажу так

Зимой лучше использовать c_str(), а ближе к лету data() ...
anonymous
()
Ответ на: комментарий от fsb4000

аноним уже обосрался с data()

Смею доложить, что аноним вам и мундир заблевал, и в штаны насрал.

data() и c_str() эквивалентны уже начиная с C++11

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Смею доложить, что аноним вам и мундир заблевал, и в штаны насрал. data() и c_str() эквивалентны уже начиная с C++11

Вывод то простой

Учиться, учиться и еще раз учиться ...

Частенько мы КОСТЕНЕЕМ в своих «знаниях» …

anonymous
()
Ответ на: комментарий от Waterlaz

data() и c_str() эквивалентны уже начиная с C++11

#include <string>
#include <type_traits>

using namespace std;

int main() {
    string s = "h";
    auto cstr = s.c_str();
    auto data= s.data();
    static_assert(!is_same_v<decltype(cstr), decltype(data)>);
}
fsb4000 ★★★★★
()
Ответ на: комментарий от yoghurt

Это не гарантируется для .data(). Только для c_str() (который внезапно может быть дубликатом исходной строки, что лежит под .data()).

Скажу вам по секрету.
Можете в любом алгоритме можете поменять c_str() на data() и результат будет тот же самый …

anonymous
()

Юзать netstat плохо. Оно депрекейтед. Юзай ss, а лучше /proc /sys

cobold ★★★★★
()
Ответ на: комментарий от fsb4000
#include <string>
#include <type_traits>

using namespace std;

int main() {
    string s = "h";
    auto cstr = s.c_str();
    auto data= s.data();
    static_assert(!is_same<decltype(cstr), decltype(data)>::value);
}
$ g++ -std=c++11  test.cpp 
test.cpp: In function ‘int main()’:
test.cpp:10:19: error: static assertion failed
   10 |     static_assert(!is_same<decltype(cstr), decltype(data)>::value);
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


А что? Если ты живёшь в мире c++98, почему я не могу в мире c++11? :)

Waterlaz ★★★★★
()
Ответ на: комментарий от anonymous

Скажу вам по секрету. Можете в любом алгоритме можете поменять c_str() на data() и результат будет тот же самый …

Кстати тема та НЕ РАСКРЫТА.
Например:

  • почему data() сделали эквивалентной c_str();

  • почему все же data() была хороша и в каких случаях она была полезна;

Да и в целом ВМЕНЯЕМЫХ библиотек для работы с строками не встречал.
Microsoft правда делала разные попытки и наплодила много разных способов работы с строками, но

НЕ ОСИЛИЛА

Хотя бы потому, что API НЕ ЭФФЕКТИВНО …

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.