- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 17 pc11.2ch.net/test/read.cgi/tech/1185286631/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 94代目 pc11.2ch.net/test/read.cgi/tech/1185452895/
- 855 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 00:25:48 ]
- >>852
EOF=1A じゃなかったかな。昔のテキストファイルには使っていたと聞くよ。
- 856 名前:852 mailto:sage [2007/09/15(土) 00:40:18 ]
- >>855
MS-DOSのテキストファイルにはEOF(1Ah)が書かれていたようですね。 EOF(1Ah)がファイル内に実際にデータとして書かれているものと書かれていないもの さらに、書かれているもののうちアプリケーションがこのEOF(1Ah)をデータとして 意識すべきものと意識しなくてよいもの があるようですね。 ファイルのデータをレングスで管理しているファイルシステムはEOFがなくて、 このレングスがないファイルシステムにはEOFがデータとしてある。 ということでしょうか。
- 857 名前:852 mailto:sage [2007/09/15(土) 00:45:30 ]
- ということで>>850さん
EOFをアプリケーションで書き出す必要があるかないかは、 「ファイルの仕様による」ということです。 Windowsのハードディスクのファイルは書き出す必要はありません。
- 858 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 00:51:53 ]
- >>852、855
ありがとうございます〜 むっちゃわかりやすかったっす。
- 859 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 01:47:18 ]
- CのライブラリのEOFとアプリが使う終了のマークを一緒にしたらだめでしょ。
- 860 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:08:55 ]
- >>817
お前とかうぜーよ、偉そうに。英語すら理解していないだろ。 ttp://dictionary.goo.ne.jp/search.php?MT=path&kind=ej&mode=0&base=1&row=0 必要なデータやプログラムのある場所へPATHを通しておくことで どこのディレクトリからでも扱えるようにできるようになることくらい知っているだろ。 っつかお前、DOSとかその他そういった仕組みを持ったシステムを使ったことないだろ?
- 861 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:12:21 ]
- >>857
>Windowsのハードディスクのファイルは書き出す必要はありません。 判っていないのならレスしなくてもよろしいのでは?
- 862 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:13:29 ]
- どうやらPATHの意味をそれぞれ勝手に解釈している同士が罵り合っている模様。
仲のいいことで。
- 863 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:17:01 ]
- >>861
そういうレスはいけないと思うよ。 間違っているを指摘すべきだと思う。
- 864 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:41:12 ]
- 猫でもわかるC言語プログラミングP.196によると下記のようなプログラムはだめ
ということですがBCCではコンパイルが通り、実行しても問題は見られませんでした char *strではなくchar str[32]なら可とのこと なぜでしょうか? もうひとつ 下記のプログラムでprintf("%sの長さは%dです\n",*str,len); のように%sに対して*strとすると実行時にエラーになりますが *strなら中身のASCIIコードが入っているはずで問題ないと思うのですが… ご教示願います。 #include <stdio.h> #include <string.h> int main() { char *str; size_t len; printf("文字列を入力してください。--"); scanf("%s", str); len = strlen(str); printf("%sの長さは%dです\n",str,len); return 0; }
- 865 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:41:52 ]
- >>864
%s→%c
- 866 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:43:37 ]
- char str[32]でも不可です
- 867 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:48:22 ]
- >>864
> 猫でもわかるC言語プログラミングP.196によると下記のようなプログラムはだめ > ということですがBCCではコンパイルが通り、実行しても問題は見られませんでした > char *strではなくchar str[32]なら可とのこと 問題が無かったのは str の指す先が*偶然*致命的な場所で無かっただけで 予期しない場所が書き換えられています str が指す先がちゃんと確保されている場合には問題は無いです
- 868 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 03:05:22 ]
- >>864
その本には、なぜダメかってのは書いてないのか。
- 869 名前:デフォルトの名無しさん [2007/09/15(土) 04:39:20 ]
- scanfとprintfの関数の違いと働きを教えてください。お願いします。
- 870 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 04:41:45 ]
- ja.wikipedia.org/wiki/Scanf
ja.wikipedia.org/wiki/Printf
- 871 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 04:48:43 ]
- >>869
scanf - scan with format printf - print with format
- 872 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:13:04 ]
- さすが猫ですね
- 873 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:32:08 ]
- データが1個増えるたびにreallocしてることが発覚しましたw
バカすぎますか?
- 874 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:34:36 ]
- はい
- 875 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:34:40 ]
- データが増える間隔とデータ量による
- 876 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:38:15 ]
- >>873
実装が楽なので使い捨てコードのときにはそうします
- 877 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:42:30 ]
- >>873
一個ごとでも、まったくOK。 データの複数個ずつぶんのメモリを確保しても、ほとんどの場合は、 スピードアップしません。
- 878 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:48:01 ]
- vectorとかでも中では一回ごとにrealloc的なことしてるんだっけ?
- 879 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 01:24:37 ]
- >>878
ここは C のスレですぜ > vector ってなに?
- 880 名前:デフォルトの名無しさん [2007/09/16(日) 01:34:48 ]
- ここは東京だぜ
- 881 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 02:19:19 ]
- 読み込んだ数式を逆ポーランド記法に変換しようとしてるんですが、
1+(3+(4-2)+1)*4 のようにすると、1342-+1+4*-という式になってしまいます。 else if(source[i] == ')'){ while( now > 0 && stack[now -1] != '('){ rpn[r++] = stack[--now]; } --now; } 原因がわかりません。教えてください。 できれば解決策もm(_ _)m
- 882 名前:864 mailto:sage [2007/09/16(日) 02:45:34 ]
- レスありがとうございます
>>865 確かに%cとすると一文字だけですが表示されます JavaをかじってたこともあってString型がCにもあると思い込み,いわゆる文字列がポインタであることを理解していませんでした pritf("%d",i);のようにカンマの後には変数名を書けばよいと思っていましたが %sの場合は例外でポインタを書かないといけないのですね 確かにそうすると表記上はすべて変数名のように見えて綺麗ですから、そのためにそのような設計になったのでしょうか… >>866 31文字以上は入力しないという前提でも不可なのでしょうか? >>867 char *str ではポインタ(アドレス変数)が確保されただけでその中身については未定義で さらに、その中身のアドレスの後ろが他のことに使われていないという保証もないから不可で char str[32]なら31文字分については安全な場所が確保されるからOKという理解で正しいでしょうか >>869 本文をそのまま引用すると 『strはchar型へのポインタですね。ということはアドレスを格納する変数なのです。これではだめですね。』 とのことです。 しかし、scanfやstrlenについては、渡すべきものはアドレスであり間違えているようには考えられず printfについても%sにはポインタを渡すのであっているようなので理由が私にはわかりませんでした。
- 883 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 03:18:00 ]
- 適当な本だな
- 884 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 03:34:24 ]
- 渡すべきものはアドレスだが、その渡しているアドレスの値が適切なのかどうかということだ。
scanfは、渡されたアドレスが示すメモリ領域を書き換えるのだから、適当なアドレスを渡してはいけない。 特に、初期化してないポインタ (どのアドレスを指してるか不定) を渡すなんて、もってのほか。 書き換えられても安全な領域 (char[32]とか) を用意して、そのアドレスを渡す必要がある。
- 885 名前:881 mailto:sage [2007/09/16(日) 04:01:59 ]
- すみません自己解決しましたm(_ _)m
- 886 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 04:12:05 ]
- 1+(3+(4-2)+1)*4 は逆ポーランド記法で
4 2 - 3 + 1 + 4 * 1 + で合ってますか?
- 887 名前:デフォルトの名無しさん [2007/09/16(日) 04:22:14 ]
- 車輪の再開発は止めましょう
その程度の計算なら電卓でできます。 暗算でもできるでしょ? 作る意味無いよ
- 888 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 04:28:51 ]
- ∩_
〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
- 889 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 04:58:38 ]
- ∩___∩
| ノ ヽ ! / ● ● | こいつも最高にアホ | ( _●_) ミ 彡、 |∪| / .\ / __ ヽノ / \ ...\ (___) / .│ ..│ / ヽ l..lUUU .U
- 890 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 05:19:03 ]
- そんな餌に俺様が釣られクマーー
- 891 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 06:42:36 ]
- >>886
1342-+1+4*+ かな。
- 892 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 08:17:49 ]
- >>886
適当に作ってみた。 やっぱり 1342-+1+4*+ になる。 sund1.sakura.ne.jp/uploader/source/up11687.c
- 893 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 09:03:32 ]
- >>886
1+(2+3) と 2+3+1 が同じだというならそれでも合ってる
- 894 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:10:01 ]
- >>873-879
おれの居る現場の既存のコードでは、 最終的に300〜400MBのメモリを確保するのに、reallocを繰り返して、 延べ 2.5GBぶんコピーを繰り返している事が分かったよ。 DBのテーブルのデータを一度メモリーに全部取り出すんだ...orz
- 895 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:12:34 ]
- >>894
それだとDBの意味ががが 元からなさそうな感じではあるけど
- 896 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:32:44 ]
- realloc()を使うと、毎回確保し直すと思っている馬鹿が多いのか?
自分でわざわざ回数まとめてからrealloc()するようなコード書くより、 毎回realloc()する方が速いかもしれないぞw
- 897 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:39:00 ]
- そんな当たり前の事言われても。
- 898 名前:894 mailto:sage [2007/09/16(日) 13:03:07 ]
- >>895
まあ100%無意味って訳じゃないんだけどね。一応SQLの恩恵は受けているから。 でもバッチ系が全部、「始めてプログラムを組んだんじゃないか?」ってレベルなんだ。 >>894のコードも基本的に集計するだけだから、DBの設計さえ良ければ単純なSQLで済むはずなのになー。 ハッ、ここは愚痴スレじゃなかったなスマソ。
- 899 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 13:10:10 ]
- 気づいたんなら送信するな
- 900 名前:894 mailto:sage [2007/09/16(日) 13:16:21 ]
- >>896
その話は聞いたことあるが、そういうレベルじゃない。 reallocその物を使わないで済ませられるような場面でやってるだよ。
- 901 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:00:29 ]
- realloc()って新たに確保した場所にそれ以前のものをコピーするんじゃなかったっけ?
毎回やっているかは知らんが
- 902 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:06:55 ]
- >>901
元の領域に連続した領域を確保できれば、単純な拡張でよいので、 コピーは省略出来る。
- 903 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:09:04 ]
- >>901
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ void *ptr=NULL, *new_ptr; int i, count=0; for(i=1;i<=1000;i++){ new_ptr=realloc(ptr, i*100); if(ptr!=new_ptr){ fprintf(stderr, "pointer changed. [%d]\n", i); ptr=new_ptr; count++; } } printf("change count : %d\n", count); free(ptr); return 0; }
- 904 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:10:12 ]
- 巨大な配列を宣言時に同じ値で初期化したいんですけどこういう場合に簡略化する書き方とかないですかね
void func() { static int array[3000] = { 0, .. ,0}; } 的な…
- 905 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:20:31 ]
- {0}
っていうかstaticって自動的に0で初期化されなかったっけ?
- 906 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:33:31 ]
- サンクス。うまくいきますた。
- 907 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:43:25 ]
- グローバル変数、静的変数は宣言時に全ての要素が 0 で初期化される。
ローカルな配列は、宣言時に1つ(1要素)でも初期化を行うと残りが全て 0 で初期化される。 int a[3000]; // a[0]〜a[2999] まで全て 0 int b[3000] = {1, 2, 3}; // b[0]=1, b[1]=2, b[2]=3, b[3]〜b[2999]=0 int c[3000] = {1}; // c[0]=1, c[1]〜c[2999]=0 main(){ int d[3000]; // d[0]〜d[2999] まで全て不定値(適当な値) static int e[3000]; // a と同じ int f[3000] = {1, 2}; // bとかcと同じ } よく、ローカルな配列を 0 で初期化するために array[256] = {0}; とか書くが、 1要素でも初期化すると残りが 0 で初期化されることを利用しているだけ。 array[256] = {1}; と書いて全ての要素が 1 で初期化されると誤解するやつが多い。 任意の値で初期化させたければ、n次元の配列はn重のループを普通に書く。 C++ならalgorithmのfillなんかを使えばいい。
- 908 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:37:21 ]
- >>904
staticなら自動的に0で初期化される。 関数内staticにするなら、他の値は難しいな。 呼び出しの都度初期化でいいならmemsetとかでも良いだろうけど。
- 909 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:39:25 ]
- 複数ファイルにソースを書くときのお作法を知りたいんだけど、わかりやすいところないかな
- 910 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 01:00:33 ]
- >>909
ヘッダファイルから書き始める
- 911 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 02:30:43 ]
- 新しくコード書くとき
既存のファイルに加えるか 新しくファイル作成するか迷うんだけど どういう基準でやったらいいですか?
- 912 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 10:25:01 ]
- 設計上モジュールが分かれてたらファイルを分ける。
CUnit使うなら1ファイルに1関数。
- 913 名前: ◆7qRx8xrwgo [2007/09/17(月) 11:51:39 ]
- 質問させていただきます。
円記号を表示します。 :\ アポストロフィを表示します。:\ と、出力したくて #include <stdio.h> int main(void) { printf("円記号を表示します。 :%c\n", '\\'); printf("アポストロフィを表示します。:%c\n", '\''); return 0; } でコンパイルしてみたのですが、 Sample5.c:5:12: warning: unknown escape sequence: '\216' Sample5.c:6:12: warning: unknown escape sequence: '\216' とエラーが出たのですが、どうすればエラーが表示されなくなりますか?
- 914 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 11:53:04 ]
- >>913
表示 ↓ 出力
- 915 名前:デフォルトの名無しさん [2007/09/17(月) 11:55:23 ]
- 「表」の後ろに¥を入れれば直るかも。
- 916 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 11:59:13 ]
- OSとコンパイラは何?
- 917 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:03:44 ]
- >>913
文字コード Shift-Jis の時 [表示] = 0x95 0x5C 0x8E 0xA6 0x5C = '\\' 0x8E = 0216 <- 8進数 \216 を解釈しようとして、そんなエスケープシーケンスがないという *警告*がでているだけ 日本語対応しているコンパイラを使うほうが楽
- 918 名前:913 ◆7qRx8xrwgo [2007/09/17(月) 12:16:57 ]
- >>914
本に表示と書いてありました >>915 失礼ながら半信半疑で試したところ、仰るとおり直りました。 >>916 OS:Wndows XP HE SP2 コンパイラ: gcc(Cygwin) >>917 解説ありがとうございます。今はコンパイラを変えたくないのでこのままでいこうと思います。 もしよろしければ、「表示」のように、気をつけた方がいい単語が他にもありましたら教えてください。
- 919 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:22:35 ]
- >>918
―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃
- 920 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:26:19 ]
- gcc に --input-charset=cp932 --exec-charset=cp932 オプションをつけてみ
- 921 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:32:32 ]
- >>920 thx
MinGW (GCC.EXE (GCC) 3.4.2 (mingw-special)) でもいけたよ さっそく CFLAGS に追加しておいた
- 922 名前:918 ◆7qRx8xrwgo [2007/09/17(月) 12:36:56 ]
- >>920
仰るとおりに実行した所エラーが表示されることも無くコンパイルできました。感謝です。
- 923 名前:デフォルトの名無しさん [2007/09/17(月) 12:41:51 ]
- 皆さん、実際にC言語でどのようなソフトを書かれているんですか?
- 924 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:51:00 ]
- OS書いていますけど?
- 925 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:53:14 ]
- 通信プロトコル。
OSIでデータリンクからセッションぐらいまで
- 926 名前:デフォルトの名無しさん [2007/09/17(月) 12:55:28 ]
- どこにもしようしているおえすめいかいてない
あおえすをしいでかいてるのか すごいなおまえ
- 927 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:01:33 ]
- C言語は学校の授業や課題でしか使わんな
普段使うのはVC++かJavaかC#
- 928 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:43:27 ]
- >>923
去年、一年くらい、10年くらい前に作られたシステムの保守要員やらされて、辟易した。
- 929 名前:デフォルトの名無しさん [2007/09/17(月) 16:20:36 ]
- 保守ってどんなことやるの?
- 930 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:40:25 ]
- >>929
お客さんとこのシステムの構成が変わったりなんか要望があったら、それにあわせてコードを書き換えたりとか。 新規のお客さんもあったけど、すでにあるコードから必要なコードをコピペして、ちょっといじって もって行ったりとかするだけ。
- 931 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:45:13 ]
- ものすごくつまんなそうな仕事ですね
- 932 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:57:41 ]
- つまらないうえに、すごいつらかった。
基本的にソースコードぐちゃぐちゃだし。
- 933 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 17:06:15 ]
- 今の現場、つまらないうえに、すごいつらい。
基本的にソースぐちゃぐちゃだし。
- 934 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:32:30 ]
- 既存のファイルのファイルスコープにある変数や関数を使いたい、
っていうんじゃないんだろうから、迷ったら別ファイルでいいんじゃないでしょうか? ファイルを分ける弊害って、なにかあるでしょうか?
- 935 名前:934 mailto:sage [2007/09/17(月) 18:35:31 ]
- リロードわすれてたっはっは〜
- 936 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 21:35:29 ]
- >>933
でも、大事な仕事だよ。 今後はC言語でも保守の仕事が増えるんじゃないか!? COBOLはすでにそうなっている。 しっかりとしたコーディング規約があって、その通りに作られていればいいんだが、 Cでの開発プロジェクトにはコーディング規約がないくて、各自各様のスタイルでコーディング していることが多い。最近はそうでもないかもしれないけどね。
- 937 名前:933 mailto:sage [2007/09/17(月) 22:09:47 ]
- >>934は>>911に対するレス?
>>936 スタイル云々以前の問題でね、多分プログラミング自体の経験が無い人か、 少なくとも、スコープを分かってない人が書いたプログラムで、それが原因のバグとかもある。 おそらくテストもマトモにしてないと思われるよ。orz >>911 で、「分ける分けない」て話は、スコープとも関わる話なのでスコープを理解すること。 関連性が強い物、似たような機能のものを集めるという分け方もある。 「モジュール強度 結合度 独立性」という言葉を調べると何かわかるかも。
- 938 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 22:18:54 ]
- >>937
「モジュール強度 結合度 独立性」 なつかしい言葉だね
- 939 名前:デフォルトの名無しさん [2007/09/18(火) 01:53:17 ]
- 何方か、標準関数とポインタ変数についてを詳しく教えてくださる方はいらっしゃいますか?
自分が持ったいた参考書がこの2つの内容が掲載されてた部分が破けていて分からなくて困っています^^;
- 940 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:00:19 ]
- >>939
ポインタ www.geocities.jp/ky_webid/c/028.html 標準関数 always-pg.com/c/runtime_rd/
- 941 名前:デフォルトの名無しさん [2007/09/18(火) 02:05:59 ]
- 940>有難う御座います
- 942 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:07:38 ]
- >>940
>「&」をアドレス演算子といいます。「&」がアドレスを表すので「"アンド"レス」と覚えておくと分かりやすいかも知れません。 なごんだ(´ー`)
- 943 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:10:59 ]
- 今更Cなんて初めて使う機会ないよ
OSやドライバを作るなら必要だが、そのレベルに達するまで恐らく5年以上は掛かるだろう
- 944 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:13:02 ]
- がんばれば30日でできるらしいぞ
- 945 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:14:40 ]
- あれかw
- 946 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:23:30 ]
- C言語の言うことなら何でも聞きます
- 947 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:58:03 ]
- ttp://always-pg.com/c/runtime_rd/string/wcslen.html
こちらの「文字列の文字数を求める」サンプルプログラムですが、 "Cプログラム" の長さは 6 が返るはずなんですが 11 が返ります。 なぜでしょうか? 環境は、linuxで gcc 3.3.6 です。
- 948 名前:デフォルトの名無しさん [2007/09/18(火) 03:01:06 ]
- 全角は2文字
- 949 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 03:26:23 ]
- ちょっと語弊を招きかねない回答だなw
全角文字は2バイトなのでC標準のstrlenのようにバイト数を返す関数を使用した場合、文字数が得られるとは限らない。 ちゃんとロケールを設定すれば6になるはずだが?一字一句間違えずにコピペした?
- 950 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 03:31:49 ]
- >>949
ダウンロードして展開した wcslen.c というファイルを euc-jp-unix にしてから そのままコンパイルして実行してます。
- 951 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 03:58:59 ]
- >>947-950
試してみたが、VC++では 6 が返ってきた。 cygwin gcc 3.4.4 ではコンパイルできなかった。 L"Cプログラム"; の L でパースエラー。
- 952 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 04:14:27 ]
- え?ってかCなの?C++じゃなくて?
C標準に2バイト文字なんて概念あったっけ?
- 953 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 04:22:59 ]
- wchat_t
- 954 名前:デフォルトの名無しさん [2007/09/18(火) 07:52:09 ]
- 質問させてくださりませ。
void parse_long_options (int _argc, char **_argv, const char *_command_name, ...); の中の"..."の点三つはどういう意味なのでしょうか? ご教授宜しくお願い致します。
- 955 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:01:23 ]
- >>954
教授じゃなくて教示な www.geocities.jp/ky_webid/c/057.html
- 956 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:30:14 ]
- 引数の数が可変であるってこと。
|

|