Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 287, средняя оценка - 4.63
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Как преобразовать переменную string в массив char[]? - C++

03.02.2012, 13:42. Просмотров 45459. Ответов 27
Метки нет (Все метки)

Есть переменная string и массив char как записать переменную типа string в такой массив ?

C++
1
2
String X="test";
char Mass[100];
Нужен максимально простой и короткий пример!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2012, 13:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как преобразовать переменную string в массив char[]? (C++):

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

Преобразовать string в массив char - C++
Всем доброго времени суток!Как преобразовать string в массив char.

Перевести массив char в переменную string - C++
Помогите перевести массив char в переменную string

Преобразовать строку String в массив #define byte_t unsigned char и обратно - C++
Собственно танцы с бубном долгое время. Подскажите пожалуйста, как правильно и оптимально это делать. Каждый символ строки при...

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

Как преобразовать char в string - C++
Есть массив char buffer; есть переменная string X; как присвоить значение X допустим такое X=buffer+buffer;

27
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 17:07 #16
в том случае не мемсет нужен, а простой '\0' в конец, потому что
No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.
хотя конечно, для этого и мемсет сгодится, но зачем лишняя работа?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.02.2012, 17:09 #17
Цитата Сообщение от retmas Посмотреть сообщение
а простой '\0' в конец
Каким образом вы будете отлавливать его? Я написал код в общем случаем, а вы привязываетесь к какому-то примеру. Не нужно так делать...
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 17:11 #18
Цитата Сообщение от go Посмотреть сообщение
Каким образом вы будете отлавливать его?
как-как? записываем number элементов. вот вам и место куда его пихать. и вполне общий случай
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.02.2012, 17:17 #19
Цитата Сообщение от retmas Посмотреть сообщение
записываем number элементов. вот вам и место куда его пихать. и вполне общий случай
Функцию strncpy придумали не для этого.
Если же длина строки, адресуемой параметром str2, больше значения count, то строка - результат, адресуемая параметром str1, не будет заканчиваться символом конца строки[1].
strncpy — функция стандартной библиотеки языка программирования Си, для копирования содержимого нуль-терминированной строки в буфер ограниченного размера.
Функция strncpy аналогична strcpy с защитой от переполнения буфера.
Можно ее использовать и таким образом. У Вас и вашего коллеги это не отражено.
При правильной работе с функцией, нужно передавать в функцию значение len на единицу меньше размера буфера, а также самостоятельно устанавливать последний байт в 0:
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
03.02.2012, 17:24 #20
go, так почему бы не установить нуль-терминатор в заранее известную позицию, что займёт одну инструкцию копирование, в отличие от memset, который заполнит нулями весь буфер?
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 17:24 #21
Цитата Сообщение от go Посмотреть сообщение
Функцию strncpy придумали не для этого.
"не для" чего? я так и не понял.
Цитата Сообщение от go Посмотреть сообщение
При правильной работе с функцией, нужно передавать в функцию значение len на единицу меньше размера буфера, а также самостоятельно устанавливать последний байт в 0
о том и речь. я лишь хотел сказать, что мемсет делает это и еще сверх этого. поэтому лучше нуль-терминировать строку.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.02.2012, 17:29 #22
Цитата Сообщение от retmas Посмотреть сообщение
поэтому лучше нуль-терминировать строку.
Каким образом? Вы сказали о увеличении буфера(о чем свидетельствует Ваш пример) Чего-либо подобного я не видел
C++
1
buf[sizeof buf - 1] = '\0';
Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
так почему бы не установить нуль-терминатор в заранее известную позицию,
Дело вкуса, но делать что-либо надо!
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
03.02.2012, 17:30 #23
Цитата Сообщение от go Посмотреть сообщение
Дело вкуса
А также производительности, если речь о достаточно большом буфере.
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 17:33 #24
мой пример свидетельствует не об увеличении буфера, а об
Цитата Сообщение от diagon Посмотреть сообщение
Если меньше - оставшееся место просто забьется нулями.
Цитата Сообщение от go Посмотреть сообщение
Чего-либо подобного я не видел
потому что
Цитата Сообщение от diagon Посмотреть сообщение
Если меньше - оставшееся место просто забьется нулями.
и я говорил
Цитата Сообщение от retmas Посмотреть сообщение
записываем number элементов. вот вам и место куда его пихать
т.е. buf[number] = 0; а то, что number меньше sizeof buf... уж не думал, что об этом надо писать
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.02.2012, 17:37 #25
Цитата Сообщение от retmas Посмотреть сообщение
т.е. buf[number] = 0; а то, что number меньше sizeof buf... уж не думал, что об этом надо писать
Что такое number?
0
silent_1991
03.02.2012, 17:40
  #26
 Комментарий модератора 
Ладно, ребят, пооффтопили и хватит!
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
03.02.2012, 17:42 #27
число записываемых символов
C++
1
strncpy(buf, source, number);
как то так. и если вы потребуете
C++
1
number = sizeof buf - 1;
. думал из контекста понятно...
Цитата Сообщение от silent_1991 Посмотреть сообщение
Ладно, ребят, пооффтопили и хватит!
не заметил. удаляюсь из топика
0
ua3yvs
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 4
13.04.2015, 22:42 #28
C++
1
2
3
4
5
6
7
8
AnsiString X = "test";
int length = X.Length(); //лучше длинну строки чем sizeof(Mass)
char Mass[100] = "";
strcpy(Mass, X.c_str());
for(int i = 0; i <= length; i++ ){
 Mass[i]......
 
}
0
13.04.2015, 22:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2015, 22:42
Привет! Вот еще темы с ответами:

Как преобразовать string в char*? - C++
Как преобразовать string в char* и отправить как аргумент наименьшими усилиями? #include &lt;iostream&gt; #include &lt;string&gt; using...

Как преобразовать первый символ строки в переменную char? - C++
string str = &quot;hello&quot;; char ch; хочу чтобы в переменной &quot;ch&quot; лежал символ &quot;h&quot; Это в идеале, если возможно без дополнительных...

Как преобразовать объект string в строку char*? - C++
Доброго времени суток! Недавно я писал код, и обнаружил, что в качестве имя файла при объявлении объектов ifstream/ofstream нельзя...

преобразовать программу из string в char - C++
Помогите преобразовать программу из string в char #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; ...


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

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

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