2015-08-27 2 views
0

У меня есть сообщение, которое я получаю в переменной rmsg. Если первый символ в этом буфере равен «1», я хочу удалить этот символ и отправить остальную часть сообщения.Удалить первый символ из полученного буфера

Так есть ли способ сделать что-то вроде этого:

if(rmsg[0]=='1') 

//remove the first character in rmsg 
strncpy(newbuf,rmsg,rmsglen) 

Если это не правильное направление может кто-нибудь показать мне, как?

+3

только для уточнения? Вам нужно удалить первый символ, а затем отправить новую строку? – Haris

+0

Чтобы уточнить, собираетесь ли вы использовать строку (с первым удаленным символом) после ее отправки? –

+0

'' 1'' - это не строка, а 'char'. Это очень разные типы данных на C и любом другом языке. Использование правильных условий поможет другим понять, что вы просите. – Olaf

ответ

2

Вы можете использовать второй символ в качестве базового адреса для отправки и уменьшить длину на 1:

if (rmsglen > 0 && rmsg[0]=='1') 
     send (&rmsg[1], rmsglen-1); 
3

Я полагаю, это то, что вы хотите достичь в этом случае:

if (rmsg[0] == '1') 
    memmove(rmsg, rmsg+1, strlen(rmsg)); 

Здесь , после использования функции memmove(), как я написал выше, ваша строка rmsg будет содержать свой предыдущий контент без первого символа (который равен == '1'), так что теперь вы можете просто отправить его легко, где хотите.

Живая демонстрация: http://ideone.com/1dJjAn
Подробнее о memmove() FUNC: http://www.cplusplus.com/reference/cstring/memmove/

2

Если вы хотите, чтобы скопировать строку в новую строку ожидать первый символ, который вы можете сделать что-то вроде этого -

char rmsg[]="1 I can go"; 
char *newbuf; 
newbuf=malloc(strlen(msg)); 
if(rmsg[0]=='1') 
{ 
    strncpy(newbuf,&rmsg[1],rmsglen-1); 
} 
free(newbuf); 

Небольшой пример - https://ideone.com/IotuBy

+1

Несколько мыслей: «+ 1» не требуется, так как скопированная строка будет короче и, следовательно, достаточно места для конечного NULL. Почему вы думаете, что есть пробел после «1»? И почему вы думаете, что OP хочет пропустить это, он этого не говорит? Кроме того, [избегать 'strcpy'] (http://stackoverflow.com/questions/1258550/why-should-you-use-strncpy-instead-of-strcpy), длина уже известна (' rmsglen'). – DarkDust

+0

@DarkDust Пространство после '1' было только моей мыслью в случае, если оно есть. А насчет '+ 1' да, что было не нужно. И я не заметил, что «rmsglen», таким образом, не учитывал это. Но спасибо за ваш вклад, я отредактировал свой ответ. – ameyCU

Смежные вопросы