2012-06-18 2 views
3

У меня есть переменная: char * tmp, и я делаю несколько операций с ней. Наконец, у меня есть что-то вроде этого "fffff", но иногда до fffff "\n". Как его удалить?Как удалить новую строку из char *?

+3

Я думаю, что лучший курс действий будет предотвратить его попадание туда в первую очередь. Можете ли вы показать нам какой-то код, описывающий, как вы заканчиваете строки, содержащие '\ n'? – templatetypedef

+6

Если это 'C++', используйте 'std :: string' вместо' char * ' –

+0

Поиск и замена. 'strchr',' strpbrk' для 'char *' и 'find_first_of' для' std :: string'. Выбирайте. – dirkgently

ответ

6
char *tmp = ...; 

// the erase-remove idiom for a cstring 
*std::remove(tmp, tmp+strlen(tmp), '\n') = '\0'; // removes _all_ new lines. 
+0

Что вам нужно для '# include' для этого? – Splatmistro

+1

@Splatmistro '#include '. [См. Здесь] (http://en.cppreference.com/w/cpp/algorithm/remove) – bames53

1

Если TMP выделяется динамически, не забудьте освободить его с помощью tmp:

if (tmp[0] == '\n') { 
    tmp1 = &tmp[1]; 
} 
else { 
    tmp1 = tmp; 
} 

// Use tmp1 from now on 
4

В вашем вопросе, вы говорите о прохождении этой строки в сокет. При передаче указателя char * на что-то вроде сокета, который его скопирует, код для этого очень прост.

В этом случае, вы можете сделать это:

if (tmp[0] == '\n') 
    pass_string(tmp+1); // Passes pointer to after the newline 
else 
    pass_string(tmp); // Passes pointer where it is 
2

В C:

#include <string.h> 
tmp[strcspn(tmp, "\n")] = '\0'; 
+0

Это был вопрос C++, а не C –

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