Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа со строками / 11 сообщений из 11, страница 1 из 1
17.09.2003, 12:04
    #32267508
Dark Elf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
Уважаемые господа!

Как из С-строки (char*) удалить 3 последних символа и уменьшить её размер на 3?

Заранее благодарен за ответ
...
Рейтинг: 0 / 0
17.09.2003, 12:25
    #32267570
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
Без проверок на длину

szTmp[strlen(szTmp)-3] = '\0'
...
Рейтинг: 0 / 0
17.09.2003, 12:26
    #32267572
Tracer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
if ( ( int len = _tcslen( string ) ) > 3 )
{
string[ len - 4 ] = 0;
}
...
Рейтинг: 0 / 0
17.09.2003, 12:59
    #32267642
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
я конечно C не знаю, но ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
char *str =  "..." ;

if ( strlen(str) >= 3  )
{
    char *str2;
    str2 = (char*)malloc( strlen(str) -  3  );

    strcpy( str, str2, strlen(str) -  3  )

    free(str)


}

...
Рейтинг: 0 / 0
17.09.2003, 15:32
    #32267973
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
Dark Elf
Тебе нужно освободить память, занимаемую последими тремя символами, или просто чтобы strlen() от строки стало на 3 меньше?

funikovyuri
1. У известной мне strcpy() только два параметра.
2. И она пишет из второго в первый, т.е. ты затираешь исходную строку мусором.
3. И откуда free(str)? Ты её выделял, что ли? Может, free(str 2 )?
...
Рейтинг: 0 / 0
17.09.2003, 15:52
    #32268011
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
в моем коде куча ошибок - я и не спорю я последний раз C использовал наверное лет 5-7 назад - но идея там верная - в том смысле что просто поставить признак конца строки - это не полное решение

free там именно для освобождения памяти занимаемой старой строкой, после этого, конечно же, надо написать
Код: plaintext
str = str2
...
Рейтинг: 0 / 0
17.09.2003, 15:54
    #32268012
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
я не помню семантику вызова функций работы со строками - и посмотреть мне сейчас негде - просто увидел откровенно не правильные решения и написал...

если у strcpy() первым параметром идет dest - так тому и быть
...
Рейтинг: 0 / 0
17.09.2003, 18:33
    #32268331
Alex Antipenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
Как вариант предлагаю функцию:

Create and return a new string from a substring of string <s> at
position <p>, for length <l>.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#define  EOS      '\x00'                /* End_Of_String                 */ 

char* strmid(char* s, Int p, Int l)
{
   char *q, *t, *r;

   if(NULL == (r = malloc(l +  1 )))
      printf('Error \n');                        /* out of space!                 */ 
   t = r;
   q = s + p;
   while(l --)                          %af_src_comm_2
 
      *t++ = *q++;
   *t = EOS;
   return(r);
}   /* strmid() */ 
...
Рейтинг: 0 / 0
17.09.2003, 19:48
    #32268416
й
й
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
char *p = s+strlen(s);
if(p>s)*(--p)='\0';
if(p>s)*(--p)='\0';
if(p>s)*(--p)='\0';
...
Рейтинг: 0 / 0
17.09.2003, 19:49
    #32268418
й
й
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
for(int i=0;i<3;++i) if(p>s)*(--p)='\0';
...
Рейтинг: 0 / 0
17.09.2003, 19:52
    #32268422
q
q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со строками
for(int i=0;i<3;++i) if(p>s)*(--p)='\0';else break;
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа со строками / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]