2015-10-06 3 views
0

Мне интересно, как взять строку строки и добавить символ табуляции перед символом новой строки. Сейчас я использую fgets, чтобы получить линию, то с помощьюКак добавить символ « t» в строку перед символом новой строки « n»

strcat(line_data, "\t"); 

но это только добавляет вкладку после символа новой строки

+3

ли строка 'line_data' уже есть символ новой строки в конце? –

ответ

4

Если предположить, что line_data имеет достаточно памяти:

char* newline = strchr(line_data, '\n'); 
newline[0] = '\t'; 
newline[1] = '\n'; 
newline[2] = '\0'; 

Конечно , если это не так, вы должны сделать что-то вроде этого:

size_t len = strlen(line_data); 
char* newstr = malloc(len + 2); /* one for '\t', another for '\0' */ 
memcpy(newstr, line_data, len); 
newstr[len - 1] = '\t'; /* assuming '\n' is at the very end of the string */ 
newstr[len] = '\n'; 
newstr[len + 1] = '\0'; 
+0

1) 'memcpy (newstr, line_data, len); newstr [len + 1] = '\ 0'; '->' memcpy (newstr, line_data, len + 1); '2)' * newline = '\ t'; * (newline + 1) = '\ n'; 'не оставляет нулевой символ массива завершенным. 3) 'newline' может быть' NULL'. – chux

+0

Ваш первый не имеет нулевого окончания. – rici

+0

@rici Хорошо, я сделал много предположений, когда я собрал это вместе. Я отредактировал сообщение для нулевого завершения первого примера. Второй пример должен завершаться нулем. –

0

A ssuming если line_data не содержит '\n', код ничего не делает:

Все, что вам нужно, это

char *p = strchr(line_data, '\n'); 
if (p) strcpy(p, "\t\n"); 
+0

@ Давид К. Ранкин Да - ответ исправлен. – chux