0

次の文字列を解析しようとしています。

"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);
}
4

2 に答える 2

1

エスケープ シーケンス ( など) は 1 文字であることを忘れないでください。\\\n\0

\コード自体で初期化される文字列に文字を含めるには、初期化文字列で使用することが必須です\\

実行時に入力を提供する場合は、入力に\(Single BackSlash) を使用する必要があります。この方法で入力を提供すると、ASCII-0 文字とは見なされ、代わりに(2 文字)が続く\0ものとして扱われます。\0

あなたの場合、"USBSTOR\D..."を解析したい場合は、それを文字列に格納するかconst(この場合は覚えておいてください\\)、入力フォーム コンソールまたはディスク ファイルとして提供することで実行できます (ここでは、 single を使用する必要があります\)。

上記の方法のいずれかで、文字列を読み取ると、期待どおりの正しい文字が得られます。たとえば、最初のケースは、読み取りまたは印刷時に\\解決されます。\

于 2013-10-15T06:05:37.620 に答える
1

この変更を行う char str[80] = "This is \\www.tutorialspoint.com \\website";

これで、出力は次のようになります。

This is 
www.tutorialspoint.com 
website

注意: コードで使用する文字列リテラルには、バックスラッシュのエスケープ シーケンスが必要です。

于 2013-10-15T05:56:25.067 に答える