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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 5.00
larry
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 59
#1

функция strcpy и strcat - C++

30.07.2009, 13:20. Просмотров 3644. Ответов 20
Метки нет (Все метки)

Добрый день!У меня такая проблема...Есть массив строк, где хранятся имена и при выводе имени на экран,если оно длиннее определенного,то я его обрезаю,а в конец добавляю три точки...Но почему-то оно выводит обрезанное имя,а потом разный мусор и только в конце ставит три точки...Вот кусок кода:
C++
1
2
3
4
5
6
7
8
if(strlen(name[pos]) > 27)
{
    str = new char[27];
    strncpy(str, name[pos]->name, 24);
    strcat(str, "...");
}
else
    strcpy(str,name[pos]);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2009, 13:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функция strcpy и strcat (C++):

В чем разница между функциями strcat() и strcpy()? - C++
В чем разница между функциями strcat() и strcpy()?

Реализовать собственные функции strcat, strcpy, strcmp, strlen - C++
Добрый день. Помогите с задачей. Необходимо реализовать собственные функции strcat, strcpy, strcmp, strlen. Для strlen реализовал, а...

Написать собственные аналоги функций strlen, strcmp, strchr, strcpy, strcat (дописать и исправить ошибки) - C++
вот задание: Написать собственные аналоги функций strlen, strcmp, strchr, strcpy, strcat из стандартной библиотеки cstring (string.h). ...

Функция strcat - C++
Нужно написать прогу на C++ и Ассемблере...функцмя strcat(на ассемблере сделал а вот на C++ не могу).Если кто поможет буду очень...

функция strcat - C++
Помогите разобраться, пожалуйста. char* resultat = 0; char* str = "abc"; strcat(resultat, str); вылетает с ошибкой. Как нужно...

Что делает функция strcat(t, f) - C++
Функция strcat(t, f) что она делает и как применяеться?

20
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 16:38 #16
Цитата Сообщение от zim22 Посмотреть сообщение
но байт в понимании Стандарта - это не 8 бит. Может быть и 16
может, но в соответствии стандарту, под байтом подразумевают 8бит. и программу человек пишет не под специфическии компиляторы, а под стандарт.

Цитата Сообщение от zim22 Посмотреть сообщение
а если у нас не char, а int? или double? или ещё лучше: структура. всё-равно sizeof нужен:
в программировании нет слова если... я писал пример под конкретную задачу.larry это помогло? помогло. продолжать беседу я не вижу смысла, разговор окончен
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
30.07.2009, 17:08 #17
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
но в соответствии стандарту, под байтом подразумевают 8бит
ничего подобного. под байтом подразумевается то, что написано в пункте 1.7

Добавлено через 26 минут 2 секунды
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
в программировании нет слова если
есть. if
0
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
30.07.2009, 17:48 #18
zim22, ты конечно молодец, но человека с толку сбил!
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.07.2009, 17:51 #19
C++
1
2
3
4
char * str = new char[27];
strncpy(str, name[pos]->name, 24);
str[24] = '\0';
strcat(str,"...");
И будет переполнение буфера.
24 символа + 3 символа + '\0' - итого 28 символов на массив в 27 символов.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
30.07.2009, 18:00 #20
Цитата Сообщение от Lolcht0 Посмотреть сообщение
zim22, ты конечно молодец, но человека с толку сбил!
человек сам себя сбил.
проблема в том, что волшебные круглые скобочки он не добавил
str = new char[size]();
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.07.2009, 06:28 #21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    const char *patt = "...";
    const int MAXLEN = 28;
 
    str = new char[MAXLEN];
 
    if(strlen(name[pos]) < MAXLEN)
        strcpy(str, name[pos]);
    else {
        int newlen;
 
        if ((newlen = MAXLEN-strlen(patt)-1) > 0) {
            strncpy(str, name[pos], newlen); /* она не ставит нуль-символ, если не доходит до него */
            *(str+newlen) = '\0';
            strcat(str, "..."); /* эта сначала ищет нуль-символ, а потом присоединяет в него */
        }
    }
sizeof возвращает количество байт

Добавлено через 7 минут 52 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    const char *patt = "...";
    const int MAXLEN = 27;
 
    str = new char[MAXLEN+1];
 
    if(strlen(name[pos]) <= MAXLEN)
        strcpy(str, name[pos]);
    else {
        int newlen;
 
        if ((newlen = MAXLEN-strlen(patt)) > 0) {
            strncpy(str, name[pos], newlen); /* она не ставит нуль-символ, если не доходит до него */
            *(str+newlen) = '\0';
            strcat(str, "..."); /* эта сначала ищет нуль-символ, а потом присоединяет в него */
        }
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2009, 06:28
Привет! Вот еще темы с ответами:

Библиотека string.h, функция strcat - C++
Написал вот такое, но в программе все равно текст не выводит. Должно работать точно также, как и обычная библиотека strcat. char *...

Функция strcpy - C++
цель очевидна. почему не работает? :-| #include &lt;iostream&gt; void strcpy(char *from, char *to) { to=from; } int main() { ...

Собственная функция strcat -сцепление строк - C++
написать собственную функцию strcat -сцепление строк. Сравнить работу функции со стандартной из библиотеки string.h, если таковая...

Своя функция strcat. Копирует мусор - C++
Не могу как сделать так, что бы копирование происходило несколько раз. char *Copies(const char *s, char *s1, int n) { for...


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

Или воспользуйтесь поиском по форуму:
21
Yandex
Объявления
31.07.2009, 06:28
Ответ Создать тему
Опции темы

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