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

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

Восстановить пароль Регистрация
 
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
14.07.2015, 11:22     Работа с массивом с через strcpy_s() #1
Функция 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,890
Записей в блоге: 1
14.07.2015, 11:59     Работа с массивом с через strcpy_s() #2
Цитата Сообщение от GBIT Посмотреть сообщение
почему вот это не работает
Неверно указан размер буфера.
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*?
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,890
Записей в блоге: 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()
Ответ Создать тему
Опции темы

Текущее время: 19:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru