Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
1

string => char[]

28.11.2013, 18:34. Просмотров 562. Ответов 17
Метки нет (Все метки)

Ничего не выходит из найденного в интернете(( подскажите как на выходе получить такой [] чар
C++
1
2
3
std::string str = "vasya.exe";
char buf[] = str; // ? error
char buf[] = "vasya.exe" // работает... да только так не нужно(((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 18:34
Ответы с готовыми решениями:

есть массив char. есть строка string. как присвоить значению string-a значение char-a?
есть массив char. есть строка string. как присвоить значению string-a значение...

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Почему компилятор на это матерится? ObjA.Show("A"); deprecated conversion...

Строка: чем отличается строки string, char, char*?
Помогите разобраться,совсем плохо идёт,чем отличается строки string,char,char*...

Как преобразовать char* в string и вывести переменную string на экран?
for (int k = 0; k < 10; k++) { int x = (int)rand() / RAND_MAX + rand() %...

Где и почему используют ту или иную строку std::string, char[], System::String^ ?
Где и почему используют ту или иную строку std::string, char, ...

17
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
28.11.2013, 18:35 2
C++
1
const char* buf = str.c_str();
только менять его содержимое нельзя, если надо менять то придется копировать через strcpy()
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
28.11.2013, 18:45  [ТС] 3
Так и знал что кто-нибудь подскажет этот способ...((
Дело в том что он мне не подходит, не подходит ни const char* ни char * а я работаю с одной из кастомных dll библиотек которая в качестве аргумента принимает именно char [] и дальше делает с ним расчет, а все конверты в переменную с указателями там не принимаются!
0
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
28.11.2013, 18:46 4
beats, ручками, ручками)
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
28.11.2013, 19:08 5
попробуй тогда вот так
C++
1
2
char buf[512];
strcpy(buf,str.c_str());
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
28.11.2013, 19:45  [ТС] 6
Не могу проверить работает или нет, так как у меня выявилась неопознанная ошибка после подключения #include <string> еще до начала работы с чаром, проиходит конфликт причем не в самом string а в CMATH.
Убрал инклуд стиринг ошибка исчезла, но как же без него? вот скриншот, там полная борода какой я еще не видел(((
0
Миниатюры
string => char[]  
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
28.11.2013, 19:58  [ТС] 7
путем тыка понял что в проекте почему-то не работают глобальные библиотеки, а работают только при указании расширения файла, например не #include <string> а #include <string.h>.
Обявление стринга решил, а вот подключить std не получается((.
C++
1
using namespace std;
63 IntelliSense: необходимо использовать имя пространства имен
ps после #include <iostream> она видит std однако такой вид написания без н выдает множества ошибок. А #include <iostream.h> не видит(
0
Jupiter
28.11.2013, 20:01
  #8

Не по теме:

Цитата Сообщение от beats Посмотреть сообщение
Так и знал что кто-нибудь подскажет этот способ...((
Дело в том что он мне не подходит, не подходит ни const char* ни char * а я работаю с одной из кастомных dll библиотек которая в качестве аргумента принимает именно char [] и дальше делает с ним расчет, а все конверты в переменную с указателями там не принимаются!
Так и знал что вы это напишите так как матчасти не знаете

0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
28.11.2013, 20:01 9
beats, так у вас Си проект а не С++
Или файл с расширением .с прицепили вместо .срр
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
28.11.2013, 20:13  [ТС] 10
Да действительно, только это понял

Добавлено через 4 минуты
заменил расширение на .срр и заработало!
также последний вариант от Raali помог.
Все проблемы решены, тему можно закрывать, СПС
0
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
28.11.2013, 20:15 11
Не по теме, подскажите, c_str() - она возвращает копию? Т.е. после вызова, я должен позаботиться о соответствующем delete?
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
28.11.2013, 20:35  [ТС] 12
nexen, да ты прав. Это необязательно, но если для тебя критично то удаляй. см. http://www.cplusplus.com/reference/string/string/c_str/
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,395
28.11.2013, 20:37 13
nexen, все зависит от того, куда записываете.
Если в динамический массив, то память разумеется надо освободить, иначе не нужно.
C++
1
2
3
4
5
6
7
8
int main()
{
    std::string tmp = "Hello world!";
    char* s = new char[tmp.length()];
    std::strcpy(s, tmp.c_str());
    std::cout << s << std::endl;
    delete[] s;
}
но
C++
1
2
3
4
5
6
int main()
{
    std::string tmp = "Hello world!";
    const char* s = tmp.c_str();
    std::cout << s << std::endl;
}
1
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
28.11.2013, 21:02 14
beats, MrGluck, кому из вас верить? ;(
http://www.cplusplus.com/reference/string/string/c_str/ --- читал первым делом, но строчки типа "возвращает копию той информации, что в string" не нашел, но и обратного "возвращает саму информацию string-а" тоже
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
28.11.2013, 21:17  [ТС] 15
nexen, доверяй но проверяй...
не ленись, найди метод в string.h и проанализируй его исполнение
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,395
28.11.2013, 23:56 16
Цитата Сообщение от beats Посмотреть сообщение
nexen, доверяй но проверяй...
не ленись, найди метод в string.h и проанализируй его исполнение
string.h не содержит определения (фактически синонима) string и методов для работы с ним.
И вообще string определен в <string>

Добавлено через 2 минуты
nexen, она возвращает указатель
Returns a pointer to an array
Сами данные, на которые он указывает, освободятся в деструкторе string и нечего вне класса его начинкой управлять.
1
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
29.11.2013, 06:54 17
MrGluck, в том то и дело, что "Returns a pointer to an array" может означать как то, что она возвращает данные на private (WTF? Not objective-oriented) поле string, а может означать и новую копию array.
Подразумеваю именно:
Цитата Сообщение от MrGluck Посмотреть сообщение
1
2
3
4
5
6
int main()
{
* * std::string tmp = "Hello world!";
* * const char* s = tmp.c_str(); //если это просто доступ к полю, то, конечно же, оно само удалится со деструктором tmp, иначе необходим delete.
* * std::cout << s << std::endl;
}
beats, причем тут string.h?
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
29.11.2013, 10:45 18
Цитата Сообщение от nexen Посмотреть сообщение
const char* s = tmp.c_str(); //если это просто доступ к полю, то, конечно же, оно само удалится со деструктором tmp, иначе необходим delete.
Если бы был бы необходим delete, то это было бы указано в стандарте; тем более у этого метода сложность константная, так что никаких копий.
Цитата Сообщение от nexen Посмотреть сообщение
что она возвращает данные на private (WTF? Not objective-oriented) поле string
А в чём проблема с этим? Состояние объекта без кастов с помощью этого метода всё равно не изменишь, а операция необходимая.
1
29.11.2013, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 10:45

char char* string и константные значения
Робот может перемещаться в 4 направлениях c-Север, u- Юг, z- Запад, v- Восток...

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName;...

string[] в char[][] или char[]
Приветствую! Можно ли одномерный массив типа string переписать в двумерный или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru