0

これが私のコードです:

#include <string.h>
#include <stdio.h>

int main( int argc, char** argv)
{
        static char tmpBuf[ 4 ];
        long idx;
        unsigned int cks;
        int bufLen = strlen(argv[1]);

        for ( idx = 0, cks = 0; idx < bufLen; idx++) {
            unsigned char c = argv[1][idx];
            printf("Char=%c|", c);
            cks += c;
        }
        sprintf( tmpBuf, "%03d", (unsigned int)( cks % 256 ) );
        printf( "\n%s\n", tmpBuf ); 

        return 0;
}

基本的に、印刷できない文字を含む可能性のあるすべての文字を合計します。私のテストでは:

>./a.out  "\1"
Char=\|Char=1|
141

プログラムが "\1" を、エスケープされた 1 文字ではなく、2 つの別個の文字として解釈することがわかります。

コードをエスケープして、印刷できない文字を取得するにはどうすればよいですか?

4

1 に答える 1

4

エスケープ シーケンスを正しく解釈するようにシェルに指示する必要があります。Bash を使用している場合:

$ ./a.out $'\1'
于 2013-06-05T19:23:34.483 に答える