Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
#1

Работа с массивом с через strcpy_s() - C++

14.07.2015, 11:22. Просмотров 373. Ответов 3
Метки нет (Все метки)

Функция addBrackets принимает массив и преобразует его заключая в скобки [].
т.е. на на вход массив: text
после преобразования: [text]
Вылетает эксепшен "boffer is too small" на первом strcat. Что не так делаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
void addBrackets(char* buffer)
{
    char *result = new char[strlen(buffer)];
    result[0] = NULL;
 
    strcat_s(result, strlen("["), (const char *)"[");
    strcat_s(result, strlen(buffer), (const char *)buffer);
    strcat_s(result, strlen("]"), (const char *)"]");
 
    strcat_s(buffer, strlen(result), result);
 
    delete []result;
}
 
int main()
{
    const int len = 10;
    char str1[len];
    str1[0] = NULL;
 
    strcat_s(str1, (const char *)"text");
    if (strlen(str1) < len - 2)
    {
        addBrackets(str1);
        std::cout << str1 << std::endl;
    }
 
    return 0;
}
Добавлено через 21 минуту
Достаточно просто пояснить почему вот это не работает:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main()
{
    char *str1 = new char[100];
 
    strcpy_s(str1, strlen("text"),"text");
 
    delete[]str1;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2015, 11:22     Работа с массивом с через strcpy_s()
Посмотрите здесь:

Работа с массивом через геттер и сеттер - C++
#include &lt;iostream&gt; using namespace std; class My_Class { private: int *p; public: My_Class() { p = new int ;

Работа с двухмерным динамеческим массивом через указатель - C++
Натупил здесь наверное сильно, подскажите ребят, а то долго уже сиджу над этим... Где ошибки? Программу компилирует, но потом выбивает. ...

Работа с массивом структур в функции через указатель на этот массив - C++
Добрый вечер. Имеется следующая задача: &quot;Разработайте программу, сохраняющую записи (порядковый номер ввода, число с плавающей точкой и...

Работа с массивом через указатели(Определить, строго ли чередуются элементы в массиве) - C++
Задан массив из N элементов, состоящий только из нулей и единиц. Определить, строго ли чередуются элементы в массиве. Программа должна...

Использование strcpy_s - C++
Добрый день. Словил странную проблему (компилятор MVS2010) #include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; class String...

strcpy/strcpy_s - C++
Добрый вечер! Есть класс (упрощенно): class const_string { public: const_string(char const* s) { strcpy(str, s); /...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.07.2015, 11:59     Работа с массивом с через strcpy_s() #2
Цитата Сообщение от GBIT Посмотреть сообщение
почему вот это не работает
Неверно указан размер буфера.
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
14.07.2015, 12:06  [ТС]     Работа с массивом с через strcpy_s() #3
Нашел вот такое, думаю это имеет отношение к моему вопросу:
C++
1
2
3
4
char A[80];
char * B = new char[80];
cout << "size of A = " << sizeof(A) << endl;
cout << "size of B = " << sizeof(B) << endl;
Источник
Но я не понимаю почему такой вывод:
size of A = 80
size of B = 4

gazlan, подскажите, как правильно скопировать в динамический массив - массив const char*?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 12:22     Работа с массивом с через strcpy_s()
Еще ссылки по теме:

Strcat или strcpy_s - C++
strcat(name, &quot; &quot;); strcat(lastname, &quot; &quot;); strcpy(name, (strcat(strcat(lastname, name), dlastname))); strcpy(nomergroup, strcat(v,...

Не работает strcat_s с strcpy_s - C++
strcat_s(strcpy_s(s3, sizeof(s1), s1),sizeof(s2), s2); Так не работает. strcpy_s(s3, sizeof(s1), s1); strcat_s(s3, sizeof(s2), s2); А...

Недружелюбный strcpy_s и прочие *_s - C++
Доброй ночи. Подскажите, если есть два char* , то как осуществить копирование одного в другой, их конкатенацию? Про strcpy и прочие в...

Развлечения с массивом через указатель - C++
Инициализация указателей. Объявите массив, состоящий из 8 элементов типа short int. Объявите указатель на этот массив и присвойте ему...

Подскажите, почему не работает strcpy_s() - C++
Вот код char *pcStr = &quot;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22&quot; ...


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

Или воспользуйтесь поиском по форуму:
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
14.07.2015, 12:22     Работа с массивом с через strcpy_s() #4
Ну, почитайте хоть что-нибудь о строках в С. И, заодно, о стиле кодирования. Чтобы не было такого кошмара, как выше

sizeof(B) - это размер указателя. На 32-битной системе это 4 байта.

и sizeof(A) != strlen(A)

Строка в С - это массив байт с терминирующим нулем (ASCIIZ strings). При любых операциях со строками об этом нужно помнить и, при необходимости, учитывать.

Например, strlen("abracadabra") = 11, но sizeof("abracadabra") = 12.
Yandex
Объявления
14.07.2015, 12:22     Работа с массивом с через strcpy_s()
Ответ Создать тему
Опции темы

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