[C言語]の検索結果


苦しんで覚えるC言語(苦C)は、プログラミング初心者を対象としたC言語入門サイト。C言語の基本機能が体系立てて解説されていて、C言語の取得に苦しんでいる人に非常に勧めのサイト。

苦しんで覚えるC言語

苦Cとは

苦しんで覚えるC言語(苦C)は、初心者を対象としたC言語入門サイト。C言語の基本機能が体系立てて解説されており、市販書籍と同等以上の完成度となっている。 市販書籍には仕組みの説明を省略して読みやすさをアピールする本が多い中、苦Cではくどい説明を行っており、挫折経験のある初心者に最適だという。 苦Cのファイルをダウンロードすることもできる。

C言語(しーげんご、C language)とは

C言語は、1972年にアメリカAT&T社ベル研究所のデニス・M・リッチー(Dennis M. Ritchie)氏とブライアン・W・カーニハン(Brian. W. Kernighan)氏によって開発された、コンピュータのソフトウェアをつくる際に使用されるプログラミング言語の一つで、B言語(びーげんご、B language)というプログラミング言語の後継として開発されたことからC言語と呼ばれている。特定のハードウェアに依存した部分が言語仕様から切り離されているため、移植性の高いプログラムを書くことができる。

苦しんで覚えるC言語 書籍版

苦しんで覚えるC言語
秀和システム 著者:MMGames


amazon.co.jpのカスタマーレビューを見る
powered by amalink



[2335] Posted by kagahiro at 2013/08/21 16:27:51
0 point | Link (1) | Trackback (0) | Comment (0)

10進数を2進数文字列に変換する関数は前に作成してますが、逆に「1101」「10110000」などの2進数文字列を10進数の整数値に変換するC言語用の関数がなかったので作成してみました。

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

int bin2dec(char *src);

int main(void)
{
    char binstr1[] = "1101";     /* 13 */
    char binstr2[] = "10110000";    /* 176 */
    char binstr3[] = "1000000100000000";    /* 33024 */

    int dec = 0;

    dec = bin2dec(binstr1);
    printf("%s:%d(0x%02.2X)\n", binstr1, dec, dec);

    dec = bin2dec(binstr2);
    printf("%s:%d(0x%02.2X)\n", binstr2, dec, dec);

    dec = bin2dec(binstr3);
    printf("%s:%d(0x%02.2X)\n", binstr3, dec, dec);

    return 0;
}

/* 2進数文字列を10進数に変換 */
/* 10000000 -> 128, 1000 -> 8, 1000000000000000 -> 32768 */
int bin2dec(char *src)
{
    int dec = 0;
    for (;;) {
        if (*src == '1') {
            dec |= 1;
        }
        src++;
        if (!*src) {
            break;
        }
        dec <<= 1;
    }
    return dec;
}

実行結果
$ ./bin2dec
1101:13(0x0D)
10110000:176(0xB0)
1000000100000000:33024(0x8100)

[2325] Posted by kagahiro at 2013/07/03 00:10:55
0 point | Link (1) | Trackback (0) | Comment (0)

C言語のstrncpy関数やmemcpy関数ではバイト単位の操作になるので、漢字、ひらがな、カタカナなどの全角文字を文字数で指定して部分文字列を取り出すことができません。 そこで半角英数も全角文字も1文字として部分文字列を取り出すことができる関数を作成します。

以下はそのコードです。[C言語]UTF-8でエンコードされた文字列の文字数を取得するコードと同様に、文字の1バイト目のビットの状態を調べることによってその文字が何バイト文字を判定しています。

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

char *substr_utf8(char *dest, char *src, int offset, int len);
int _bytesize(unsigned char code);


int main(void)
{
    char *testStr = "ABCDEFGあいうえおアイウエオ愛夢佐々木";
    char strBuf[256];

    memset(strBuf, 0sizeof strBuf);

    printf("substr_utf8($testStr, 0, 5) = %s\n", substr_utf8(strBuf, testStr, 05));
    printf("substr_utf8($testStr, 3, 3) = %s\n", substr_utf8(strBuf, testStr, 33));
    printf("substr_utf8($testStr, 10, 4) = %s\n", substr_utf8(strBuf, testStr, 104));
    printf("substr_utf8($testStr, 13, 5) = %s\n", substr_utf8(strBuf, testStr, 135));

    return 0;
}

/* UTF-8でエンコードされた文字列の部分文字列を取り出す */
/* substr_utf8 (文字列式, オフセット, 長さ)*/
char *substr_utf8(char *dest, char *src, int offset, int len)
{
    int srclen = strlen(src);
    int pos = 0;
    int count = 0;
    char *cp = dest;

    while (pos < srclen) {
        unsigned char code;
        code = *(src + pos); /* ASCIIコード値を取得 */
        int bytelen = _bytesize(code);

        if (count >= offset && count < (offset + len)) {
            memcpy(cp, (src + pos), bytelen);
            cp += bytelen;
            *cp = '\0';
        }
        pos += bytelen;
        count++; /* 文字数をカウント */
    }

    return dest;
}

/* 文字のバイト長を求める */
int _bytesize(unsigned char code)
{
    int size = 1;
    int i;

    if (0x80 & code) { /* 1バイト文字以外 */
        for (i = 2; i <= 8; i++) {
            code <<= 1;
            if (!(0x80 & code)) {
                break;
            }
            size++;
        }
    }
    return size;
}

実行結果
$ ./substr_utf8
substr_utf8($testStr, 0, 5) = ABCDE
substr_utf8($testStr, 3, 3) = DEF
substr_utf8($testStr, 10, 4) = えおアイ
substr_utf8($testStr, 13, 5) = イウエオ愛

[2324] Posted by kagahiro at 2013/07/02 11:02:48
0 point | Link (3) | Trackback (0) | Comment (0)

C言語のstrlen関数では文字列の長さとして返ってくる値はバイト単位となるので、UTF-8でエンコードされている場合、漢字、ひらがな、カタカナなどは1文字で3となってしまいます。Webアプリケーションのテキスト処理で...
[2323] Posted by kagahiro at 2013/07/01 20:46:54
1 point | Link (3) | Trackback (0) | Comment (1)

1バイト(8bit)の10進数を2進数の文字列に変換するコードのC言語版です。C言語では、PerlやPHPなどのように2進文字列に変換してくれる便利な関数は関数はないので、ビット演算子を使ってビットのオン・オフを判定して...
[2253] Posted by kagahiro at 2012/12/21 17:23:17
0 point | Link (6) | Trackback (0) | Comment (0)

2038年問題とは、2038年1月19日3時14分7秒を過ぎると、コンピュータが誤動作する可能性があるとされる問題のこと。C言語の伝統的な実装ではtime_t型の範囲や精度はintとして実装されており、intは符号つき32ビットで...
[2224] Posted by kagahiro at 2012/09/13 15:20:37
0 point | Link (1) | Trackback (0) | Comment (0)

「iCodeChecker」は、C言語で作成されたソースコードに脆弱性が存在しないかどうかを検査することができるソースコードセキュリティ検査ツール。VMイメージ、パッケージ形式、ソースコード形式の3つの配布形式でダウ...
[2181] Posted by kagahiro at 2012/05/08 16:36:13
0 point | Link (0) | Trackback (0) | Comment (0)

世界で最も有名なプログラミング言語C」の開発者の一人であるデニス・リッチー(Dennis RitChie)博士が70歳で死去したとのこと。デニス・リッチー博士の死は、Rob Pike氏のGoogle+への投稿で明らかになったが、今...
[2129] Posted by kagahiro at 2011/10/13 17:56:37
0 point | Link (1) | Trackback (0) | Comment (0)

GNU Debugger (GDB) は、Ada、C、C++、Objective-C、Pascal、FORTRANなど多くの言語に対応する、GPLで公開されているソースレベルのデバッガ。最新版では、D言語とARM Symbianに対応したほか、C++やPythonのサポート...
[2019] Posted by kagahiro at 2010/09/07 16:44:12
0 point | Link (1) | Trackback (0) | Comment (0)

単にテキストファイル等の文字エンコードを変換するのであれば、iconvコマンドを使用して変換すれば良いのですが、プログラム内部で取得した文字列の文字エンコードを変換したい場合もあります。以下のプログラムはL...
[1982] Posted by kagahiro at 2010/07/26 09:54:29
0 point | Link (2) | Trackback (0) | Comment (0)

  1 2 3  次へ >


アクセスランキング

今日のアクセスランキング TOP 10

  1. グーグルニュース(Google News)日本語版が見れるURL (11 PV)
  2. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (9 PV)
  3. フリーソフトウェア/オープンソースのタブー (9 PV)
  4. PHPでMySQLに接続して、SELECTでデータを取得するサンプルプログラム (3 PV)
  5. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (3 PV)
  6. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3 PV)
  7. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (2 PV)
  8. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (2 PV)
  9. Google News (グーグルニュース)日本版 (2 PV)
  10. 無料の動画ダウンロードツール「xVideoServiceThief」 (2 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2876 PV)
  2. グーグルニュース(Google News)日本語版が見れるURL (614 PV)
  3. Google News (グーグルニュース)日本版 (599 PV)
  4. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (328 PV)
  5. フリーソフトウェア/オープンソースのタブー (305 PV)
  6. [食べ物]七草粥(ななくさがゆ) (284 PV)
  7. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (231 PV)
  8. ウェブページを1回だけリロード(再表示)する方法 (136 PV)
  9. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (133 PV)
  10. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (127 PV)

アクセス統計

ディレクトリ

関連サイト