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

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

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

szTmp[strlen(szTmp)-3] = '\0'
...
Рейтинг: 0 / 0
Работа со строками
    #32267572
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if ( ( int len = _tcslen( string ) ) > 3 )
{
string[ len - 4 ] = 0;
}
...
Рейтинг: 0 / 0
Работа со строками
    #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
Работа со строками
    #32267973
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark Elf
Тебе нужно освободить память, занимаемую последими тремя символами, или просто чтобы strlen() от строки стало на 3 меньше?

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

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

если у strcpy() первым параметром идет dest - так тому и быть
...
Рейтинг: 0 / 0
Работа со строками
    #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
Работа со строками
    #32268416
й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char *p = s+strlen(s);
if(p>s)*(--p)='\0';
if(p>s)*(--p)='\0';
if(p>s)*(--p)='\0';
...
Рейтинг: 0 / 0
Работа со строками
    #32268418
й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for(int i=0;i<3;++i) if(p>s)*(--p)='\0';
...
Рейтинг: 0 / 0
Работа со строками
    #32268422
q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q
Гость
for(int i=0;i<3;++i) if(p>s)*(--p)='\0';else break;
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа со строками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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