Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с char** / 25 сообщений из 30, страница 1 из 2
28.08.2014, 11:11
    #38731312
ditban
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Добрый день. Есть функция:
func(int count, char* string1, int* code2, char** string2)

здесь code2 и string2 - выходные парамеры. Подскажите, как правильно присвоить char** string2 значение, к примеру "abc"?
...
Рейтинг: 0 / 0
28.08.2014, 12:14
    #38731422
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
ditbanкак правильно присвоить char** string2 значение, к примеру "abc"?
Код: sql
1.
*string2 = "abc";


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2014, 12:16
    #38731425
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
ditban, а почему тебе не интересно как туда передать скажем два значения

Код: plaintext
1.
{"abc","xyz"}
...
Рейтинг: 0 / 0
28.08.2014, 12:43
    #38731472
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Ради Ктулху не надо их провоцировать! Вроде уже давно с С++ сбежал, но до сих пор икается при воспоминаниях о попытках объяснить, что передаваемый в функцию указатель чтобы та вернула строку тоже надо инициализировать, а не "ну это же выходной параметр, вот в него функция и пишет, она же работает, значит ошибки нет, а эта бага непонятно откуда берется, наверно винда нестабильная виновата" (почти точное изложение речи орла, любившего писать нечто вроде
Код: plaintext
1.
LPSTR * lpOutputString; get_some_string(lpOutputString);

при том что функция типа void (LPSTR*) ).
...
Рейтинг: 0 / 0
28.08.2014, 12:53
    #38731490
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
wstВроде уже давно с С++ сбежал
И правильно сделал, раз уж не научился различать функцию, возвращающую строку и функцию,
возвращающую указатель на строку. Это две разные вещи, причём вопросам управления памятью
(о которых ты талдычишь) совершенно перпендикулярные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2014, 13:07
    #38731512
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Я этот мусор как раз разгребал за такими вот деятелями, считающими что указатели и управление памятью перпендикулярны.
...
Рейтинг: 0 / 0
28.08.2014, 13:15
    #38731529
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
ditbanДобрый день. Есть функция:
func(int count, char* string1, int* code2, char** string2)

здесь code2 и string2 - выходные парамеры. Подскажите, как правильно присвоить char** string2 значение, к примеру "abc"?

Никак, у них разные типы.
Но Dimitry Sibiryakov скорее всего дал вам ответ на тот вопрос, который вы хотели спросить.
...
Рейтинг: 0 / 0
28.08.2014, 13:20
    #38731537
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
wstРади Ктулху не надо их провоцировать! Вроде уже давно с С++ сбежал, но до сих пор икается при воспоминаниях о попытках объяснить, что передаваемый в функцию указатель чтобы та вернула строку тоже надо инициализировать, а не "ну это же выходной параметр, вот в него функция и пишет, она же работает, значит ошибки нет, а эта бага непонятно откуда берется, наверно винда нестабильная виновата" (почти точное изложение речи орла, любившего писать нечто вроде
Код: plaintext
1.
LPSTR * lpOutputString; get_some_string(lpOutputString);

при том что функция типа void (LPSTR*) ).

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


И mayton ни кого не провоцирует, а пытается дать знания человеку.
...
Рейтинг: 0 / 0
28.08.2014, 13:26
    #38731548
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
SashaMercuryпрочитал и не увидел логики.
Как я уже сказал: человек путает присваивание указателю и присваивание переменной на
которую указатель указывает. Это эмоциональное, логику искать бесполезно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2014, 13:30
    #38731552
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
return string - это кстати злобный антипаттерно и грабли с топором на ручке
на который каждый С-newbie обязательно наступит. Разобъёт башку а потом
почешется забудет и еще раз наступит...
...
Рейтинг: 0 / 0
28.08.2014, 13:38
    #38731564
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
wstРади Ктулху не надо их провоцировать! Вроде уже давно с С++ сбежал,

Сбежал -- значит, слабак !
...
Рейтинг: 0 / 0
28.08.2014, 13:40
    #38731568
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
ditbanДобрый день. Есть функция:
func(int count, char* string1, int* code2, char** string2)

здесь code2 и string2 - выходные парамеры. Подскажите, как правильно присвоить char** string2 значение, к примеру "abc"?

Тут всё зависит от того, что ты понимаешь под словом "правильно".
Дай полную спецификацию на эту функцию -- тогда скажу, как присвоить.
...
Рейтинг: 0 / 0
28.08.2014, 13:40
    #38731569
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
К сожалению не раз видел, как попытка "дать знания" человеку, только осваивающему язык заканчивается ужасами, вроде того который я привел выше.

Про первое выделенное красным - передача в функцию аргументов вида char** или LPSTR* чтобы через него та вернула строку - вполне обычный способ, особенно в Win API. Часто такое встречается и в коде программ/библиотек, не использующих что-то вроде stl/qt. Но при этом существа, бывает, видят слово LPSTR, объявляют указатель на него и в неинициализированном виде отдают в функцию, что приводит к ошибкам, которые куда проще найти и исправить, чем объяснить их автору в чем дело. "Теплые" воспоминания о таком способе потратить свое время и заставили меня вообще тут что-то написать, когда увидел, как человеку, только изучающему язык сразу предлагают поиграться с указателями.

Второе выделенное красным - особо запомнившийся фрагмент речи человека, намолотившего к тому времени под мегабайт кода и убеждавшего меня что все у него правильно, а что программа падает - так это происки врагов. Логики там не было изначально.
...
Рейтинг: 0 / 0
28.08.2014, 13:41
    #38731572
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
На самом деле учительствовать в сях - дело неблагодарное ... Как в той байке где "один дурак сотню мудрецов ушатает..."
...
Рейтинг: 0 / 0
28.08.2014, 13:46
    #38731583
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
wstпередача в функцию аргументов вида char** или LPSTR* чтобы через него та вернула
строку - вполне обычный способ, особенно в Win API.
Нет, вот как раз в Win API я что-то не припоминаю функции, которая бы принимала на вход
указатель на указатель. Везде передаётся обычный LPSTR, то есть указатель на буфер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2014, 15:21
    #38731758
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
wstпередача в функцию аргументов вида char** или LPSTR* чтобы через него та вернула
строку - вполне обычный способ, особенно в Win API.
Солидарен с Дмитрием.
Как говорится - пример в студию.
...
Рейтинг: 0 / 0
28.08.2014, 15:30
    #38731771
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Не принципиально, действительно, в виндовых заголовках лежащих с migw482 всего 1 функция, возвращающая так массив строк, но суть дела это не меняет.
Разрешаю по этому поводу потроллить.
...
Рейтинг: 0 / 0
28.08.2014, 15:43
    #38731793
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
IMHO
1. Вы бы хоть название ф-ции написали. А то информационная ценность сообщения "в виндовых заголовках лежащих с migw482 всего 1 функция, возвращающая так массив строк" приближается к 0
2. "но суть дела это не меняет"
<censored, было not polite>
...
Рейтинг: 0 / 0
28.08.2014, 17:03
    #38731937
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
maytonreturn string - это кстати злобный антипаттерно и грабли с топором на ручке
на который каждый С-newbie обязательно наступит.
Э? Что там такого злобного кроме бешеной реаллокации и копирования?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.08.2014, 17:06
    #38731941
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Dimitry SibiryakovЭ? Что там такого злобного кроме бешеной реаллокации и копирования?

А этого мало?
...
Рейтинг: 0 / 0
28.08.2014, 17:07
    #38731947
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Тогда уж брать C++ и делать полноценный String с каким нибудь reference counter'ом.

Ну и еще один минус. Если так возвращать строки из библиотек, то можно наткнутся, что библиотека скомпилирована с другим менеджером кучи, чем вызываемое приложение. Ну и кол-во глюков дальше понятно...
...
Рейтинг: 0 / 0
28.08.2014, 17:08
    #38731950
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Я писал про "C"
...
Рейтинг: 0 / 0
29.08.2014, 02:08
    #38732283
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
wstК сожалению не раз видел, как попытка "дать знания" человеку, только осваивающему язык заканчивается ужасами, вроде того который я привел выше.

Про первое выделенное красным - передача в функцию аргументов вида char** или LPSTR* чтобы через него та вернула строку - вполне обычный способ, особенно в Win API. Часто такое встречается и в коде программ/библиотек, не использующих что-то вроде stl/qt. Но при этом существа, бывает, видят слово LPSTR, объявляют указатель на него и в неинициализированном виде отдают в функцию, что приводит к ошибкам, которые куда проще найти и исправить, чем объяснить их автору в чем дело. "Теплые" воспоминания о таком способе потратить свое время и заставили меня вообще тут что-то написать, когда увидел, как человеку, только изучающему язык сразу предлагают поиграться с указателями.

Второе выделенное красным - особо запомнившийся фрагмент речи человека, намолотившего к тому времени под мегабайт кода и убеждавшего меня что все у него правильно, а что программа падает - так это происки врагов. Логики там не было изначально.

Может быть вы и хотите что-то до нас донести, но я до сих пор вижу противоречия (возможно чего-то не понимаю).


1.Что значит существа ? Это живые люди, если вы их учили подсознательно относясь к ним так, то мне понятно почему они мало понимали.

2. Меня смутило ваше "только изучающему язык сразу предлагают поиграться с указателями". Я считаю что любой уважающий себя программист должен понимать (хотя бы примерно), как работает его программа (на любом языке), потому он по дефолту должен знать азы работы с памятью и указатели. И вообще, на мой взгляд, тема указателей должна быть одна из самых первых тем при изучении языка С или С++. Они прививают любовь к этим языкам.
...
Рейтинг: 0 / 0
29.08.2014, 11:38
    #38732528
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
SashaMercury,

По п.2 - при обучении языкам, поддерживающим работу с памятью на уровне С хорошей идеей будет через слово напоминать об осторожности, ну и о -W4/-Wall. Особой любви к языку от постоянных напоминаний не добавится, но мне, например, когда пользуюсь чужими программами обычно нет дела любили разработчики язык или люто ненавидели, зато очень даже важно чтобы те стабильно работали.
А что касается азов работы с памятью и адресами и пониманием работы программы - возможно, стоит потратить время на ассемблер, причем любой. Когда все сводится к небольшому числу регистров и операций вокруг них понять что к чему имхо проще, чем параллельно осваивая заметно более сложный язык.
...
Рейтинг: 0 / 0
29.08.2014, 12:19
    #38732607
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с char**
Меня заинтересовала модель памяти в Rust. Качнул 4 документа.

The Rust Language Tutorial.
Rust: The Friendly Intro.
The Rust Reference Manual.
GPU Programming in Rust: Implementing High Level Abstractions in a Systems Level Language

Интересно как Огненная Лиса бореться с "мусором" в своей норе.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с char** / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]