[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. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (187 PV)
  2. Google News (グーグルニュース)日本版 (34 PV)
  3. FX最強ツール「Infinity(川ツールを使った高額インジ)」販売で話題のFX系YouTubeチャンネル #詐欺とまでは言えないようだが (21 PV)
  4. [gcc]iconvで文字エンコードを変換するサンプルプログラム (20 PV)
  5. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (18 PV)
  6. 有力将棋系ユーチューバーのショウヤンさんが将棋ウォーズで「ソフト指し」を告白し衝撃走る (17 PV)
  7. Google Finance(グーグルファイナンス)日本版が表示されるようになってますが・・・ (11 PV)
  8. [将棋]ユーチューバーのクロノさんが将棋ウォーズ運営からアカウント停止の警告を受ける #ソフト指し #複垢 #アカBAN (9 PV)
  9. PHPでMySQLに接続して、SELECTでデータを取得するサンプルプログラム (8 PV)
  10. これは本物!実力とエンタメを兼ね備えたFX系ユーチューバー「投資マスター」のYouTubeチャンネル (8 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3518 PV)
  2. 有力将棋系ユーチューバーのショウヤンさんが将棋ウォーズで「ソフト指し」を告白し衝撃走る (1041 PV)
  3. Google News (グーグルニュース)日本版 (659 PV)
  4. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (395 PV)
  5. Google Finance(グーグルファイナンス)日本版が表示されるようになってますが・・・ (278 PV)
  6. FX最強ツール「Infinity(川ツールを使った高額インジ)」販売で話題のFX系YouTubeチャンネル #詐欺とまでは言えないようだが (247 PV)
  7. [将棋]ユーチューバーのクロノさんが将棋ウォーズ運営からアカウント停止の警告を受ける #ソフト指し #複垢 #アカBAN (239 PV)
  8. Google Maps(グーグルマップ)日本版 - 地図検索、ルート検索 (216 PV)
  9. 嬉野流開発者のたまごん(嬉野宏明)さんがソフト指し疑惑で将棋倶楽部24のアカウントを停止されてしまう #将棋 (166 PV)
  10. [将棋]角換わり▲4五桂速攻(△6五桂速攻) #佐藤天彦名人 #三浦弘行九段 (147 PV)

アクセス統計

ディレクトリ

関連サイト