Как извлечь подстроку из строки после определенного символа? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь осуществить перенаправление.У меня есть вход от пользователя, и я пытаюсь извлечь выходной файл из него.Я использую strstr (), чтобы найти первое вхождение '>'.Оттуда я могу извлечь остальную часть строки, но я не уверен, как это сделать.

Я пытался использовать strstr () вместе с strcpy (), но безуспешно.

// char_position is the pointer to the character '>'
// output_file is the file that I need to extract
// line is the original string

// example of input: ls -l > test.txt

char *chr_position = strstr(line, ">");
char *output_file = (char *) malloc(sizeof(char) * (strlen(line) + 1));
strcpy(output_file + (chr_position - line), chr_position // something here?);
printf("The file is %s\n", output_file);

Ожидаемый результат - построить строку от> до конца строки.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы можете легко использовать strstr для достижения этой цели:

char inarg[] = "ls -l > test.txt";

char  *pos;
pos = strstr(inarg, "> ") + 2;
printf("%s\n", pos);   // Will print out 'test.txt'

Это работает, ища комбинацию ">" в строке.+2 после вызова strstr позволяет учесть тот факт, что strstr вернет указатель на строку '> test.txt', и мы хотим пропустить '>' (2 байта с завершающим пробелом), поэтому мы добавляем 2 куказатель, так что он в конечном итоге указывает на текст, который мы хотим извлечь.

0 голосов
/ 14 февраля 2019

Когда вы делаете это:

strcpy(output_file + (chr_position - line), chr_position);

Вы начинаете копирование в output_file не с самого начала, а chr_position - line байт после этого.Просто начните с начала:

strcpy(output_file, chr_position + 1);

Обратите внимание также, что, поскольку chr_position указывает на символ >, вы хотите начать копирование как минимум на 1 байт после этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...