我正在尝试解析以下字符串:
"USBSTOR\DISK&VEN_JETFLASH&PROD_TRANSCEND_8GB&REV_1100\00H8096XQ9UW1BQ5&0:JetFlash Transcend 8GB USB Device"
基于'\'
(字符)
问题1:但此字符被视为转义字符
问题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);
}
答案 0 :(得分:1)
进行此修改
char str[80] = "This is \\www.tutorialspoint.com \\website";
这样,你的输出是:
This is
www.tutorialspoint.com
website
请记住:您在代码中使用的任何字符串文字都需要反斜杠的转义序列。
答案 1 :(得分:1)
请记住转义序列(\\
,\n
,\0
等)是单个字符。
要在代码本身初始化的字符串中包含\
字符,必须在初始化字符串中使用\\
。
如果您在运行时提供输入,那么您应该使用\
(单一反斜杠)进行输入,以这种方式提供输入不会将\0
视为ASCII-0字符,将被视为\
,后跟0
(两个字符)。
在您的情况下,您要解析“USBSTOR \ D ...”,您可以将其存储在const
字符串中(请记住\\
在这种情况下)或通过提供控制台或磁盘文件作为输入(这里你应该使用单\
)。
在上述任何一种方式中,当您阅读字符串时,您将获得所需的正确字符,例如,当您阅读或打印时,\\
将首先解析为\
。