C で、error: label at end of compound statement

人の作った C プログラムを gcc でコンパイルしていたら、 XXXXX.c:999: error: label at end of compound statement とのエラー。
人の作った C プログラムを gcc でコンパイルしていたら、 XXXXX.c:999: error: label at end of compound statement とのエラー。
Posted on 2006-11-16 by yas |

Python 文法のポイント

Python を覚える際に、まずは以下のポイントを頭に入れておくとよいと思う。基本的に Java + PHP + Perl といった感じだ。
  • ファイルの拡張子は .py
  • コメントは #
  • 区切り文字は改行
  • 他の言語にみられるブロック {...} はインデント
  • 式や宣言の行の 1行目にの最後にコロン(:)
  • 関数や宣言は def で開始
  • クラス宣言は class で開始
  • ライブラリインポートは import
  • 変数の型宣言はなし(ガーベッジコレクションあり)
  • グローバル変数は PHP みたく global キーワードを付ける
  • 配列は [...]
  • リテラルはダブルクォーテーション(")、その前に u を付ける(u")と unicode を表す
追記: ちなみに、Google の人から今日(2006/11/15)直接聞いた話だが、Google でよく使われるプログラミング言語は、C/C++、Java、Python だそうだ。 Updated: 2006/11/15 Original: 2006/11/14
Python を覚える際に、まずは以下のポイントを頭に入れておくとよいと思う。基本的に Java + PHP + Perl といった感じだ。
  • ファイルの拡張子は .py
  • コメントは #
  • 区切り文字は改行
  • 他の言語にみられるブロック {...} はインデント
  • 式や宣言の行の 1行目にの最後にコロン(:)
  • 関数や宣言は def で開始
  • クラス宣言は class で開始
  • ライブラリインポートは import
  • 変数の型宣言はなし(ガーベッジコレクションあり)
  • グローバル変数は PHP みたく global キーワードを付ける
  • 配列は [...]
  • リテラルはダブルクォーテーション(")、その前に u を付ける(u")と unicode を表す
追記: ちなみに、Google の人から今日(2006/11/15)直接聞いた話だが、Google でよく使われるプログラミング言語は、C/C++、Java、Python だそうだ。 Updated: 2006/11/15 Original: 2006/11/14

C で、バイト列を画面に文字列で表示する方法

ここでは、作成したバイト列(バイナリ)のハッシュ値を表示する方法を考えてみよう。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int i, dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);
    SHA1(b, dlen, hash);
printf("hash: ");
    <strong>for(i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02X", *(hash + i));
    }</strong>
printf("\n");
    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。コンパイルすると a.out というファイルができるから ./a.out [Enter キー] で実行してみよう。
ここでは、作成したバイト列(バイナリ)のハッシュ値を表示する方法を考えてみよう。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int i, dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);
    SHA1(b, dlen, hash);
printf("hash: ");
    <strong>for(i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02X", *(hash + i));
    }</strong>
printf("\n");
    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。コンパイルすると a.out というファイルができるから ./a.out [Enter キー] で実行してみよう。

C で、ハッシュ値を求める方法

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);  //  s を b に dlen 分だけ(すなわち文字列 s を)コピーする。
    SHA1(b, dlen, hash); // b を c 分だけのハッシュ値を hash に求める。

// 処理

    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);  //  s を b に dlen 分だけ(すなわち文字列 s を)コピーする。
    SHA1(b, dlen, hash); // b を c 分だけのハッシュ値を hash に求める。

// 処理

    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。
Posted on 2006-11-07 by yas |