Я пытаюсь проанализировать следующую строку:
"USBSTOR\DISK&VEN_JETFLASH&PROD_TRANSCEND_8GB&REV_1100\00H8096XQ9UW1BQ5&0:JetFlash Transcend 8GB USB Device"
на основе '\'
(символа)
Проб. 1: но этот символ считается escape-символом
Пример 2: \0
в середине строки рассматривается как конец строки.
Я пробовал так много способов.
(i) Я попытался заменить '\'
другим символом типа '$'
и попытался разобрать с помощью sscanf()
но это не сработало.
Можете ли вы что-нибудь предложить?
#include <string.h>
#include <stdio.h>
int main()
{
char str[80] = "This is \www.tutorialspoint.com \website";
const char s[2] = "\\";
char *token;
/* get the first token */
token = strtok(str, s);
/* walk through other tokens */
while( token != NULL )
{
printf( " %s\n", token );
token = strtok(NULL, s);
}
return(0);
}
Помните Escape Sequences (\\
, \n
, \0
и т.д.) - это один символ.
Чтобы иметь символ \
в строке, инициализированной в самом коде, обязательно необходимо использовать \\
в строке инициализации.
Если вы предоставляете ввод во время выполнения, то вы должны использовать \
(Single BackSlash) для ввода. Предоставление ввода таким образом не будет рассматривать символ \0
как символ ASCII-0, вместо этого он будет обрабатываться как \
после которого следует 0
(два символа).
В вашем случае вы хотите разобрать "USBSTOR\D...", вы можете сделать это либо путем сохранения его в строке const
(помните \\
в этом случае), либо предоставив его как консоль входных форм или файл на диске (Здесь вы должны использовать single \
).
В любом из вышеперечисленных способов, когда вы читаете строку, вы получите правильный символ, ожидаемый, например, для первого случая \\
разрешит \
при его чтении или распечатке.
Сделайте эту модификацию char str[80] = "This is \\www.tutorialspoint.com \\website";
При этом ваш результат:
This is
www.tutorialspoint.com
website
Помните: любой строковый литерал, который вы используете в коде, требует escape-последовательности для обратной косой черты.