トップページ⇒tech
1001コメント273KB

C言語なら、俺に聞け! <31>

レス数が1000を超えています。これ以上書き込みはできません。
0001SHOW-A息子NGNG
漏れは32才。22年間、父SHOW-Aにプログラムを叩き込まれてきた。
いろいろな言語を極めたが、一番漏れになじんだのはCだった。
Cのことなら父をも超えた。疑問な点があったら漏れに聞け。

便所とメシ食ってる時以外は暇だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。あと、至急父に仕事を与えてやってください。

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0002SHOW-A息子NGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0003SHOW-A息子NGNG
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
0004SHOW-A息子NGNG
C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART 5
http://pc3.2ch.net/test/read.cgi/tech/1027593322/

前スレ <30> http://pc3.2ch.net/test/read.cgi/tech/1030786546/
0005SHOW-A息子NGNG
【過去ログ】
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/
26 http://pc3.2ch.net/test/read.cgi/tech/1026048820/
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
0006デフォルトの名無しさんNGNG
乙〜
0007デフォルトの名無しさんNGNG
zuza
0008デフォルトの名無しさんNGNG
お前らちゃんと寝たのか?
0009デフォルトの名無しさんNGNG
>>1
乙カレサン
0010デフォルトの名無しさんNGNG
>>1
お疲れさま。
0011デフォルトの名無しさんNGNG
新スレage
0012デフォルトの名無しさんNGNG
二次元配列の先頭ポインタを返す関数はどう書けばよいのですか?
引数ならvoid h(int (*i)[5])のように書きますが。
0013デフォルトの名無しさんNGNG
>>12 ↓これを参考にするといいと思うよ
http://www.catnet.ne.jp/kouno/c_faq/c1.html#21
1.21:
charへのポインターを返す関数へのポインターを返す関数へのポインターN個から
なる配列をどうやって宣言すればよいか。
0014デフォルトの名無しさんNGNG
>>13
それを見ながら色々試してみましたができませんでした。
できないものだとあきらめます。
0015デフォルトの名無しさんNGNG
わーい、WinMeのクラシックソリティアで300秒切ったー!!
001613NGNG
>>12 出来たような気がする・・・↓
----------------------------------------------
typedef int D2[][2];

D2 d2_a = {{1,2},{3,4},{5,6}};
D2 *
get_d2_a () {
return &d2_a;
}

main () {
D2 *d2 = get_d2_a ();
int i;
for (i = 0; i < 3; i++) {
printf ("%d,%d\n", (*d2)[i][0], (*d2)[i][1]);
}
}
----------------------------------------------
C:\WINDOWS\デスクトップ\aa>gcc a.c

C:\WINDOWS\デスクトップ\aa>a
1,2
3,4
5,6

C:\WINDOWS\デスクトップ\aa>
----------------------------------------------
0017デフォルトの名無しさんNGNG
コメントをプロプロセッサが取り除いてもいいんですか?
0018デフォルトの名無しさんNGNG
プロプロでいいんですか?
001917NGNG
きちんと変換されたから気づかなかった(-_-;)
プリプロセッサ
0020デフォルトの名無しさんNGNG
int a=100;

if(!a)

とやると,ifはどう言うふうな条件になるの?
0021デフォルトの名無しさんNGNG
>>20
どうって・・・aが偽なら真だろ?
具体的に言うとaの値が0なら。
0022デフォルトの名無しさんNGNG
>>21
ありがとん

if(!a && !b && c => d)

とかも可能?
0023デフォルトの名無しさんNGNG
memset(array,1==2,sizeof array/sizeof array[0]);
0024デフォルトの名無しさんNGNG
>>22
文法上はOK
002523NGNG
無意味なもの書いたうえに間違っているな・・・
sizeof arrayだけだ。わっちゃまずい。
002622NGNG
if(!a && !b && c >= d)

の間違いだった
0027デフォルトの名無しさんNGNG
c => d
ここは?
下げ進行?
002824NGNG
文法上OKじゃないな
=>を見落とした^^;
0029デフォルトの名無しさんNGNG
>>17
「取り除いてもいいんですか?」って言うけど、
じゃあ逆に取り除かれると、まずいの?
むしろ、取り除かれなくてもいいの?
0030デフォルトの名無しさんNGNG
typedef enum {
  false = 0,
  true = (!false)
} boolean;

とかやると幸せになれるだろうか…。
0031デフォルトの名無しさんNGNG
>>30
なんで(!false)と括弧で括っているんだろう?
#defineならわかるが。
003231NGNG
というかtrue=1でいいのでは?
!0は必ず1を返すって聞いたよ。
0033デフォルトの名無しさんNGNG
ていうか、
if(?)のとき?が 0なら偽、それ以外は真と考えろといわれたんだが、
この考え方で危ないと切ってある?
0034デフォルトの名無しさんNGNG
>>33
ない。
0035デフォルトの名無しさんNGNG
>>33
それで正しい。でも!0のとき必ず1が帰ってくる仕様はとても便利
0036デフォルトの名無しさんNGNG
>>34-35
それが仕様であるわけですね?
if()以外でも、たとえば A ? B : C でもこの考え方でOKでつか?
0037デフォルトの名無しさんNGNG
int a = 10;

if ( 9 < a < 10)
printf("9 < a < 10");
else
printf("!(9 < a < 10");

これを実行したら, 9 < a < 10 と表示されました。
これはコンパイラのバグでしょうか?
0038デフォルトの名無しさんNGNG
>>37
それ、ちゃうねん…。
そういうコトがしたい時はこうする。

int a = 10;

if ( a < 9 && a > 10 ) {
    printf("9 < a < 10\n");
} else {
    printf("!(9 < a < 10)\n");
}
0039デフォルトの名無しさんNGNG
9 < a && a < 10
004038NGNG
>>39
ああ、そっちの方が分かりやすいな。無意識にやっちまったよ。
0041デフォルトの名無しさんNGNG
>>40
わかりやすいんじゃなくて>>39が正しい。
0042デフォルトの名無しさんNGNG
9 < a < 10

これは↓こんな感じ?

9 < a <10
↓
1(true) < 10
↓
1(true)
0043デフォルトの名無しさんNGNG
9 < a < 10
って左から結合するのかな
(9 < a) < 10
まぁ常に真だわな
0044デフォルトの名無しさんNGNG
うわ、遅れカブタ
004538NGNG
あ…条件式間違ってるんだね…欝死。
004637NGNG
なるほど、わかりました。
a = 10 として
9 < a && a < 10 って書くと
(9 < a) -> 1(true)
(a < 10) -> 0(false)
ってなって、
(9 < a && a < 10) -> (true && false) -> true
ってことですね。
0047デフォルトの名無しさんNGNG
>>46
ちょっとまて、なんでtrue&&falseがtrueになるんだよ(笑)
004837NGNG
いや、間違えた。
(9 < a) && a -> 1(true)
((9 < a) && a) < 10 -> (1 < 10) -> true
でいいんですね?
これでレベルが少し上がったかな。
0049デフォルトの名無しさんNGNG
>>48 ネタやめれ
0050デフォルトの名無しさんNGNG
本物の37は俺じゃー
オブ戦スレからコピーしてきただけ。
0051デフォルトの名無しさんNGNG
オブ船ってなに?
ヒーローものか?
0052デフォルトの名無しさんNGNG
オブジェクト指向は戦場では必要なし
http://pc3.2ch.net/test/read.cgi/tech/1031028125/
0053デフォルトの名無しさんNGNG
オブ戦なんて言われてるんだ。
005437NGNG
本物の37です。このスレに投稿したつもりがオブ戦にいっていましたか。
時間を置いてみたらちゃんとあったのでちゃんとC俺に書き込んだと思っていたんですが。
ちなみに48は偽者です。
0055デフォルトの名無しさんNGNG
>>54
ネタ投稿じゃなくて誤爆だったのか(藁
0056デフォルトの名無しさんNGNG
C俺 と来たか
005755NGNG
違う、>>54もネタだ
見事に釣られた(ToT)
0058デフォルトの名無しさんNGNG
まあまあ、新しい略語もわかったことだし
0059デフォルトの名無しさんNGNG
てーか、まだ続いてたのね>>52のスレ
006037NGNG
じゃあ、本当の質問ね。
1 < a < 10 のときって左から順番に処理していくのって仕様なの?
本当はこれがききたかったの。
0061デフォルトの名無しさんNGNG
仕様です。
0062デフォルトの名無しさんNGNG
>>36
OK。
if か ? : かは関係ない。
0063デフォルトの名無しさんNGNG
>>60
実際に処理(評価)される順序と結合順はまた別の話。
結合という意味で書いたのなら、左から順番でOK。
0064デフォルトの名無しさんNGNG
むしろ、a < b <= c = d < ... < z みたいな
複合的な多項演算子?を許す言語ってあんのかしら
0065デフォルトの名無しさんNGNG
Cを実務で使ってる方はやはり基本情報程度のC言語の問題なら10分少々で解けたりするんですか?
漏れは2か月前くらいからCを勉強しはじめて、一問解くのに1時間以上かかる事もあるのですが、、、、
0066デフォルトの名無しさんNGNG
>>65
2ヵ月で抱く疑問じゃないよそれ。1年やっても私これだけなんですがって
いうならわかるが。。。
0067デフォルトの名無しさんNGNG
基本情報のCの問題は実際にコンピュータ上で動かすのが難しいところが難点。
0068デフォルトの名無しさんNGNG
基本情報ってどんなの?
006967NGNG
できないって言っているわけじゃないよ。
同じ機能を持った実在する関数を探すのが大変ってこと。
007065NGNG
C言語自体はずぶの素人だったのですが去年まではFortranを多少かじった程度とはいえ使っていたので
プログラミング自体は全くの素人ではないんです。それに2か月間けっこう勉強したから、それでもこれだけ時間かかってしまうのは
センスないのかなー  って思ってしまいます。
0071デフォルトの名無しさんNGNG
再帰処理の問題ならクイックソートでも出せばいいのに、なんで図形描画なんだか・・・
0072デフォルトの名無しさんNGNG
ワイルドカードってなに?
0073あNGNG
*
0074デフォルトの名無しさんNGNG
>>72
http://members5.cool.ne.jp/~ar/ufo/image/uno/wild.jpg
0075デフォルトの名無しさんNGNG
ワイルドアームってなに?
0076デフォルトの名無しさんNGNG
Javaの質問もOKですか?
0077ぼけNGNG
>>76
Ja版で質問しろ
0078 NGNG
ファイルって,どのくらい分割している?
一つのファイルに関数15個以上って,おかしいかな?
0079デフォルトの名無しさんNGNG
>78
類似機能単位に分けるべし。

関数の数が多い少ないだけで判断するのはイクナイ!
0080デフォルトの名無しさんNGNG
CPUがPen3の750MHzなんですが、こんなへぼマシンでもC言語を使えますか?
0081デフォルトの名無しさんNGNG
>>80
ネタならもっと上手く書け
0082デフォルトの名無しさんNGNG
>>81
つっこむならもっと上手く書け
0083DELLNGNG
extern HDC hDC;
void func(){
//....................
}

ってな感じで分割コンパイルでの外部クラスでデバイスコンテキストを指定すると
エラーになるんですが、対処方法を教えてください。

お願いします神様>>1
0084デフォルトの名無しさんNGNG
>>83
何がどうエラーになるんだよ・・・
ネタならもっと上手く書け
0085DELLNGNG
>84
いいからやってみ
0086デフォルトの名無しさんNGNG
bakaaho.c
bakaaho.c(1) : error C2061: 構文エラー : 識別子 'hDC' がシンタックスエラーを起こしました。
bakaaho.c(1) : error C2059: 構文エラー : ';'
0087 NGNG
構文エラー';'がhDCの前に必要です。
予期せぬEOFが検出
0088デフォルトの名無しさんNGNG
前スレがあがってるので。
0089デフォルトの名無しさんNGNG
>>85
あほか
009089NGNG
だめだ。消えた。そりゃそうか。
includeするように。
0091デフォルトの名無しさんNGNG
プログラムのサイズをできるだけ小さくしたいのですが、何かこれは!ってのありませんか〜
0092DELLNGNG
>89
インクルードしたらまともに動いた。
サンクス!
2chも役に立つもんだw
0093デフォルトの名無しさんNGNG
だからBCCは>>1に入れとけとあれほど…
0094デフォルトの名無しさんNGNG
>>91
バイナリエディタで機械語を手書き。
0095デフォルトの名無しさんNGNG
プログラム本体から付属ファイルを呼べるだけ呼ぶ。
あとは念力。
0096デフォルトの名無しさんNGNG
>>91
余計な機能付けない。
GUIに凝らない。
0097 NGNG
コメントつけない
空白作らない
0098デフォルトの名無しさんNGNG
>>91
ご飯は良く噛んで食べる
0099デフォルトの名無しさんNGNG
>>91
初期化コードなど二度と実行されない領域をワークエリアに
使うテクニックは試されましたか?
0100デフォルトの名無しさんNGNG
>91
それは簡単。機能を最小のサブセットに限定する。
0101デフォルトの名無しさんNGNG
>91
それは簡単。七行プログラミングスレに行く。
0102デフォルトの名無しさんNGNG
>91
PCのスペックをあげて相対的に小さくする。
つーか今時Cごときのコードを肥大化させる方が難しいよ。
0103デフォルトの名無しさんNGNG
毎回少しずつreallocを使って,サイズを増やしていく方法と,
連結方式をとる方法どっちがいいですか?
0104デフォルトの名無しさんNGNG
memcpyって処理が重いですか?
0105デフォルトの名無しさんNGNG
>>103
内容による。毎回ってどのぐらいの頻度?

>>104
なにと比べて重いといっているの?
同じことを実現するのにこれ以上早い方法はCにはない
0106デフォルトの名無しさんNGNG
取引先の会社でメチャメチャ長い変数名を使っている人がいるんですけど、
そういう人はエディターが特殊なんでしょうか?

変数名が FromOracleSequelToOffice とか
そういう変数名使ってるんで、わかりやすいといえばこれ以上無いくらいわかりやすいんですけど
ちょっと手直しするときにも、すごいめんどくさいんです。
こういうのってヒストリー機能付きのエディターとか使っているのでしょうか?
何かVCでも使えるいいアイディアがあったら教えてください。
0107デフォルトの名無しさんNGNG
>>106
ネタ?
Ctrl-Space押してみろ
0108デフォルトの名無しさんNGNG
>>106
VCならCtrl+Spaceで補完が使えるはずだけど。
0109108NGNG
カブ-タ
0110106NGNG
悲しい・・・・ ネタじゃなかったですよぉ。
0111107NGNG
うーむ。106は前スレの野球ゲーム君ほどのインパクトがないなぁ。
神降臨キボンヌ
0112103NGNG
>>105
1〜300くらい
0113デフォルトの名無しさんNGNG
共用体がいまいちよくわかりません。
tp://www.ncad.co.jp/~komata/c-kouza7.htm
を見たんですが,なんで100じゃなくて,300になるのかとか,
どういう状態で共有しているのか等がわかりません。
0114デフォルトの名無しさんNGNG
共用体は各フィールドのメンバの先頭アドレスを揃えるだけのことしか
しません。エンディアンの問題はコンパイラが一切関知しませんので
ユーザの責任において使用する必要があります。
0115105NGNG
>>112
1つづつ増えていくとすると300回realloc呼ぶ可能性があると?
それはリストにして追加していったほうがいい。
0116デフォルトの名無しさんNGNG
素人は(C歴1年半),手を出さない方がイイ?
バグったらいやだしなぁ
0117デフォルトの名無しさんNGNG
アルゴリズムのお勧めの本は?
(初心者向きの)
0118103NGNG
>>115
最大で300回。
しんどそうですが,リスト構造習います。
2時間ぐらいでなんとかなるか。
0119デフォルトの名無しさんNGNG
>> 118
最大値が決まっているならポインタの配列にすれば?
0120デフォルトの名無しさんNGNG
>>118
それらのデータは順次参照のみ?
途中への追加や削除はあるの?
0121デフォルトの名無しさんNGNG
>>119
次サイズ変えるときとかに,汎用性が・・・
まー配列にすればいいことはいいんだけどね
でもこれだと,いつ動的に配列確保を使うの?
0122103NGNG
1つが1Mのビットマップなのですが
0123デフォルトの名無しさんNGNG
char A=0;
A = A+1;

これは、 まず Aがint型にキャストされ、 int型で計算され、そのあと char型にキャストされるの?
それとも 1が(char)にキャストされchar型で計算されるの?

まさか実装依存なんてことは無いと思うが。
0124デフォルトの名無しさんNGNG
>>120
ないです。
配列として,for分とかで参照していきます。
0125デフォルトの名無しさんNGNG
>123
(・Α・)私のキヲクが確かならばぁ〜

計算時は器の大きいほうで計算。
代入時は左辺に合わせる。
0126デフォルトの名無しさんNGNG
>>125
(゚∀゚)サンクスコ
0127デフォルトの名無しさんNGNG
>>113
> なんで100じゃなくて,300になるのかとか,
作者が間違っているような気が...。

この作者、構造体の代入で...
> 多くのCコンパイラは代入は構造体のメンバー1つ1つをコピーします。
なんて書いてるぐらいだから、よほど古い処理系を使っているか、昔の知
識のままでとまっているか、Web の更新をしてないかのどれかだろうね。
0128デフォルトの名無しさんNGNG
void *pData;
pData = (void*)"test data";

if(pData)
printf("%s\" , (char*)pData);

これはなにをやっているのでしょうか?
こんなの文法的に間違ってますよね。
0129119NGNG
>>121
BITMAP *list[300];
int cur = 0;

// 追加
list[cur] = malloc( size );
++cur;
// 削除
free( list[n] );
--cur;
list[n] = list[cur];

順番が変わったら困るなら、リスト調べてくれ
ちょっと工夫すれば変わらないように出来るから。
0130121NGNG
>>129
かなりイイですね
でも300回も別々に確保してたんじゃあ,マズーじゃあ?
0131デフォルトの名無しさんNGNG
>>128
文法的に間違ってるのは "%s\" ← ここだけだな。
0132デフォルトの名無しさんNGNG
>>128
うん、間違ってる。printf() のフォーマット文字列が閉じれてない。
ちなみに、printf("%s\n", (char*)pData); と修正して、実行すると
うちの処理系 (VC++6) では、"test data" と表示されたが、あなたの
処理系でどうなるかはわからない。
0133デフォルトの名無しさんNGNG
>>128
なにをやってるって・・・みたまんまですが?
0134119NGNG
>>130
すまん、言ってることが見えん
> 次サイズ変えるときとかに,汎用性が・・・
毎回サイズ変わるんだよな?
realloc はコピーコストが掛かるのを問題にしているんじゃないのか?
0135デフォルトの名無しさんNGNG
>>134
> 次サイズ変えるときとかに,汎用性が・・・
これは,今は300だけどそのうち500になるかもしれないしという事

>realloc はコピーコストが掛かるのを問題にしているんじゃないのか?
しちょります
0136デフォルトの名無しさんNGNG
情報隠蔽(カプセル化)をしたいのですが,
いまいち感覚がつかめません。
例えば,mapというファイルに,
static char map[100];
void InitMap(void);
void GetMapAdr(char *);
というふうにして,毎回呼び出し側の関数で,GetMapAdrでmapのアドレスを
得ながらやっていくのでしょうか?
こういう考えでいくと,5つの変数を使うときなどは,その関数の最初に
5回もアドレスを得なくてはいけません。
0137119NGNG
>>135
> これは,今は300だけどそのうち500になるかもしれないしという事
そういうことか、
> でも300回も別々に確保してたんじゃあ,マズーじゃあ?
から読めんかったよ、ただあれは
> 最大で300回。
とあったから、サンプルとして書いただけで、、

つか、103=112=121=130=135 で合ってますか?
0138デフォルトの名無しさんNGNG
>>136
まず日本語を以下略
0139103NGNG
>>137
あってます
0140デフォルトの名無しさんNGNG
>>103
そのわりにはいっていることが微妙に変わっている気がするのは...
0141103NGNG
>>140
眠たいのと,動悸が激しいからです
0142デフォルトの名無しさんNGNG
というより>>103は何をしたくて、そういう処理を考えてるのか
説明汁。
0143デフォルトの名無しさんNGNG
大きいのがほしくなったら
大きいのを取得して
コピーして
古くて小さいのを消す
0144デフォルトの名無しさんNGNG
>>143
人はそれをreallocと呼ぶ
0145デフォルトの名無しさんNGNG
>>143
それはちょっと避けたくないか? パフォーマンスが悪すぎる.
0146 NGNG
関数をメンバにいれるには,どのようにすればいいのでしょうか?
0147デフォルトの名無しさんNGNG
>>146
1.クラス内に追加する。
2.関数を追加したいクラスを継承して追加する。

よそから提供されてcppファイルのないクラスなら2しかできない。
自分で作ったクラスなら1でいいと思う
0148デフォルトの名無しさんNGNG
2ちゃんねらーが朝銀問題で国相手に訴訟起こす模様

小泉の訪朝までには訴訟できるように弁護士と相談中とのことです

>実は今週早々、ある関係者の方から管理人の手元に衝撃的な証言が届いてしまいました。
>朝銀への公的資金投入問題で金融庁様がズルやっていた決定的証拠つきです。

こんなのもあり楽しみです

朝銀って何?公的資金って何?
http://chogin.parfait.ne.jp/

朝銀問題はやわかりFLASHムービー
http://www.geocities.co.jp/Playtown-Denei/8746/

                           
要お気に入り登録&コピペ
必要な知識が簡単にチェックできます
超党派議員名簿やマスコミへのメルアド集もあります
0149デフォルトの名無しさんNGNG
>>146
typedef struct{
void (*a);
}c;
0150デフォルトの名無しさんNGNG
いつからC++相談室になったんだ?
0151149NGNG
これで実装できない?
c.a=func;
だめか?
0152デフォルトの名無しさんNGNG
単純に、

struct{

  void (*func)();

}tag_str;

でいいだろ。
0153デフォルトの名無しさんNGNG
typedef structの場合は?
typedef struct{
}c;

だった場合,c.func()ってなるの?
戻り値の型が違ったりしているのも,メンバに含んでもイイのかな?
0154デフォルトの名無しさんNGNG
int calc(int x) {
return x * x;
}

typedef struct {
int (*func)(int x);
} crass;


int main(int argc, char **argv) {
crass t;
t.func = calc;

printf("%d\n", t.func(3));
}

こうかな。
0155デフォルトの名無しさんNGNG
>>154
これって、インスタンス毎に初期化するの?
Cだと構造体のメンバをstaticに出来ないんだね、今知ったよ。
0156153NGNG
>>154
ありがとう
普通は,そういうプログラム組む人いないよね?
0157154NGNG
>>155
Cだとできんだろうな、多分。

>>156
いや、俺も>>152見て書いただけだから、このコードが必要なんかどうかは分からん…(笑)。

0158デフォルトの名無しさんNGNG
VC++ 6.0では10KBくらいのDLLを作ることって、できますか?
小さなコードをDLLにしても、20KB以上の容量になるんで、
バイナリエディタで覗いたらNULLがいっぱい…
このNULL文字の列は何か意味があるんでしょうか?
MFCはスタティックライブラリを使用する設定になっています。
0159デフォルトの名無しさんNGNG
>>158
スレ違い
0160デフォルトの名無しさんNGNG
void showA(struct Monna *a, char* *id, int* position, char* *name)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
こういう
文字列リテラルの参照渡しっこんな感じでいいんすかね?
つーか、やっていいのかな?
0161160NGNG
ズレた(`・ι・´)
はぁ・・・
0162デフォルトの名無しさんNGNG
>>160
つまり、
void showA(char **name)
{
 *name = "sage";
}
こういうことをやっても問題ないだろうか
ってこと?
そうなら、別に問題ない。
0163160NGNG
>162

えっと、

void showA(char **name);
void showA(chae **name){
printf("%s\n",(*name))
}

void Main(){

char *name="microsystems";
showA(name);
}

みたいな感じです。よさそうっすね。
(゚∀゚)サンクスコ !
0164160NGNG
#include<stdio.h>

void showA(char* *name,int* age);

void showA(char* *name,int* age){
printf("name:%s\nage:%d",(*name),(*age));
}

int main(){
int age=43;
char *name="microsystems";
showA(&name,&age);
return 0;
}


ちょっと上違ったけど、できました。
これって値渡しより、関数呼び出し時に、新しい変数領域が確保されないので
効率的なんすよね?
0165デフォルトの名無しさんNGNG
char* *name
とかって、普通に使われてるものなんでしょうか。
素朴な疑問なんですけども。
0166デフォルトの名無しさんNGNG
>>164
何ですか?これは?
0167デフォルトの名無しさんNGNG
163も164も、ポインタにして渡す必要はまったくない。
(ついでに 163 はうっかりミスが2ヶ所あるよ)

> これって値渡しより、関数呼び出し時に、新しい変数領域が確保されないので
> 効率的なんすよね?

渡すのが構造体/共用体ならともかく、整数では
効率が下がることはあっても、上がることは
(通常の処理系では)考えられない。

それどころか、呼び出し側の最適化を邪魔することに
なるので、ほとんどの場合、処理が遅くなってしまうはず。

Cの場合、参照渡しと言うよりも「ポインタの値渡し」なんだから、
引数用の領域(それがスタックであれレジスタであれ)が使われる
ことには変わりない。
0168160NGNG
>167

>164が修正版っす。
やっぱり意味ないのですか〜
処理の負荷は上がって、メモリ効率はよいような気が。

引数の部分で(呼び出し元の変数がコピーされて)無駄に消費
されるのではないかな、と考えたわけですが。

上のようにポインタの値渡しをすれば、
引数用の領域には呼び出し元の変数へのpointerが格納されるのかと。

違うのかなぁ^^;そこら辺はコンパイラの最適化の範疇なんでしょうか。
0169160NGNG
>165

呼び出し先で、呼び出し元の変数の値を変更(同期)したい場合
なんかによく使われるのでは。あ、コーディングスタイルの問題?
0170寝不足でイライラNGNG
>>164のコードは何でダブルポインタ使ってるのか分からん。const char* で十分でそ?
intがポインタになってるのも分からん。何なんだよ?
0171167NGNG
>>168
> 上のようにポインタの値渡しをすれば、
> 引数用の領域には呼び出し元の変数へのpointerが格納されるのかと。

これだけは合ってるよ。

だから、(元の変数の領域とは別の) 引数用の領域に
char** と int* が入るか、
char* と int が入るか
の違いでしかない。
どちらも引数用の領域を必要とすることには変わりない。

その領域のサイズは処理系に依存するが、たとえば
UnixとかWin32なら 前者でも後者でも4*2バイトだね。

> そこら辺はコンパイラの最適化の範疇なんでしょうか。
最適化というより、呼び出し規則が決まってるのが普通。
実際のところ、どんな処理系を使ってるの?
0172160NGNG
>171

Linuxでgcc3.2っす。
0173167NGNG
>>172
だったら使われる引数用の領域のサイズにも違いはないよ。
32ビット整数で表現できるのに、それをわざわざポインタに
して渡してもメリットはない。
0174160NGNG
今頃風呂上りです^^;

ここらへん見ると、
http://www.google.co.jp/search?q=cache:3suLwvNaZI0C:www.alfasystem.net/dojo/room5/LectureC/c09.htm
+%E5%BC%95%E6%95%B0%E3%80%80%E9%A0%98%E5%9F%9F%E3%80%80C%E8%A8%80%E8%AA%9E%E3%80%80%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%AE%E5%80%A4%E6%B8%A1%E3%81%97&hl=ja&ie=UTF-8
メモリアクセスで負荷はあがりそうっすね。

>170
参照ならぬ、ポインタの値渡しをしようと思ってのことです。
でも、素直に値渡しでよさげという結論になってきました。
0175160NGNG
結論として、ポインタの値渡しを使う場面は、

1.配列、構造体などのサイズのでかいものを渡す時
2.呼び出し先で引数として受け取った変数を、呼び出し元と
同期させたい時

ということで宜しいのかな。まぁ、細かいとこでは他にもありそうだけど。
0176 NGNG
>>175 当たり前の事を何を偉そうに結論しておるのかと小一時間
0177160NGNG
>176

ううY(>_<、)Y 175みれば当たり前なんでハマってました。
他にも巧妙な使い方があるのかと、期待もして書いたわけですが。
0178デフォルトの名無しさんNGNG
いつからこのスレはポインタスレになったんだ?
0179デフォルトの名無しさんNGNG
>>152
関数を追加するのと関数ポインタを追加するのは全然違うじゃない。
素直にできないと言いなよ
0180デフォルトの名無しさんNGNG
>>179
言っている事が全然分からんが?

もし、関数の "実体" を構造体内に入れる事が出来たとして、
それが関数のポインタで代用(?)する場合と
実用上どういう風に「全然違う」のか是非説明してくれ。
(もしかして初期化するのが面倒だなんていいたいのか?
本当にそうならば、そんな事する前にその関数を構造体に
入れる "必要性" を教えてくれ)

もしかしてC++のメンバ関数なんかもナイーブに
class 内に "コピー" する事で実現されているなんて
思っちゃってるの? (プ
0181デフォルトの名無しさんNGNG
>>180
はいはい、くだらないことをいってるしったか君、ごくろーさま
0182デフォルトの名無しさんNGNG
>>179 >>181 釣り師ハケーン

ナンセンスな質問に無理に答えるとこうなる
0183デフォルトの名無しさんNGNG
>>180が正論。>>179が無知。

> もしかしてC++のメンバ関数なんかもナイーブに
> class 内に "コピー" する事で実現されているなんて
> 思っちゃってるの? (プ

そんなことになったら sizeofの結果が恐ろしいな。
0184179NGNG
>>180
> もしかしてC++のメンバ関数なんかもナイーブに
> class 内に "コピー" する事で実現されているなんて
> 思っちゃってるの? (プ

そんなこと一言も言っていないが?
もしかして実体をコピーしなければいれることにはならないと思っているのか?
0185184NGNG
構造体には関数は追加できない。だから関数ポインタで擬似的なことをする。
C++のクラスの場合はその実体が関数ポインタだとしても言語の仕様上関数を追加できるだろ?
0186デフォルトの名無しさんNGNG
C言語もメンバをstaticに出来れば、そんなことにはなりませんな。
0187デフォルトの名無しさんNGNG
>>180
関数へのポインタって変数だよ。分かっている?
0188デフォルトの名無しさんNGNG
>>184
>もしかして実体をコピーしなければいれることにはならないと思っているのか?

お前の言う「いれる」の意味を問いたい。問い詰めたい。小1時間問い詰めたい。
お前、ただ "struct{void f(void){}}" って書きたいだけちゃうんかと。
0189179NGNG
>>188
仕様上の話だってば。
0190179NGNG
Cの構造体に関数を追加できるなんて言ったら大恥書くぞ。
0191デフォルトの名無しさんNGNG
ところで、C++のインライン関数ってまさに実体をコピーするんじゃないの?C++はよくしらないんだけど。
スレ違いでスマン。
0192デフォルトの名無しさんNGNG
>>190
「大恥 "書く" ぞ」
「C++のクラスの場合はその実体が関数ポインタだ」

なんて言う方がもっと恥をかくと思うが。。。
0193デフォルトの名無しさんNGNG
int main __P((int, char *[]));

↑
これはいったい何?
0194デフォルトの名無しさんNGNG
>>193
#define _P

なんで括弧が二重なんだ?(^_^;)
0195デフォルトの名無しさんNGNG
言う(話す)時は文字は使いません。と言ってみるテスト。
0196デフォルトの名無しさんNGNG
「言ってみる」という罠
0197デフォルトの名無しさんNGNG
ポインタ変数の値をアドレスというと叩かれるけど、&ooの&はアドレス演算子っていいますよね?
なんでですか?
0198デフォルトの名無しさんNGNG
>>185
あんたの言ってることも間違っちゃいないさ。
でもな、そういうのを世間一般では
「単なる揚げ足取り」とか「無知」と呼ぶのさ。

Q) Cで文字列を表示するにはどうすればいいですか?

普通のA)
一例としては、stdio.hをincludeして printf を使え。

185のA)
C言語の仕様上の話では、文字列という概念はない。
よって不可能だ。
Cで文字列を扱えるなんて言ったら大恥かくぞ。
0199197NGNG
ごめんなさい。
そう決まっているんだからしかたないですよね。
0200デフォルトの名無しさんNGNG
>>198
揚げ足取りならどっちもどっち。
0201デフォルトの名無しさんNGNG
Cならなんでもできる。
0202デフォルトの名無しさんNGNG
世界お金持ちクラブの歌 歌:ヘドロ
 おカネ おカネ おカネ おカネ おカネ おカネ おカネ おカネ
 お金さえあれば 何でも手に入る
 ドレス イヤリング 真珠の首飾り
 マンション 別荘 建て売りマイホーム
 車飛行機自家用潜水艦キャビアフォアグラ松茸に数の子
 お金さえあれば 幸せになれる 我ら世界お金持ちクラブ
0203デフォルトの名無しさんNGNG
>>200
どっちもどっちって、他方は誰のことを指してるの?
185が揚げ足取ってるだけに見えるが。

>>191
全然違うよ。

>>193
古いコンパイラでもコンパイルできるように
プロトタイプ宣言を使い分ける時の方法だね。

前もって
#define __P(x) x
と宣言すれば、
int main (int, char *[]);
と展開され、

#define __P(x)
と宣言すれば、
int main ();
と展開される。
0204デフォルトの名無しさんNGNG
指定したディレクトリ内にあるファイル名を参照したいです。
どうすればいいですか?WinMeです。
0205193NGNG
>>203
すごく分かり易い解説、ありがとうございまふ。
0206デフォルトの名無しさんNGNG
>>203
たった一行を書き換えるためにわざわざマクロを使うの?
コンパイルオプションでマクロを定義して使うの?
0207206NGNG
よく考えてみたらたった一行とかそういう問題じゃないか・・・
俺なら#if使うかな。
0208デフォルトの名無しさんNGNG
>>202
師匠!

たった1分足らずの時間で
その様な素晴らしいレスを見つけ出す秘術を
是非とも僕に伝授してください。
0209194ですNGNG
>>203
なるほどねー
だから括弧が二重なんだ。
二重にしないとint main int,char *[];になっちゃうな。
0210デフォルトの名無しさんNGNG
double data;
int dummy = 10;
dummy /= 50;
data = (double)dummy

printf("%f\n",data);

としても0が表示されます。なんで?
コンパイラのバグですか?
0211デフォルトの名無しさんNGNG
>>210 ネタだと言って欲しい
0212203NGNG
>>206
たくさんの関数宣言がある時でないと意味がないね。

それらの宣言をすべて
int func __P((...));
のような形式で記述しておいて、
コンパイルする環境によってマクロだけを切り換える。

普通は、公開ソースで色々なプラットフォームに
対応したい時に使うものだと思う。

zlibなんかもこの方法を使ってるから、見てみるといいかもね。
ttp://www.gzip.org/zlib/
0213デフォルトの名無しさんNGNG
>>208 んー だって憶えてたんだもん
0214デフォルトの名無しさんNGNG
>>209
それ以前に、マクロ __P() の引数の数がおかしいと怒られるから、面倒だけど
二重括弧は必要。
0215デフォルトの名無しさんNGNG
>>210
0と表示されたらライブラリのバグ(藁
0.000000と表示されないと(藁
0216デフォルトの名無しさんNGNG
alloc系でメモリを取得取得取得開放取得開放開放取得開放取得ってやってたら
ヒープがこまぎれずたずたになっちゃう気がするけど
OSはガーベッジコレクションとかちゃんとやってくれてるのかな?
とりあえずWinとかLinuxとかでの例を教えてほしいかも。
0217デフォルトの名無しさんNGNG
int a=0x10;
if ( a&0x10 == 0x10 ) printf("a==0x10\n");

としてもa==0x10が表示されてません。なんで?
コンパイラのバグですか?
0218デフォルトの名無しさんNGNG
昔、幼稚園児だったころ友達に「わかってることを聞く奴は馬鹿だ」
と言われたんですけど、僕は馬鹿だったんですかね
0219デフォルトの名無しさんNGNG
>>217
& より == の方が優先度高いから
if ( a & (0x10 == 0x10 ) )
と同義。キミのバグ。
0220デフォルトの名無しさんNGNG
>>218
キミは馬鹿じゃない。
0221デフォルトの名無しさんNGNG
>>218
馬鹿じゃなくてむかつくだけ。
人を試すってことだろ?
0222デフォルトの名無しさんNGNG
・・・・・できません。なんで?
コンパイラのバグですか?

が今のはやりですか?
昨日の9<a<10とかさ。
0223デフォルトの名無しさんNGNG
教えてください.

int Q = 41;
Q -= 4 * 9 - 4 - 1;

なぜ結果が Q = 10 になるのでしょうか ?
私は今まで Q = Q - 4 * 9 - 4 - 1; と同じだと思っていたのですが ...
0224デフォルトの名無しさんNGNG
>>223
Q=Q-(4*9-4-1);だろ?
0225デフォルトの名無しさんNGNG
>> 222
ネタでしょ

>> 223
Q = Q - (4*9-4-1);

0226たけ☆地球の王子♪NGNG
>>223
小学校からやり直せや
それとも小学生か?(稿
0227デフォルトの名無しさんNGNG
dummy /= 50;
ここで整数除算して桁落ち(0.0〜とかではなく、0としか入らない)、
小数点以下が切り捨てられてデータが残らない。
つまりdummyに0が入ってその後に、別のところでキャストしても0は0(復元不可能)。
0228デフォルトの名無しさんNGNG
>>226
小学校じゃ習わないぞ(ワラ
0229たけ☆地球の王子♪NGNG
>>228
*から先に計算するって事は小学校で習いますです。はい。
0230デフォルトの名無しさんNGNG
>>229
問題はそこじゃない。
a-=bはbを先に計算してからaから引く。
0231デフォルトの名無しさんNGNG
>>224, >>225, >>226
ありがとうございました.
まるで気がつきませんでした.
0232223NGNG
すみません, 途中で間違って投稿してしまいました.

なぜ Q = 10 になるのでしょうか ? なんで ?
コンパイラのバグですか ?
0233デフォルトの名無しさんNGNG
(4*9-4-1)=31
0234デフォルトの名無しさんNGNG
もうちょっとマトモなネタキボーン
0235デフォルトの名無しさんNGNG
int i;
for(i=0;i<10;i++) ;

無限ループになります。なんで?
コンパイラのバグですか?
0236デフォルトの名無しさんNGNG
>> 235
それはコンパイラのバグ

そういやIntelのコンパイラで
short i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%d%d\n, i,j );
}
}
とやると、外側のループが1回しか実行されないバグがあったな
0237デフォルトの名無しさんNGNG
>>235
無限ループならコンパイラのバグです。
もうちょっとマトモなネタキボーン
0238デフォルトの名無しさんNGNG
>>236
Intelだめじゃん!
0239デフォルトの名無しさんNGNG
ハード屋がつくるソフトってだめね。
Sunのあれとか。
0240デフォルトの名無しさんNGNG
>>236
short で、インクリメントできないってこと?
0241236NGNG
>> 240
いや、2重ループが実行されない。
int なら平気。
0242デフォルトの名無しさんNGNG
short使う人の性格にバグが。
0243デフォルトの名無しさんNGNG
>>239
ソフト屋の作るソフトも人のことは言えないと思うが...
0244デフォルトの名無しさんNGNG
>>204
意味がよくわからんが、
とりあえずFindFirstFileでも使っとけ。

>>216
まずはCランタイムのヒープ管理ルーチンとよく相談しろ。
OS側の話はそれからだ。
0245236NGNG
>> 242
俺は使ってねーよ。
コーデック系のプログラムだと、作ってんの学者だから
訳わかんねー事やってんのよ。
変数や関数名も数式のまんまだし。
0246デフォルトの名無しさんNGNG
unsigned intをunsignedと略すのはやめた方がいいですか?
0247246NGNG
というのもlong intは略してもunsigned intは略さない人が多いみたいですから。
面倒な人はtypedefでもするんでしょうが。
0248デフォルトの名無しさんNGNG
>>246
かまわん。
俺個人的にはuintでtypedefする方が好みだが。
0249デフォルトの名無しさんNGNG
>>246
intぐらい書いたほうがいいと思う。
0250248NGNG
>>249
その理由を教えてくれ。
0251246NGNG
>>248-249
うー、、、どっちにすべきなんだろう・・・・
typedefがベストですか?uintなら誰でも分かりそうですし。
0252248NGNG
>>251
いや、俺はunsignedでもかまわんと思う。個人的な好みを言っただけ。
0253246NGNG
じゃあ今まで通りunsignedでいきます。
0254246NGNG
礼を忘れました・・・
ありがとうございました。
0255デフォルトの名無しさんNGNG
>>236
以前無限ループになってしまって原因がわからなかったのですが、これもコンパイラのバグだったんですね。
もっとちゃんとしたコンパイラ買わないとだめかな。

unsigned char counter;

for(counter = 0; counter < 300 ; counter++) {
処理
}

0256デフォルトの名無しさんNGNG
>>255
コンパイラ何つかってんの
0257デフォルトの名無しさんNGNG
もうネタはいいよ
せめて、ちょっとマシなやつにしてくれ

void f( unsigned int i )
{
if ( i < -1 ) printf( "i<-1\n" );
}
int main()
{
f( 1 );
}
とか
0258デフォルトの名無しさんNGNG
「unsigned char が300まではないだろ」
って言ったら、
「俺のコンパイラはcharが9ビットなんだよ」
って返される見え見えのオチだな。

もうちょっとマトモなネタキボーン
0259デフォルトの名無しさんNGNG
×if ( i < -1 ) printf( "i<-1\n" );
○if ( i < -1 ) printf( "%d<-1\n", i );
0260デフォルトの名無しさんNGNG
>>257
どのへんがましかがわからん。
0261エディタ製作中@クソ初心者NGNG
すみません、質問いいですか?
懲りずにエディタ作ってる者です(汗

えっと、お聞きしたいんですけど、
文字列配列を、完全に初期化する方法ってありますか?
たとえば、配列すべてに\0で初期化したい場合はどうすればいいでしょう?
for文で配列一つ一つに\0を代入とか考えたんですが、
配列が1000とか2000になると、すごい処理効率が悪くなりますよね・・・。

何か、良い方法はないでしょうか・・・?
よろしくお願いします。
0262デフォルトの名無しさんNGNG
>>261
bzeroがあればその方が速いと聞いたことあるけど、素直にループかmemset使おうよ。
0263エディタ製作中@クソ初心者NGNG
>>262
う〜ん、やっぱり普通にループ処理などでしかできないんでしょうかね・・・。
bzero・・? 関数ですか・・・?

うん、それでは素直にループで処理することにします。
ありがとうございました。
0264デフォルトの名無しさんNGNG
memsetって書いてるじゃん。
コンパイラによってはループを勝手に
memsetに置き換えてくれるかも知れんが。
0265デフォルトの名無しさんNGNG
>>261
文字列配列って書いてるけど、「文字列用の文字配列」の間違いじゃないか?
それはともかく、そんな'\0'埋め処理なんか、どういう状況で
必要になるのか全く想像できない。
0266エディタ製作中@クソ初心者NGNG
>>264
あ、すみません!
memset関数っていう便利なのがあったんですね(汗
memset関数を使って初期化することにします。
ありがとうございました。
0267デフォルトの名無しさんNGNG
>>265
俺も。
単に長さ0に初期化しておきたいだけなら、文字配列の先頭の要素に'\0'を入れておけばいいだけだしね。
0268エディタ製作中@クソ初心者NGNG
>>265
えっと、今作ってるエディタの仕様だと、
たとえば、改行すると、先頭文字に\0が入ります。
で、右にスクロールする時に先頭文字が切れて
\0がなくなりゴミが表示されてしまうのです・・・。
で、\0で埋めれば簡単に問題解決できるかな?と思いました。
0269デフォルトの名無しさんNGNG
とりあえず、FAQではこうなってるぞ↓

http://www.catnet.ne.jp/kouno/c_faq/c13.html#24
13.24:
古いプログラムを移植しようとしている。なぜ「未定義の外部シンボ ル」というエラーが出るのか。

A:

これから(左側に)挙げるルーチンはそれぞれ時代遅れである。代わり に右側のルーチンを使え。

index? strchrを使え。
rindex? strrchrを使え。
bcopy? 一番目の引数と二番目の引数を入れ替えてmemmoveを使え(質問11.25も参照のこと)。
bcmp? memcmpを使え。
bzero? 二番目の引数を0にしてmemsetを使え。
逆に、右側の列の関数が載っていない古いシステムを使っているのな ら、左側の関数を右側の関数を使って実装、あるいは代用することが できるかもしれない。
0270デフォルトの名無しさんNGNG
>>268
ごみは放って置いて、ごみの前に\0を入れるだけでいいんじゃないの?
文字配列としてではなく文字列として扱うだけなんでしょ?
0271デフォルトの名無しさんNGNG
>>268
なんじゃそりゃ。
つまり、いちいちstrlenして、表示開始桁と比較するのが面倒だっていうことか?
もしそうなら、一行の長さを管理したほうがいいに決まってる。
0272デフォルトの名無しさんNGNG
どうせ、5文字しかない行(char *)lineの6桁目から表示させようってときに、
(line + 6)からヌル終端まで表示、とかやってんじゃないのか?
0273デフォルトの名無しさんNGNG
スマソ、6桁目じゃなくて7桁目だな
0274エディタ製作中@クソ初心者NGNG
>>269
ありがとうございます。
bzero関数ってのは、古い関数だったんですね。
その代わりとなるのが、memset関数だったってことですか。

>>270>>271
あッ!そっか!
今までが、文字列の最後か調べるためには、
for文のループなどで調べないといけないから処理効率が悪いと思ってましたが・・・
言われてみれば、そうですね・・・
strlenで、どこが文字列の最後かわかりますね・・・(汗
プログラム中にも、所々でstrlen関数使ってるのに、何故気づかなかったんだろ・・・(滝汗
すみませんでした。 ありがとうございました。
0275デフォルトの名無しさんNGNG
ごみが表示されるって、きっと\0がないんだよね?
それってprintf("%s\n",str);とかやったら場合によってはまずいことになるんじゃないか?(汗
0276エディタ製作中@クソ初心者NGNG
>>272
そうです。そんな感じです。
う〜ん、ちょっとボケてました(汗
すみませんでした。
0277203NGNG
ごめん、今さらだけど、俺間違ってるじゃん。
#define __P(x) x
ともう1つは
× #define __P(x)
○ #define __P(x) ()
だね。
0278エディタ製作中@クソ初心者NGNG
>>275
はい。その辺の対策は・・・
いちよう、配列の一番最後に\0を入れてるので、
配列超えて何か表示されるってことは一応ないです。
0279デフォルトの名無しさんNGNG
>>エディタ製作中@クソ初心者
仕様書をアップしてくれ
0280223NGNG
>>279
ワラタ
0281デフォルトの名無しさんNGNG
>>279
そういえば、一部はフローチャートになってた。
まじめまじめ。おりこうおりこう。
(でも、書かないと検証できないというのは実際いかがなものか)
0282エディタ製作中@クソ初心者NGNG
>>279
し・・・仕様書ッスか?
えっと、そんな大した物は作ってないです(汗
仕様は、いつもいつも、良い案があればコロコロ変わります・・・。
あまり良い作り方ではないとは思いますが、一応勉強のつもりで作り出したので、
仕様など考えず、こんな感じで作ればどうだろ?って感じでプログラムを打ち始めました。
仕様書はありませんが、ソースならあります(w

http://www.geocities.co.jp/SiliconValley-SanJose/9640/

ここに今現在の最新のソースを上げました。
再描写の新仕様のバグや、カーソル制御新仕様のバグなどを修正したばかりです。
読みにくいソースですが、こんなのでしたらどーぞ。

>>281
ええ、新仕様に変えようとしてフローチャート組んで考えたのですが・・・
かなり複雑な処理になってしまいました・・・。
もう少し修正できますので、修正してみます。
0283デフォルトの名無しさんNGNG
>>282
SVGならzipで固めないでよ(ToT)
0284283NGNG
しかもきちんとhtmlファイルまで入っているじゃない・・・・
なぜそれにリンクを貼らないんだろう。
0285エディタ製作中@クソ初心者NGNG
>>283
すみませ〜ん(汗
それが、ジオサーバは、怪しげな拡張子ファイルを上げさせてもらえないんです(涙
最初、そのまま上げようとしたのですが・・・
拡張子SVGは、サーバに上がりませんでした・・・
やむなく、ZIP圧縮で上げる形になりました・・・。

それと、かなりスレ違い&私的な質問なんですが・・・
プログラムの開発は、Win2kで行ってます。
Win2k以外のOSでエディタ動かせます・・・?
0286デフォルトの名無しさんNGNG
>>285
ああそういうことか。なるほど。
ジオ逝ってよし!
0287デフォルトの名無しさんNGNG
Win95だが、動いたぞ。(マジ)
0288デフォルトの名無しさんNGNG
WinMeで動いたよ。
0289デフォルトの名無しさんNGNG
みんなが一致団結している
0290エディタ製作中@クソ初心者NGNG
>>287
>>288
あ、動きました?
よかった・・・。
NT系OS以外は動かなかったりしたら、ちょっと悲しかったです。(w
教えてくれてありがとうございました。
がんばって、標準でついてるエディタを超えるようなエディタを作ります。
0291デフォルトの名無しさんNGNG
>>290
変数の外部参照(extern int xとか)はヘッダーファイルに書いた方がよくないか?
0292291NGNG
あ、もしかして変数宣言と外部参照宣言が同一ファイル内にあるとまずいと思っている?
それは大丈夫だよ。
0293エディタ製作中@クソ初心者NGNG
>>292
あれ?
グローバル変数って、全部のファイルで宣言しててもいいんですか?
多重宣言とかって、エラーが出そうとか思ってました・・・(汗
もし、ヘッダーファイルに収めるなら、
別ヘッダーファイルに作ってそれに入れないとって思ってました・・・
・・・これも、基本的な事ですね・・・
もう少し入門書を読んで復習しなおす必要がありますね・・・(汗
0294デフォルトの名無しさんNGNG
>>293
変数宣言はだめ。
外部参照宣言(extern int xみたいなやつ)はOK というかしないとそのファイル内で参照できない。
0295294NGNG
ところで、外部参照宣言と言う言葉は正しいのかしら?(^_^;)
今まで当たり前のように使ってきたけど。
0296エディタ製作中@クソ初心者NGNG
>>295
あ、それじゃ・・・
extern修飾子が付いてるのと、
普通のグローバル変数宣言との2つのヘッダーファイルを作って、
それで適切にインクルードするってことですね。

わかりました。 グローバル変数の所を整理してみます。
0297294NGNG
訂正。
異なる値で初期化した同名のstaticでないグローバル変数の宣言は不可能。
初期化しなければOKだ。
0298デフォルトの名無しさんNGNG
>>296
違うって。
externなんとかってのをヘッダーファイル(あなたの場合はhead.h)に書いて、変数の宣言はどれかひとつのソースファイルに書くの。
0299デフォルトの名無しさんNGNG
>>295
extern宣言、外部宣言、外部変数宣言+外部関数プロトタイプ宣言
とかかな?

「変数宣言」というのはたぶんよくなくて、
「(グローバル)変数定義」だと思う。
0300デフォルトの名無しさんNGNG
>>299
変数定義ですか。
ありがとうございます。これからはその言葉を使わせていただきます。
0301デフォルトの名無しさんNGNG
ヘッダファイルをこんな風にしておいて、

#ifdef DEFINE_GLOBAL
int global;
#else
extern int global;
#endif

ソースファイル一つだけ

#define DEFINE_GLOBAL
#include "head.h"

なんてすればよいのでは?
0302デフォルトの名無しさんNGNG
>>301 ソース分割を放棄して、一体。。。
0303デフォルトの名無しさんNGNG
動作報告。
Linuxでgccだと、conio.hがないからコンパイルできんかった。
WinXP+VC6.0(SP済)では動いたよ。
0304エディタ製作中@クソ初心者NGNG
>>298
なるほど。
すみません、今度こそ理解しました(汗
アドバイスありがとうございます。

>>301
えっと、またプリプロセッサ処理は、
includeと、defineの2つ以外はちゃんと覚えてないんです(汗
一度どこかで定義されてたら、
それ以降定義しないようにしたりできるってことは知ってますが・・・
その辺も、もう少し本見て勉強しておきます。
0305デフォルトの名無しさんNGNG
------------------------------------------------
extern char message[];
extern char message[];
extern char message[];
extern char message[];
extern char message[];
extern char message[];
char message[] = "Hello, extern declarations!";
main() { puts (message); }
------------------------------------------------
C:\WINDOWS\デスクトップ\c-test>gcc a.c

C:\WINDOWS\デスクトップ\c-test>a
Hello, extern declarations!

C:\WINDOWS\デスクトップ\c-test>
------------------------------------------------
0306エディタ製作中@クソ初心者NGNG
>>303
ありがとうございます!
Linuxで動くか?っていうのは俺も少し考えてました・・・。
う〜ん、やっぱりコンパイルできないッスか・・・。
Linuxでなら、コンソールアプリも活躍できそう・・・。
0307エディタ製作中@クソ初心者NGNG
>>305
extern修飾子が付いてる変数宣言は、
全部のファイルで宣言してても大丈夫ってことッスね。
グローバル変数宣言は、本体のedit.cで宣言して、
後はヘッダーからインクルードする事にします。
0308デフォルトの名無しさんNGNG
「変数宣言」も間違いではないけど、外部変数の宣言と区別する時は、
「変数定義」と呼んだ方がいい。と、個人的には思うぞ。

↓お約束のC-FAQ。これも共通のヘッダファイルにexternを置けと言ってる
http://www.catnet.ne.jp/kouno/c_faq/c1.html
1.7:
外部変数を宣言、定義する一番よい方法は。
0309エディタ製作中@クソ初心者NGNG
>>308
ありがとうございます。
う〜ん、ANSI C規格以前のコンパイラでもOKとありました。
一般的な事だったんですね(汗
改めて再度入門書から読み直した方が良いと思いました・・・(滝汗
教えてくれてありがとうございました。
0310OPENFILENAME ofnNGNG
char s[];
s=ofn.lpstrFile;

'char *' から 'char []' に変換することはできません。(新しい動作 ; ヘルプを参照)

と怒られるんですが,いろいろキャストしてもダメ.
sへ代入するにはどうしたら?
0311デフォルトの名無しさんNGNG
>>310
strcpy().......
0312デフォルトの名無しさんNGNG
>>310
char s[];
のsのさしている先を書き換えてはいけない。
値をコピーしたいなら配列のsのサイズをきちんととっておいて
strcpyでもしとけ。
0313OPENFILENAME ofnNGNG
ありがと
0314デフォルトの名無しさんNGNG
数字の全角表示ってありましたっけ??
 例.
   1→1
 ASCIIコードにのってなかったんですけど・・・。
0315312NGNG
>>310
自分で読んでてもわかりずらいから一応補足。
char s[100];
とかの配列で確保しているメモリの位置は固定されている。
s = ofn.lpstrFile;
見たいにsのさしているアドレスの先を書き換えるような真似はできない。
コピーしたいのがlpstrFileの文字列ならstrcpyを使えばいいし、
ポインタをコピーしたいなら、
char *s;
でポインタで宣言して代入しなきゃいけない。
0316デフォルトの名無しさんNGNG
そりゃASCIIコードには全角文字なんて載ってないだろうな。
0317デフォルトの名無しさんNGNG
>>310
そもそもchar s[];なんてかけるの?関数の仮引数ならchar *sと同じ意味でかけるけど。
0318デフォルトの名無しさんNGNG
>316
  どうすればいいのですか??
0319デフォルトの名無しさんNGNG
>>316
そうなんですか?
じゃああれはジャパンオリジナル?
0320デフォルトの名無しさんNGNG
>>318
なにをどうしたい?
0321デフォルトの名無しさんNGNG
>>319
つか、そもそもgccですらコンパイルできないんだけど…。
0322デフォルトの名無しさんNGNG
>>317
俺も疑問に思ったんでコンパイルしてみた。↓って言われた。

error C2133: 'test' : サイズが不明です。

全然ダメじゃねーかよゴルァ!!
0323318NGNG
 >320
  ただ数字の全角表示をしたいのれす。
0324デフォルトの名無しさんNGNG
>>322
だよねぇ。
もし関数の仮引数なら*sと同じ意味だから代入できるはずだし(もちろん文字列のコピーにはならないけど)。
0325デフォルトの名無しさんNGNG
>>323
printf("1");

これじゃだめ?
0326デフォルトの名無しさんNGNG
>>323
char *double_byte_number = "0123456789";
0327318NGNG
 >325
    scanfで数値を入力して
   printfで全角数字出力で
   お願いします。
    
   
0328デフォルトの名無しさんNGNG
>>327
switch(i){
case 1:
printf("1");
case 2:
printf("2");
}


からあげうまうまって人がもっとうまいコードを書いていたな・・・
たしかstrchrを使う方法で・・・
0329328NGNG
breakわすれた(^_^;)
0330318NGNG
>328
 え〜!こんな面倒くさいんですか!?
 でもありがとう。。
0331デフォルトの名無しさんNGNG
326じゃ、面倒だな。
char *dbn[] = {"0","1","2","3","4","5","6","7","8","9"};
使い方は自分で考えよう。
0332デフォルトの名無しさんNGNG
>>318
ただ半角数字→全角数字にしたいだけならそういう関数作れば?
0333328NGNG
数値になっているから文字コードがどうとかなんて気にする必要はないか。
printf("%s",dbn[i]);ってとこか。
0334 NGNG
>>323
void print(int n){
 if (n < 0)
  printf("−"), n = -n;
 if ((unsigned) n >= 10U)
  print((unsigned) n / 10U);
 printf("%.2s", "0123456789" + ((unsigned) n % 10U * 2U));
}
0335318NGNG
 要するにswich文使うわけですね。
  scnaf("%d",&su);
su += ??;
 みたいのでできると思ってましたぁ。
0336デフォルトの名無しさんNGNG
void zenkakusuji(int n){
char buf[30];
char *dbn[] = {"0","1","2","3","4","5","6","7","8","9"};
int i=0;

sprintf(buf,"%d",n);
if(buf[i]=='-'){
printf("−"); i++;
}
for(;buf[i];i++)
printf("%s",dbn[buf[i]]);
}

0337318NGNG
>334
 そんな関数が作れるほどスキルないんで・・・。
 つーかそれの意味わかんないし。
 
0338336NGNG
×printf("%s",dbn[buf[i]]);
○printf("%s",dbn[atoi(buf[i])]);
0339338NGNG
違う違う(汗
もういいや・・・
0340 NGNG
>>338
atoiでもダメだろ。buf[i] - '0' じゃないか?
0341339NGNG
ASCIIコードならbuf[i]-'0'でいけるかも・・・どうでもいいけど
0342デフォルトの名無しさんNGNG
>>337
関数記述できる程度をスキルとは言わんぞ。
君はもう少し色々と勉強してきなさい。
0343341NGNG
>>340
えぇ、そうです・・・
恥ずかしい・・・
0344デフォルトの名無しさんNGNG
>>340
ASCIIとかの文字コード限定なら○
もっと具体的には文字モードじか書き。
0345エディタ製作中@クソ初心者NGNG
すみません、また質問いいでしょうか・・・?(汗
今、一文字削除の機能を付けてるのですが・・・
不思議な警告で悩まされてます・・・。
内容は、「符号付き値と符号なし値の比較」という警告なんですが・・・
どこをunsignedでキャストしてやれば良いのか分らないんです・・・(涙

エラーが出る行は、98行目で、内容は・・・

98: for (i=1; (txt[sy+i] != '\0'); i++)
99:  strcpy(txt[sy+i], txt[sy+i+1]);

こんな感じです。
型は、iがunsigned intで定義。最初int型で定義してたのですが変更しました。
で、txt配列が2次元配列の、型がunsigned char型です。
・・・さっぱり意味不明です・・・(涙

よろしくお願いします。
0346デフォルトの名無しさんNGNG
'\0'はchar型でborland c++は標準でcharがsigned char
0347エディタ製作中@クソ初心者NGNG
>>346
ええッ!?
そうなんですか!?
今まで、こんな警告出なかったのに・・・・
・・・でも一応、(unsigned)'\0' こんなやり方ですけどキャストしてみました。
それでも、警告でます・・・
キャストの仕方が悪いですか・・・?
0348デフォルトの名無しさんNGNG
>>エディタ製作中@クソ初心者
いきなりエディタ作成って無茶やなぁ。けど必ず身に付くものがあるから、最後まで頑張りなよ。
# で、実力付いたら反省を兼ねて作り直せば2度勉強できる、と。
0349デフォルトの名無しさんNGNG
>>347
がんばれ。失敗から学ぶことは多い。

signed / unsigned char 関係は、コンパイラオプションでごにょごにょできんかな?
0350エディタ製作中@クソ初心者NGNG
>>348
そうなんです・・・
初心者がいきなりエディタ作るのって、結構無茶ありますね(汗
S-JISという文字コード規格に、どれだけ泣かされたか・・・(涙
再描写処理作るのに、どれだけイライラしたか・・・
考えると、泣けてきます・・・
でも、今作ってる一文字削除機能が付くと、
最初に思い描いていた機能すべてが付きます!
一応完成となります!
・・・がんばりました。
ここから、さらに機能を追加して行こうと思ってます。
0351デフォルトの名無しさんNGNG
>>347
unsignedはunsigned int
0352エディタ製作中@クソ初心者NGNG
>>349
あ・・・コンパイラの設定で回避しないとダメなんですか・・・?
でも、おかしいですよね・・・
こんな比較、他でもしてるのに、それらは警告が出ない・・・
・・・なんだか、納得行かないです・・・(汗
0353エディタ製作中@クソ初心者NGNG
>>351
ありがとうございます!
警告がなくなりました!

そうですね・・・unsignedだけだとint型になりますね・・・
これも、俺の不注意でした・・・
ありがとうございました。
0354 NGNG
>>353
どう見ても、型が違うのだが。strcpyに渡してるってことは、
txt[sy+i]はchar*だろ?
0355 NGNG
>>345
つーか、そもそもロジックが変だろ。
一文字削除なら、strcpy(&txt[sy][sx], &txt[sy][sx + 1]);
だけでできると思うのだが。
035660cm浮き上がるストレートNGNG
>>327
ShowZenkakuSuuzi(scanf("%d",suuti),space);

void ShowZenkakuSuuzi(int suuti,int space)
{
  int waru=10000;
  int showAtta=0;
  int absuuti=0;
  absuuti=abs(suuti);
  for(waru=10000;waru>0;waru/=10)
   &ndsp;if(absuuti/waru==0 && showAtta==0)
   &ndsp;  if(space>=waru) printf(" ");
   &ndsp;  else printf("");
   &ndsp;else
   &ndsp;{
   &ndsp;  if(showAtta==0) if(suuti<=-1) printf("−");
   &ndsp;    printf("%c%c",(absuuti%(waru*10)/waru+0x824f)>>8,absuuti%(waru*10)/waru+0x824f);
   &ndsp;   &ndsp;showAtta=1;
   &ndsp;}
}
035760cm浮き上がるストレートNGNG
ndsp>>nbsp

ShowZenkakuSuuzi(scanf("%d",suuti),space);

void ShowZenkakuSuuzi(int suuti,int space)
{
  int waru=10000;
  int showAtta=0;
  int absuuti=0;
  absuuti=abs(suuti);
  for(waru=10000;waru>0;waru/=10)
    if(absuuti/waru==0 && showAtta==0)
      if(space>=waru) printf(" ");
      else printf("");
    else
    {
      if(showAtta==0) if(suuti<=-1) printf("−");
        printf("%c%c",(absuuti%(waru*10)/waru+0x824f)>>8,absuuti%(waru*10)/waru+0x824f);
        showAtta=1;
    }
}
0358デフォルトの名無しさんNGNG
>>357
ndspって…w
0359デフォルトの名無しさんNGNG
┐(´ー`)┌
0360エディタ製作中@クソ初心者NGNG
>>354
すみませんでした・・・
後々、その辺がバグとなって、それに気づきました・・・(汗
ご迷惑おかけしました。

>>355
あ・・・それでできますね・・・。
・・・う〜ん、もっとがんばって経験積みます(汗
なにぶん、クソ初心者ですんで・・・・(涙

一応、一文字削除機能も付いて当初の目的を果たしました。
またサーバにバイナリ&ソースを上げてますので・・・
もし、よかったら覗いてやってください。
また、何かお気づきの点やバグなどありましたら、
教えていただけるとありがたいッス・・・。

ここまで作れたのも、みなさんのおかげッス!
本当に感謝してます。沢山勉強になりました!
ありがとうございました!
0361 NGNG
>>357
> ShowZenkakuSuuzi(scanf("%d",suuti),space);
この呼び方だと-1,0,1のどれかしか表示されないわけだが。
0362デフォルトの名無しさんNGNG
ネタにマジレス
カコワルイ
0363デフォルトの名無しさんNGNG
>60cm
だからお前のコードはゴミ水準だとあれほど。。。。
0364デフォルトの名無しさんNGNG
int main ()
{
  char ch;
  char ch2[3];

  scanf("%c", &ch);

  ch += 0x1f;

  ch2[0] = 0x82;
  ch2[1] = ch;
  ch2[2] = '\0';

  printf("%s", ch2);

  return 0;
}

・・・・・。
0365364NGNG
>>364
間違えた・・・

×ch += 0x1f;
○ch = 0x1f;
036660cm浮き上がるストレートNGNG
>>357の訂正など
suutiは-32768~32767、spaceは0,10,100,1000,10000。
spaceはスペース。suutiが整数3桁でspaceが1000なら一桁分スペースが入る。

scanf("%d",&suuti);
ShowZenkakuSuuzi(suuti,space);

void ShowZenkakuSuuzi(int suuti,int space)
{
  int waru=10000;
  int showAtta=0;
  int absuuti=0;
  absuuti=abs(suuti);
  for(waru=10000;waru>0;waru/=10)
    if(absuuti/waru==0 && showAtta==0)
      if(space>=waru) printf(" ");
      else printf("");
    else
    {
      if(showAtta==0) if(suuti<=-1) printf("−");
        printf("%c%c",(absuuti%(waru*10)/waru+0x824f)>>8,absuuti%(waru*10)/waru+0x824f);
        showAtta=1;
    }
}
0367デフォルトの名無しさんNGNG
ゴミを増やすな!
0368デフォルトの名無しさんNGNG
>>355
重なり合う領域のstrcpyの結果は
保証されてなかったような気がするのだが。

間違ってたらごめんよ。
036960cm浮き上がるストレートNGNG
>>366の訂正

spaceは0,10,100,1000,10000。
↓
spaceは1,10,100,1000,10000。

if(absuuti/waru==0 && showAtta==0)
にさらに
 && waru!=1
を追加。0オンリーを表示するためです。
0370364-365NGNG
・・・ch=0x1fって要らないです。
もう間違えまくりだ・・・鬱
0371デフォルトの名無しさんNGNG
ZeroMemoryされた構造体が
本当に空(0で埋め尽くされている)かどうか
調べるにはどうしたらいいのでしょう・・・?
0372 ◆k/Ubp.Kg NGNG
みんなテンパってるな…おつけち。
0373デフォルトの名無しさんNGNG
>>371
なんでそんなことする必要があるの?
ZeroMemoryはmemsetのマクロとして定義されている
のが普通だと思うが、このライブラリ関数が
信用できないとでも?
0374651NGNG
C言語45秒クッキング
int check_zero( const void *source, size_t size)
{
 const char *p = (const char *)source;
 while( size-- > 0 ) { if( *p++ != 0 ) return 0; }
 return 1;
}
0375デフォルトの名無しさんNGNG
>373
コンストラクタでZeroMemoryした構造体に
もし何も代入されていなければ
即座にfalseを返すメンバ関数を作りたいんです
0376デフォルトの名無しさんNGNG
ゴメン、読み落とし

>374
それって構造体が8bitアライメントされてないと
おかしなことになりません?
というか、やっぱり自前で走査しないとダメなんですか・・・

ポインタとサイズ渡したらゼロクリアされてるか調べる
関数(マクロ)くらいあると思ってた・・・
0377デフォルトの名無しさんNGNG
>>375
その程度のことは人に頼らず自分でやれ
0378デフォルトの名無しさんNGNG
>それって構造体が8bitアライメントされてないと
>おかしなことになりません?

8bitアライメントって何。新語か?
0379デフォルトの名無しさんNGNG
>>376
それくらい自分で調べられないならC言語やめたほうがいいんでは?
0380デフォルトの名無しさんNGNG
                 ┌─┐
                 |も.|
                 |う |
                 │来│
                 │ね│
                 │え .|
                 │よ .|
      バカ    ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎
0381デフォルトの名無しさんNGNG
ANSIが標準規格を策定する以前はvoidというキーワードはなかったんですよね?
値を返さない関数はどう書いていたのですか?void *はchar *で代用していたらしいですが。
0382デフォルトの名無しさんNGNG
>>381
戻り型を省略。
0383デフォルトの名無しさんNGNG
初心者丸出しな質問ですが、
なぜCの標準ライブラリ関数やシステムコールやソケットなどの関数は
引数の並び方やエラーの場合の戻り値に統一性がないのですか?
途中で追加するにしても、たとえばエラーが-1なら-1で通すとか…
0384デフォルトの名無しさんNGNG
ソレが後方互換性というものです。
Javaマンセー(W
0385デフォルトの名無しさんNGNG
>>383
> なぜCの標準ライブラリ関数やシステムコールやソケットなどの関数は
> 引数の並び方やエラーの場合の戻り値に統一性がないのですか?
CはANSI-Cの規格が策定される前はC言語には仕様がないため乱立状態であった。
それをANSI-Cで互換性をもたしつつ、ある程度の統一性を持たしたある意味妥協の産物だ。

また、正確にはシステムコール、ソケットなどの仕様はPOSIXでありCの仕様ではない。
これもUnix乱立期に制定された仕様であり、多少の統一性がないのは仕方がない。

そしてこの仕様を変更するとそれに伴う混乱や過去の資産の変更が大きすぎる
残念ながら、マニュアルを注意深く読む習慣をつけるしかない。
0386デフォルトの名無しさんNGNG
>>385
とりあえずおいらは関数使うたびにmanしています。
0387デフォルトの名無しさんNGNG
1?1?1?1?1?1?1?1?1?1?0:1:0:1:0:1:0:1:0:1:0;
0388383NGNG
>>385
ありがとうございました。
それぞれに、実は深い意味があるのかなと思っていたので、助かりました。
>>386
それしかないのですか…残念。
0389デフォルトの名無しさんNGNG
>>386
たまに「この関数こんな戻り値返してたんだ」と新鮮な驚きを得ることあるよな。
0390 ◆k/Ubp.Kg NGNG
>>389
分かる分かるw フッと細かい仕様が気になっていつもテキトーに使ってる関数とか見たりすると
謎の返値が….
0391デフォルトの名無しさんNGNG
関数名書くと、下の方にニョロっと引数と戻り値が出るエディタって
無かったっけ??

VBはできたよね...
0392デフォルトの名無しさんNGNG
IntelliSense?
0393デフォルトの名無しさんNGNG
ちなみにprintf()の返り値はintですが、
返り値を見ているプログラムは見たことありません。
lintで警告が出てきますが無視です。
0394デフォルトの名無しさんNGNG
>>393
(void)printf("はろーわーるど\n");
こうすれば出なくなるかもしれないけど阿呆みたいだよな。
fprintfなら戻り値を見ることがあるかも。ないかも。
0395デフォルトの名無しさんNGNG
自分の始めての仕事は、lintに怒られないようにひたすらコード中に
キャスト入れてくって仕事でした。
0396デフォルトの名無しさんNGNG
#define printf (void)printf
0397デフォルトの名無しさんNGNG
>395
有用なようで無用な仕事だなそれ。
ちなみにマヌケなキャストをしてたところを憶えてたら公開キボンヌ
0398デフォルトの名無しさんNGNG
>>387
0
0399デフォルトの名無しさんNGNG
以前、サンプルプログラム見ていて

int v1, a;
: /* 中略 */
v1 = !!(a == 100);

という式を見たときは唸ってしまった。
0400デフォルトの名無しさんNGNG
C++なら、operator!しか定義してなくて、
if( !!object )
みたいな事態が、、
0401デフォルトの名無しさんNGNG
以前、サンプルプログラム見ていて

  for(;!!!!! ~~~~~~ !!!! ~~~~~~!!!!i;) {
  }

というループを見たときはちびってしまった。
0402デフォルトの名無しさんNGNG
>387
#include <stdio.h>
main(){
printf("%d",1?1?1?1?1?1?1?1?1?1?0:1:0:1:0:1:0:1:0:1:0);
return 0;
}
============
OUTPUT : 0
0403デフォルトの名無しさんNGNG
>>400
#define if(expr) if(!!(expr))
#define unless(expr) if(!(expr))
0404デフォルトの名無しさんNGNG
まともなエディタ作るには1年はかかる
0405 ◆k/Ubp.Kg NGNG
>>402
一々プログラム書かなくてもパッと見て分かるじゃん。三項演算子の条件式、全部真だよ?
0406デフォルトの名無しさんNGNG
ハンガリー記法でcharをcNumとかにしてもいいですか?
0407デフォルトの名無しさんNGNG
C南無。
0408デフォルトの名無しさんNGNG
>>406
ここはC言語のスレなので、ハンガリー記法の事を教えるスレではないと思われ。
0409デフォルトの名無しさんNGNG
>>407
ありがとん
>>408
ごめんね
お詫びにかつおぶしご飯,明日は食べるの我慢するよ
0410デフォルトの名無しさんNGNG
C言語はどのくらいできればマスターしたといっていいのでしょうか。
僕は結構いい線いっていると思うのですが。
0411デフォルトの名無しさんNGNG
>>410
C言語の関数をすべて覚えて、
すべての関数の挙動を把握していればマスター。
あくまで、C言語マスター。

C言語マスターしたからって、プログラムがうまく作れるとは限らない。
0412 ◆k/Ubp.Kg NGNG
>僕は結構いい線いっていると思うのですが。
と言う時点で痛いヤシ。一人でOS作れるくらいなら流石にマスターかと思うが(藁

# ネタニマジレス…カナ
0413デフォルトの名無しさんNGNG
>v1 = !!(a == 100);
って何やってるの?
v1 = (a == 100); と、どう違うのかマジ分からん
v1 = ((!!a) ^ (!!b)); なら分かるが
0414あ〜、わかりません・・・NGNG
 「2002年の月と日を入力して、2002年1月1日から、
入力された月日までの日数を求めるプログラムを作成しなさい」

という問題で、
各月の日数でグループにわける
入力された月の前の月までは、各月の日数を1月から順に全部加えたら
いいのかな・・・と思ったんですが・・・・
思ったっだけで肝心のプログラムを書けませぬTT
 こんな複雑な問題、if文とwhile文ぐらいしか習ってない
私にはとけやしないよう〜と泣き叫びたいっす。

 簡単ですか?これ?我が儘をいわせて頂ければ、
プログラムを書いて貰って・・・参考書片手に研究したい・・・。
0415デフォルトの名無しさんNGNG
>>414
スレ違い。

宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1029422194/
0416あ〜、わかりません・・・NGNG
>>415
 失礼しました。情報サンクスです
0417デフォルトの名無しさんNGNG
>>409
お詫びならばマヨネーズご飯を食らえ
0418デフォルトの名無しさんNGNG
>>414
time()で通し秒数を求めて、3600で割ればいいだろ?
2002年1月1日からの。
localtime()とかこのへん使えば簡単にできる。
0419あ〜、わかりません・・・NGNG
>>418
418さん、ヒントどうもです。
・・・しかしヒントを全く理解出来ていない私が情けない・・・。
time()localtime()とかってのは今まで見たことなくて。
なんせ週1の一時間授業では・・・12回しかしてないし。

 とりあえずは「簡単にできる」もんなんすね。
0420デフォルトの名無しさんNGNG
ブチブチ愚痴ってる間に調べようよ(笑)
何の為にインターネットへ繋いでるのよ

まぁたぶん>419はプログラマに向いてないよ
0421デフォルトの名無しさんNGNG
> time()で通し秒数を求めて、3600で割ればいいだろ?
24*3600の間違いですだ。ハイ。
0422あ〜、わかりません・・・NGNG
>>420さん
 あい、言えてます。全く不向きでした。
自分が、英語アレルギーな時点で気づくべきでした。
しかしこの授業を取ってしまったからには、
最低の成績でも単位をもらいたい・・・。

421さん
 あ、わざわざどうもです
0423デフォルトの名無しさんNGNG
>>414
int nissuu2002(int m, int d)
{
  const int t[] = {0,31,59,90,120,151,181,212,243,273,304,334};
  return t[m-1]+d-1;
}
こんなので我慢しとけ。残りの処理は自分で作れ。
0424デフォルトの名無しさんNGNG
激しくスレ違いを承知で聞きたいんですが
エディタ作成者さんみたいにフローチャート描こうと思うと
やっぱりSVG対応ドロー系だと思うんですが、フリーで良いのないっすか?

調べてみたんですがビューワしか見つけられませんでした。
0425420NGNG
>422
検索エンジンの使い方もしらないのかな・・・
ポインタくらい出しときゃよかったよ

http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp

標準関数なんて英語できなくても
リファレンスはいっぱいあるよ
0426 ◆k/Ubp.Kg NGNG
>>424
何もSVG対応が必須ではないと思われ。もちろん、可搬性の高いデータ形式だからSVG対応なのに越した事はないけど。
大抵のメジャーなソフトならプラグインあるから問題ないっしょ。多分一人で使うんだろうし。それよりも使い勝手を
重視する方が良いかと思われ。

# ドロー系ツールは使わないので具体的な意見が言えなくて申し訳ない
0427デフォルトの名無しさんNGNG
>>424
Dynamic Draw + SVG Inp&Exp Plugin
ttp://www.molips.com/jp/
0428エディタ製作中@クソ初心者NGNG
>>424
俺が使ってるツールは、すんごく使いやすいッス。
ヘルプ読まなくても、直感で使えますよ。
ただ、ちょっとキツイバグがいくつかありますが・・・
9月の中旬にバグを一掃したバージョンを公開予定らしいので・・・
かなり、お勧めです。

・・・ここで、URL公開すると作者さんに迷惑かな・・・?
0429888NGNG
3元連立一次方程式をGauss-Jordan法で解けという問題がありまして、一応プログラムは書いたんですが、対角成分が0の時に他の行と入れ替える操作をがどうしてもできません。
どうしたらいいのでしょうか。ぜひ教えてくださいっ!!!
0430デフォルトの名無しさんNGNG
むずい
あと宿題スレではない
0431デフォルトの名無しさんNGNG
>>429
宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1029422194/
0432デフォルトの名無しさんNGNG
日本語の処理法について詳しく解説しているサイト教えてくれー
「c言語 日本語 処理」とかのキーワードで検索かけても
出版社の書籍紹介ページばかりヒットしやがる
0433デフォルトの名無しさんNGNG
> 日本語の処理法について詳しく解説しているサイト教えてくれー
このスレじゃ不満なのか?
0434 NGNG
>>432
「日本語の処理」て何だ?
構文解析なのか、形態素解析なのか、コード変換なのか、
マルチバイト文字列の扱いなのか、その他なのか?
0435424NGNG
皆さん、ありがとうございます。

>>426
ドロー系を使うときは花子を使っているんですが、
簡単な立体図はこれでOKなんですが・・・。

>>427
ダウンしてみました。かなり良い感じです。
ありがとうございました。

>>428
「h」抜きで・・・はダメっすかね(w
何か検索のヒントとなるようなものを・・・。
0436デフォルトの名無しさんNGNG
fwriteを使って配列をファイルに書きこむ、26番目の要素から変な値が入ってしまいます。

8年ほど前、MSDOSとMS-Cを使用していたときにも、全く同じことがありました。
その時は、配列の値全てに0を入れていたはずなのに、書き込まれたファイルを見ると
26番目から謎の値が入っていました。2徹しても原因がつかめず、
あきらめてfprintfとループを使いました。
それ以降fwriteを使う機会がなかったのですが、今回8年ぶりに使ってみて
同じことが発生しました。
0437432NGNG
>>434
マルチバイト文字列の扱い かな

プログラミングをするにあたって一般的に(?)使われている単語が身についていないんで
疑問、質問をうまく表現できないっつーか、なんと言うか
0438 NGNG
>>436
使い方を間違えているか、プログラムがバグっている。
0439デフォルトの名無しさんNGNG
>>436
そうですか。了解しました。
0440 NGNG
>>437
「マルチバイト文字 先頭バイト」あたりでぐぐってみ。
0441エディタ製作中@クソ初心者NGNG
>>435
俺のエディタ置いてるHPに、何かあるかもしれません・・・(w
0442432NGNG
>>440
さんきゅう
google先生に聞いて見ます
0443プログラム歴2ヵ月NGNG
Cから始めたんですが難しすぎっす 
ポインター理解不可能
誰か教えてくれまつか?
頭わるい、むいてないはなしで
0444デフォルトの名無しさんNGNG
始めて2ヶ月なら理解できなくても不思議はない。
良い入門書でも読んで理解を深めてくれ。
0445デフォルトの名無しさんNGNG
char *h[26]={"a","b", ... ,"y","z"};
printf( h[i] );

0446デフォルトの名無しさんNGNG
formatでないものをprintfのformat部分に
渡すのは問題あるな。
0447デフォルトの名無しさんNGNG
>>446
おいおいなにいってんだ
0448デフォルトの名無しさんNGNG
printf関数は、char型ポインタを取ります。
>>446が正しい。
>>445を正しく動かしたければフォーマットをしていする。

printf("%c", h[i]);

ネタにマジレスですか?(w
0449448NGNG
いや、ちょっと待て。
ポインタで定義してるじゃん・・・
漏れが悪かった。
0450プログラム歴2ヵ月NGNG
最初に、VisualC++入門を買って意味解らずすてますた
探しまくって現在、初めてのC言語って本をなんとか読んでます
他に超簡単な入門書おしえて(ρ_;)
0451デフォルトの名無しさんNGNG
単に"%s", h[i]にしる、ってことでわ。
0452デフォルトの名無しさんNGNG
ポインタで定義?format?いったい何の話なんだよ
漏まえらなんかきらいだー。・゚(≧Д⊂;゚・。
0453436NGNG
配列を一気に全部書き込まずに、ループで一個ずつfwriteしても
同じでした。書き込みは正常に行われているみたいですが、
feofを使って調べてみた結果、26回目以降のfreadは
ファイル終端に達したと判断されて読み込んでいないみたいです。
なぜだ・・・
0454デフォルトの名無しさんNGNG
>>447

自分の参加しているプロジェクトのチームリーダー(30代後半)のプログラムをこの間覗いたんです。

そしたら・・

function(CString l_cstr)
{
CString cstr;
cstr.Format("%s", l_cstr);

何とか言ってやってください。
0455デフォルトの名無しさんNGNG
>>453
じれったい。
ネタはいいから早くタネを明かしてくれよ。
ネタじゃないなら該当のソースを見せろ。
0456デフォルトの名無しさんNGNG
教えて下さい
以下のように宣言した場合

#define MAX 100
struct field{ int data;
struct field *pt;
}node[MAX],*head;

上記において、node[MAX]という変数はstruct fieldという型だとわかるんですが、
では *head はどういう型を持つ事になるんでしょう?これも同じ型ですか?
0457デフォルトの名無しさんNGNG
>>454
なにがだめなの?
constの参照私じゃないから?
ちょく代入しないから?
たいした問題じゃないよ
0458デフォルトの名無しさんNGNG
>>456
*headはただのポインタ。
char *pStr
と同じ。
0459デフォルトの名無しさんNGNG
>>456
char c, *p;
というふうに続けて書くと、
char c;
char *p;
と同じ意味になる。
struct field {...} node[MAX], *head;
の場合は、
struct field {...};
struct field node[MAX];
struct field *head;
と同じ。こういう省略はC言語特有のスタイルなのだが、嫌う人も多いと思う。
0460デフォルトの名無しさんNGNG
>>457
Cで言えば、strcpyを使うべき所で、
わざわざsprintf("%s", ...)してるという事ではないか
0461デフォルトの名無しさんNGNG
おっとsprintfの引数が。まいっか
0462 NGNG
>>453
バイナリモードって知ってる?
0463424=435NGNG
>>441
ありがとです。
0464デフォルトの名無しさんNGNG
typedef struct{
char a1[3][3];
int a2;
int a3;
}A;

という構造体のサイズをsizeofを使って調べると20になってしまう。
本来なら17になると思うのですが。。(私の環境ではintは4バイト)
どなたかよきアドバイスを!
0465デフォルトの名無しさんNGNG
>>464
構造体のアライメント、で検索するよろし
0466デフォルトの名無しさんNGNG
>>464
パディングやアラインメント
をキーワードに今すぐgo!
0467デフォルトの名無しさんNGNG
>>464
俺の環境だとsizeof(A)は256になるね(sizeof(int)は4)
0468デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c2.html#13
2.13:
構造体にsizeof演算子を使ったら、私が思っていたよりも大きな大きさを返して
きた。まるで、おしりに詰め物がしてあるようだ。
0469デフォルトの名無しさんNGNG
>>465,466
産休!気になってしょうがなかった
0470デフォルトの名無しさんNGNG
>>468
末尾に詰め物がされることはあっても、メンバー間に詰め物がされることはないんだっけ?
0471デフォルトの名無しさんNGNG
>>470
んなことはない。ネタだったらごめんよ。
0472デフォルトの名無しさんNGNG
>>471
いや、マジ質問・・・
どこに詰め物がされても実際にプログラミングするうえでは困らないんだけど、ちょっと興味あるから。
0473デフォルトの名無しさんNGNG
たぶん、ビットフィールドにすればキッチリ詰まるのかな?
0474デフォルトの名無しさんNGNG
ビットフィールドか・・・
なんか構造体みたいな形だったような・・・それとマルチバイト文字のところは全然勉強していないな-_-;
0475471NGNG
>>472
たとえば、464 の構造体の場合、
コンパイラのデフォルト設定では
char a1[3][3];
の直後に3バイトとか7バイトの隙間ができる方が
俺的な世界においては一般的だと思う。(もちろん処理系にもよる)
0476473NGNG
なんか配列はビットフィールドにならないぽ
0477デフォルトの名無しさんNGNG
詰めたいと思う動機がサパーリわからんのですが
0478デフォルトの名無しさんNGNG
>>477
バイナリファイルに保存する時とか。
0479デフォルトの名無しさんNGNG
>464
(char)(char)(char)(----)
(char)(char)(char)(----)
(char)(char)(char)(----)
(    int      )
(    int      )
char : 1バイト
int : 4バイト
(----)の部分が埋められカウントされて20になるのでしょ。
(int)の長さに合わせる為になる。
というか、一番長い部分に合わせなかったっけ?(char,int longのレベルで)
構造体の大きさの計算はこんな感じになるはずだと思ったけれどね。
charのサイズを[2][4],[5][5],[4],[8],[9]とか替えてみれば
大体の法則性と言うものが見えてくると思うけれどね。
結果はsizeof(A)/sizeof(char)で出しているかな?
今回は悩むことも無いけれど、sizeof(int)で
割った数値を使ったりすることもあるからね。
0480デフォルトの名無しさんNGNG
>>479
> (----)の部分が埋められカウントされて20になるのでしょ。
ネ、ネタだと言ってくれ。頼む。
0481デフォルトの名無しさんNGNG
> 結果はsizeof(A)/sizeof(char)で出しているかな?
ネ、ネ 以下略。
0482デフォルトの名無しさんNGNG
>>479
配列の内部は断片にならないと思うぞ。マジレス
参考までに、MinGWのgccでchar a1[3][3]をsizeofしたら9と出た。
0483456NGNG
464さん、激サンクス
0484デフォルトの名無しさんNGNG
gcc で x86 なら4バイトアラインメントだから、

(char)(char)(char)(char)
(char)(char)(char)(char)
(char)(--------------)
(------- int --------)
(------- int --------)

こうでしょ。
で、構造体を直接操る必要があって、かつプラットフォーム非依存にしたいときは、

typedef struct {
char a1[3][3];
char padding[3]; /* unused */
int a2;
int a3;
} A;

とかしておく。
............で、あってる?
0485デフォルトの名無しさんNGNG
>............で、あってる?
AAの部分だけは合ってるよ。他は×。
0486484NGNG
>485
>AAの部分だけは合ってるよ。他は×。
まじ?......(´・ω・`)ショボ-ン
0487デフォルトの名無しさんNGNG
ファイルからgetcで一文字ずつ読み込んで,読んだ文字によってifで処理を変更させる
プログラムを書いているんですけど,改行文字の直前に謎の文字が入っており,
処理がうまくいきません.printf等で表示させても何も見えません.
この謎の文字の正体は一体何なのですか??
0488デフォルトの名無しさんNGNG
>>487
シラネーヨ
ソース出せ。
0489485NGNG
>>486
あ、ごめん。
>gcc で
の箇所を見落としてたので謹んで訂正する。

前半は合ってるよ。
後半は×。
その方法ではプラットフォーム依存の解決にはならない。
0490488NGNG
ソースじゃなくて読み込むファイルの中身か。。。
0491デフォルトの名無しさんNGNG
\r\n
0492デフォルトの名無しさんNGNG
>>491
ということはあいつ、バイナリモードで開いているのか・・・
つりし?
0493デフォルトの名無しさんNGNG
printfで数字列にすれば分かると思う。>>487
0494デフォルトの名無しさんNGNG
> printf等で表示させても何も見えません.

書式指定して数値で確かめろよ。
そうすれば13って表示されるよ。
0495436=453NGNG
>>462
ありがとうございます!!!
8年越しの謎が解けました!!
大解決です!!
0496デフォルトの名無しさんNGNG
>>495
ま、まじで?
0497デフォルトの名無しさんNGNG
>>495
UNIX使え。
0498487NGNG
>>491-494
解決しました.マジで助かりました.
ありがとうございます!
0499デフォルトの名無しさんNGNG
srand()の種に、WindowsAPIのtimeGetTime()のようなミリ秒単位の値
をLinux上で使いたいのですが、代わりのようなものはあるでしょうか?
0500デフォルトの名無しさんNGNG
gettimeofday
0501デフォルトの名無しさんNGNG
>464
ttp://member.nifty.ne.jp/fgalel/kouza/entc/part2/entc23.html
0502デフォルトの名無しさんNGNG
Rubyは?
0503デフォルトの名無しさんNGNG
>>502 釣り禁止
0504デフォルトの名無しさんNGNG
MICROSOFTのVC++6.0のPROには、
最適化できる機能がありましたが、
VC++NETのStandard Editionには
最適化の機能がありますか?
0505デフォルトの名無しさんNGNG
そんな事知りませんよ。マイクロソフトに聞いて下さい。
0506デフォルトの名無しさんNGNG
Standardには常に無い
0507デフォルトの名無しさんNGNG
関数の戻りを無視する時、
(void)foo();
とvoidにキャストするのは正義ですか?悪ですか?好みの問題ですか?

コードレビュー時に、後輩にどうアドバイスするか決めかねているので
仕様ではこうなってるなど、なにか良い根拠があれば教えてくださいませ。
0508デフォルトの名無しさんNGNG
>>507
正当だが悪。
0509507NGNG
>>508
俺も嫌いな書き方なんだけど、例えばsplintは(void)つけないと警告出してくるので、
俺が悪なのかなぁと。

で、どうなの?
0510MusasiNGNG
仕事がんばって見つけてください
age
0511デフォルトの名無しさんNGNG
何日か目を離しただけで、もう500オーバーしとる…
0512デフォルトの名無しさんNGNG
lintにかけるのはやめようよ・・
0513デフォルトの名無しさんNGNG
>>507
memsetやstrcpyも戻り値は存在するけどその返り値を見てますか?
0514507NGNG
ふだんsplintなんて使ってられないけど、明日は指導するフリをしなきゃいけないんで………
0515デフォルトの名無しさんNGNG
>>509
社の方針に従え。
我が社では糞。
0516507NGNG
>>513
なんか煽られ気味だなぁ。じゃぁ(void)なんて書くなヴォケ、死ねDQNと言っておきます。
0517デフォルトの名無しさんNGNG
>>513
strcat(s1,strcat(s2,s3));ってのがあったらしいぞ w
素直にsprintf使えって w
0518指導する練習NGNG
>>517
snprintf (or equivalent) 使え
0519デフォルトの名無しさんNGNG
>>518
はい(´・ω・`)
0520デフォルトの名無しさんNGNG
lispっぽくていいじゃん。おれもそうやって書くことにします!
0521デフォルトの名無しさんNGNG
lispっぽいとイイのか。へえ
0522デフォルトの名無しさんNGNG
すみません、ちょっと教えて欲しいんですが。
0523デフォルトの名無しさんNGNG
>>522
ちょっと待ってね。
0524デフォルトの名無しさんNGNG
うんこがでません。どうしてですか?
0525デフォルトの名無しさんNGNG
>>524
知りません。

次の方ー
0526522NGNG
すみません。そろそろ質問してもいいでしょうか?
0527デフォルトの名無しさんNGNG
駄目
0528522NGNG
まんこって実在するの?
0529522NGNG
そろそろ質問してもいいでしょうか?
0530デフォルトの名無しさんNGNG
>>522
ん?全然面白くないぞ。
0531522NGNG
すみませ〜ん、誰かいますか?
0532デフォルトの名無しさんNGNG
(-1: 荒らし)
0533デフォルトの名無しさんNGNG
>>522
質問があればぜひこちらでどうぞ。

http://pc3.2ch.net/test/read.cgi/tech/1029763932/
0534デフォルトの名無しさんNGNG
>>522
http://pc3.2ch.net/test/read.cgi/tech/1031568119/
こっちもお勧めだ。
0535デフォルトの名無しさんNGNG
「質問してもいいか」という質問が再帰的に行われ、
その先には進めなくなると言ってみる。
0536デフォルトの名無しさんNGNG
main関数の戻りはexitとreturnで返すのでは何か違いがあるんでしょうか?
0537デフォルトの名無しさんNGNG
>>536
exitを使えばプログラムないのどこからでも強制的に終了できる。
return でexeを終了するにはmain関数からしかできない。
多田それだけ。
0538デフォルトの名無しさんNGNG
>>536
C-FAQでは基本的に違いは無いと言っている。
0539デフォルトの名無しさんNGNG
/bin/ladin
0540デフォルトの名無しさんNGNG
>>536
abortっつーのあるぞ。興味があれば調べれ。
0541デフォルトの名無しさんNGNG
raise()でSIGTERM送っても終了するんだったかな。
0542デフォルトの名無しさんNGNG
>>541
デフォルトの挙動では、な。
0543デフォルトの名無しさんNGNG
>>537-542
ありがとうございました。
0544デフォルトの名無しさんNGNG
オーバーロードってどうやるんですか?
0545デフォルトの名無しさんNGNG
>>544
オーバーロード自体を知って訊いてるのかと小一時間
0546デフォルトの名無しさんNGNG
上書き?
0547デフォルトの名無しさんNGNG
オーバーマインドってどうやるんですか?
0548デフォルトの名無しさんNGNG
プリプロセッサで、言語自体が拡張できるとは、どういう意味でしょうか?
C言語はどんなに拡張してもC言語だと思うのですが。
C++はなしでお願いしますm(_ _)m
0549デフォルトの名無しさんNGNG
>>548
その話は忘れろ。
無かったことにしろ。
0550デフォルトの名無しさんNGNG
>>548
Pascalみたいにみせるマクロ群とか・・・
拡張しているわけではないけど。
0551デフォルトの名無しさんNGNG
http://www.pro.or.jp/~fuji/computerbooks/c/cprepro.hayashi.html
Cプリプロセッサ・パワー C言語の秘められた能力を解き放つ
0552デフォルトの名無しさんNGNG
ま た 林 晴 比 古 か
0553デフォルトの名無しさんNGNG
>>548
そういうことに興味持つ香具師はちょっと勉強してC++でテンプレートメタプログラミング汁。
いまのところだれもテンプレートの悪用だとかなんだとか言ってないからよ(w

俺には理解できないのでsage
0554548NGNG
>>549
え…そうなんですか?
>>550
そこまでできたら、確かに拡張した「っぽい」ですね。
>>551
参考になりました。
>>553
だからC++は…
0555552NGNG
>>554
俺だけ無視かよ!
いいよもう!
教えてやんないから!
0556デフォルトの名無しさんNGNG
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html

Pascal?
0557デフォルトの名無しさんNGNG
>>554
何でC++はあかんねん?
0558デフォルトの名無しさんNGNG
VBよりも遅いから。
0559デフォルトの名無しさんNGNG
おまえらにはりかいふのうだから
0560デフォルトの名無しさんNGNG
ttp://home.att.ne.jp/delta/shirapee/rascal/
ascal?
0561デフォルトの名無しさんNGNG
while(1)
{
 if( num[pos[cnt].y][pos[cnt].x] == 0 ) return;
 else{
  cnt++;
  if( cnt == max ) break;
 }
}

while文の中で,returnをするとやばいでしょうか?
どういう動作をするのでしょうか?
0562デフォルトの名無しさんNGNG
>>561
別にやばくない、関数の呼び出し元へ返るだけ
0563デフォルトの名無しさんNGNG
breakで抜けなくてもいいんだ。
うーむ。
他に問題があるようです。
がんばります。
0564デフォルトの名無しさんNGNG
バグの原因ハケーン。
&&じゃなくて,||だった。
これでも年収120万円もらってるのに・・・。
0565デフォルトの名無しさんNGNG
日本人の平均の1/3以下だ。気にスンナYO!>564
0566デフォルトの名無しさんNGNG
>564
ごめん、漏れ安心しちゃった(藁)
まだ下がいた
0567デフォルトの名無しさんNGNG
年収120万ってバイトだよね?
0568デフォルトの名無しさんNGNG
「0一つ抜けてた1200マソです」
という釣りではないか?
0569デフォルトの名無しさんNGNG
学生なら120マソでもいいと思うけどな。んま、漏れは学生んときでも3-400万は
貰ってた気がするが。
0570デフォルトの名無しさんNGNG
いや、実は 564はShowA師で、有名になって仕事が来たので
早速自慢してみた。
0571デフォルトの名無しさんNGNG
http://community.borland.com/museum/borland/software/TC201.zip
TurboC 2.01
057260cm浮き上がるストレートNGNG
僕はゲームで、<conio.h>のgetch()とkbhit()を使い
2468でカーソル移動、+で決定、-でキャンセルを行えるようにしています。
そこで質問です。カーソルが
→名前の入力
の時決定ボタンの+を押すとscanf()かgets()を使ってゲームユーザーに
名前の入力をさせるのですが、scanf()やgets()に入るときに前に入力した
+が入力するところに入ってしまっています。
解消する方法を教えてください。
0573デフォルトの名無しさんNGNG
>>572
おまいは「2chで得た知識だけでゲームを作れるか」という壮大なネタを展開してるのか?
0574デフォルトの名無しさんNGNG
>>571
飲み物ですか?
0575デフォルトの名無しさんNGNG
// ヘッダ [hoge.h]
struct Data_monna_tag
{
char showa[100];
int age;
}

// グローバル領域 [hoge.c]
static struct Data_monna_tag Data_monna={"",-1};

hoge(){
---
---

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
エントリポイントがhoge.cにない場合(hoge.c->hoge.soとかで)で、
functionの中でなく、char *showaを初期化する方法ってこれしかないですか?
できれば文字列リテラル""による静的記憶域の消費を抑える為に
showa[0]に'\0'入れたいんですけど。
0576デフォルトの名無しさんNGNG
↓これ、動く環境と動かない環境があるんですけど。
0577デフォルトの名無しさんNGNG
            __,,,,_
            /´      ̄`ヽ,
            / 〃  _,ァ---‐一ヘヽ
         i  /´       リ}
          |   〉.   -‐   '''ー {!
          |   |   ‐ー  くー |
           ヤヽリ ´゚  ,r "_,,>、 ゚'}
         ヽ_」     ト‐=‐ァ' !
          ゝ i、   ` `二´' 丿
              r|、` '' ー--‐f´
         _/ | \    /|\_
       / ̄/  | /`又´\|  |  ̄\
0578デフォルトの名無しさんNGNG
↑つまり環境は、都内でも緑に囲まれて静かなところ。
0579デフォルトの名無しさんNGNG
>>575
> char showa[100];
文字列リテラル""による静的記憶域の消費は気にするのに
静的記憶域に配置した構造体変数のサイズは気にしないのは何故?
0580デフォルトの名無しさんNGNG
>>575
この場合、初期化されたData_monnaが用意されるだけで、それとは別に
文字列リテラル""が用意されることはないと思うんだが。
0581デフォルトの名無しさんNGNG
>>572
ちゃんとgetchして + を検出したのなら、
余計な + は入力バッファに残らんと思うのだが?

例:
if (kbhit() && getch() == '+') { ... }
058260cm浮き上がるストレートNGNG
>>581こんな感じのコードです。
#include <stdio.h>
#include <conio.h>
void ShowCursol(int *,int *,int,int,int,int,int,int,int);
void MakeInputName(void);
void main(void)
{
  int y=0,x=0,get=0;
  printf("\x01b[2J\x01b[>1h\x01b[>5h");
  printf("\x1b[3;1H→");
  printf("\x1b[23;73H終了");
  printf("\x1b[13;33H名前入力");
  printf("\x1b[14;33H<=16Bite");
  printf("\x1b[1;31H名前:名無し");
  printf("\x1b[25;27Hカーソル移動12346789 決定+");
  for(;;)
  {
    if(kbhit()!=0) get=getch();
    else get=-1;
    if(get>='1' && get<='9')
      ShowCursol(&y,&x,5,10,3,1,4,7,get);
    if(get=='+' && y==2 && x==3)
      MakeInputName();
    if(get=='+' && y==4 && x==7) return;
  }
}
058360cm浮き上がるストレートNGNG
>>582の続き
void ShowCursol(int *y,int *x,int yUp,int xUp,int yBasis,int xBasis,int yMax,int xMax,int get)
{
  printf("\x1b[%d;%dH  ",*y*yUp+yBasis,*x*xUp+xBasis);
  *y+=1-(get-49)/3;
  *x+=(get-49)%3-1;
  if(*y<=-1) *y=yMax;
  if(*y>yMax) *y=0;
  if(*x<=-1) *x=xMax;
  if(*x>xMax) *x=0;
  printf("\x1b[%d;%dH→",*y*yUp+yBasis,*x*xUp+xBasis);
}
void MakeInputName(void)
{
  static char name[17]="名無し";
  printf("\x1b[2;31H入力:");
  printf("\x1b[>5l");
  scanf("%s",name);
  printf("\x1b[>5h");
  printf("\x1b[1;37H                ");
  printf("\x1b[1;37H%s",name);
  printf("\x1b[2;31H                      ");
}
0584デフォルトの名無しさんNGNG
カーソルはcursor
0585デフォルトの名無しさんNGNG
>>411
いまさらだけど、こいつアホだ。
0586デフォルトの名無しさんNGNG
>>585の方がもっとアホだ。
0587デフォルトの名無しさんNGNG
>>582
相変わらず見辛いコードだな
0588デフォルトの名無しさんNGNG
>>582
たしかにそういう現象が出た。(MinGWのgccのなんちゃってconio.h)
なんか、10年くらい前にも似たような状況に出くわした記憶があるような
気もするのだが、わからん。

それはそうと、荒いコードだな。
0589デフォルトの名無しさんNGNG
DWORDの定義は
typdef unsigned long DWORD;
こんなカンジですか?
0590デフォルトの名無しさんNGNG
WORDはintより6倍遅い
                      と言ってみるテスト
0591デフォルトの名無しさんNGNG
> DWORDの定義は
何のDWORDの定義よ?
Win32ならそれでいいんじゃないの。
0592DQN初心者2号NGNG
すみません。もし良かったらアドバイスください(´・ω・`)ショボーン

ノードによるリスト構造で、入力した数字を末尾に追加していく
プログラムを作ってみますた。そこで、数字を追加するたびに
malloc関数で領域を確保していくようにしますた。

実行してみると、動作は問題ないのですが

NULL pointer assignment
(ポインターがNULLを指し示している??????)
          

とかいうメッセージが実行後に出ます。
これは、何か問題があるのでしょうか?
うまくメモリが解放されていないということなのでしょうか?

もしよろしければ、おしえてください・・
0593デフォルトの名無しさんNGNG
longのサイズは環境依存、ワードサイズも環境依存
0594デフォルトの名無しさんNGNG
>>592 バグ。以上。
0595デフォルトの名無しさんNGNG
>>592
ソースを。
0596デフォルトの名無しさんNGNG
free(NULL);
0597デフォルトの名無しさんNGNG
>>595
いらない
0598デフォルトの名無しさんNGNG
>>592
> これは、何か問題があるのでしょうか?
リスト構造の解体をしてる箇所がおかしいのに1票

free()してる箇所をコメントアウトして
変なメッセージが出てこなくなるか試して見ろ。

0599DQN初心者2号NGNG
>>592 のソースです。おながいします


前略
struct node{
    int num;
struct node *next;
};
typedef struct node NODE;
NODE *start =NULL;
int main(void){
int data;
while(1){
printf("数字をにゅうりょくしてください\n");
scanf("%d",&data);
if(data == 0)break;
writ(data);
disp();
}
delpointer();
return 0;
}
0600DQN初心者2号NGNG
void writ(int data){
NODE *new,*p=start;
while(p->next != NULL){
p=p->next;
}
new= (NODE *)malloc(sizeof(NODE));
new->next=NULL;
new->num=data;
p->next = new;
if(start == NULL)start=new;
}
void disp(void){
NODE *p = start;
while(P != NULL){
printf("%d-",p->num);
p = p->next;
}
printf("\n");
}
void delpointer(void){
NODE *next,*p = start;
while( p != NULL){
next = p->next;
free(p);
p=next;
}
}
0601DQN初心者2号NGNG
>>598
前と変わりませんですた。
0602デフォルトの名無しさんNGNG
> while(P != NULL){
なぜ大文字 P ?
0603デフォルトの名無しさんNGNG
void writ(int data){
NODE *new,*p=start;
while(p->next != NULL){
p=p->next;
}
...
if(start == NULL)start=new;

start == NULLなら、最初の p->nextで ぬるぽ。
0604デフォルトの名無しさんNGNG
うむ。たしかにページ違反が出るな。

コンパイル時に警告もわんさか
0605DQN初心者2号NGNG
えっと・・・
(´・ω・`)ショボーン
0606デフォルトの名無しさんNGNG
そっか、警告はプロトタイプ宣言がなかったからだ。スマソ
0607DQN初心者2号NGNG
前略した部分は

#include<stdio.h>
#include<stdlib.h>
void writ(int data);
void disp(void);
void delpointer(void);

としますた・・・
0608デフォルトの名無しさんNGNG
まあ、いろいろ考え方はあるけど、startの前にひとつダミーの要素を
くっつけとくとか、ポインタのポインタを使うとか
0609デフォルトの名無しさんNGNG
NODE *start =NULL;
  ・
  ・
  ・
  NODE *new,*p=start;
  while(p->next != NULL)  ここだすね
0610デフォルトの名無しさんNGNG
普通は「末尾の要素へのポインタ」とかを持っておくものだと思うが、
そのへんはいーのか
0611DQN初心者2号NGNG
うーんと・・・

アドバイスいただいたところを中心にもう一回やってみます。
夕飯時に有難うございますた。
0612デフォルトの名無しさんNGNG
ダミー要素を使う例:
NODE root = {-1, NULL};
...
void writ(int data){
NODE *new,*p = &root;
...
void disp(void){
NODE *p = root.next;
...
void delpointer(void){
NODE *next,*p = root.next;
...
0613デフォルトの名無しさんNGNG
ポインタのポインタを使う例:
void writ(int data){
NODE *new,**pp=&start;
while(*pp != NULL){
pp = &(*pp)->next;
}
new = (NODE *)malloc(sizeof(NODE));
new->next = NULL;
new->num = data;
*pp = new;
}
0614デフォルトの名無しさんNGNG
ちなみに、関数writは効率が悪いので、もし宿題ならやめたほうがいい。
末尾へのポインタを持っとけ
0615DQN初心者2号NGNG
>>614
有難うございます。
大変参考になりますた。


追伸
宿題ではないです。perlを覚えたのでステップアップして
C言語勉強してます。只今、就職浪人中です(´・ω・`)ショボーン
0616デフォルトの名無しさんNGNG
質問です。
エキスパートCプログラミング 知られざるCの深層
p321ページで、変数が符号付かどうかをチェックするプログラム
(マクロ)を書けというのがあります。

#define ISUNSIGNED(a) (a >= 0 && ~a >= 0)

では駄目みたいなのですが、正しいプログラムを
教えてください。
0617デフォルトの名無しさんNGNG
>>616
基本的には、ちゃんと動いたぞ?
まあ、マクロの書き方としては不十分だが。
--------------------------------------------------
#define ISUNSIGNED(a) (0 <= (a) && 0 <= ~(a))
main () {
  signed int s = 123;
  unsigned int u = 123;
  printf ("signed %d\n", ISUNSIGNED(s));
  printf ("unsigned %d\n", ISUNSIGNED(u));
}
--------------------------------------------------
signed 0
unsigned 1
--------------------------------------------------
0618デフォルトの名無しさんNGNG
>>617

本文によると、K&R Cでしか動作せず、
ANSI Cでは新しい格上げ規則が適用されるため、
これではうまくいかない、とのことです。

ちなみに、ANSI Cではcharは符号付き、符号無し
どちらでもかまわないことになっているので、
そういったものを判定する際に用いるとのことです。
0619デフォルトの名無しさんNGNG
>>616
なんのために使うマクロかさっぱりわからん。
0620デフォルトの名無しさんNGNG
同感
0621デフォルトの名無しさんNGNG
>>618
char だけなら...

#include <limit.h>
#define ISCHARSIGNED (CHAR_MIN != 0)
0622デフォルトの名無しさんNGNG
CとC++だったらどっちをやったほうがいいですか?
自分的にはC++だと思うんですけど…
0623デフォルトの名無しさんNGNG
>>622
スレ違い。
C++
0624デフォルトの名無しさんNGNG
なら C++ やれば?
0625デフォルトの名無しさんNGNG
>>622
このスレではその質問にフェアな答えは出るまい
0626622NGNG
C++に逝ってきます
0627デフォルトの名無しさんNGNG
フェアな答えはあるのだろうか、と。
0628デフォルトの名無しさんNGNG
C++の本ってCくらい分かっているものとして書かれているものが多いね。
CマガジンのC++講座もそうだし。
0629デフォルトの名無しさんNGNG
NOTがダメならXORでやればばよさそうだが。
#define ISUNSIGNED(a) ((a) >= 0 && ((a) ^ (unsigned)-1) >= 0)
0630629NGNG
あ、超マヌケだ俺。
氏んできます。ごめんなさい。
0631デフォルトの名無しさんNGNG
お前ら、6chの投票で祭やらんのですか?

0632デフォルトの名無しさんNGNG
仕事で必要なんですが、C言語を使って、Oracle,DB2,SQLserverに接続する仕方を知ってる方いらっしゃいましたら教えていただきたいのですが。
0633デフォルトの名無しさんNGNG
それぞれのベンダがインターフェース提供してるだろ。
OracleならPro*C/C++
0634 NGNG
oo4o
0635デフォルトの名無しさんNGNG
>>632
念
0636デフォルトの名無しさんNGNG
>>635
つながりました!
ありがとうございます

これで今週末の納期に間に合うよ
0637 NGNG
a=0;
b=0;
c=2;
( a == 0 || ( b == 1 || c == 2 ) )
この時の,
( x1 || ( x2 ) )
のx1,x2の評価はどういうふうに評価されますか?
x2がTRUEの場合,a == 0 || TRUE という事?
0638名無しさん@EmacsNGNG
>>637
評価順に依存しないような素直なコードを書けばそんなのどうでもいい。
0639デフォルトの名無しさんNGNG
x2は評価されないんじゃ?
0640デフォルトの名無しさんNGNG
>>637
左から評価されて、true || x2 となる。
これはx2と関係なく常にtureなので、x2は評価されない。
0641デフォルトの名無しさんNGNG
>>637
&&と||は左オペランドから評価され、それにより真偽が判定される場合、
右オペランドは評価されない。らすぃ
0642名無しさん@カラアゲうまうまNGNG
>>637
> ( a == 0 || ( b == 1 || c == 2 ) )
aが0じゃなかったら(b == 1 || c == 2)が評価される。

> x2がTRUEの場合,a == 0 || TRUE という事?
なんかそのまま書き換えただけのように見えるが、何を考えてる?
0643デフォルトの名無しさんNGNG
>>637
そうか?大量のifのネストは嫌だぞ。
0644デフォルトの名無しさんNGNG
>>638-643
すんげー役に立ちました。
ありがとうb
0645デフォルトの名無しさんNGNG
>>643
そうッスか?
俺は多少大量になってもifをネストします。

ifの長文の条件式の方が見にくくて嫌いッスけど・・・。
0646デフォルトの名無しさんNGNG
言うまでもないが、実用上はこういう意義がある↓
int l = light(); // 軽い判定処理
int h = heavy(); // 重い判定処理
if (l && h) {...}
とやるよりは
if (light() && heavy()) {...}
のほうが、heavy を無駄に呼ばない分、効率的。
ただし、副作用がある場合には注意が必要。もちろん || でも同じ事。
0647デフォルトの名無しさんNGNG
>>646
あと、int同士でも
if(a && b && c){}
で、c(右)に行くほどfalseになることが滅多にない変数すると効率いいね。
0648646NGNG
>>647
普段はそっちのほうが重要な。
このへんはさすがにコンパイラ任せには(今のところ)できない。
しかし>>646はふつう if の入れ子にするかもしれない罠
0649デフォルトの名無しさんNGNG
sprintfで変数の中身表示するときに
8bitは255までだからmax3桁
16bitは65535までだからmax5桁
・・・
と決め打ちしてchar temp[4];とかしてもOKですか?
(4なのは'\0'分余計に取ってるつもり)
0650デフォルトの名無しさんNGNG
>649
マイナスは考慮しなくていいの?
素直に snprintf 使った方がいいんじゃないかな?
0651デフォルトの名無しさんNGNG
>650
snprintfを知りませんでした。ありがとう。
0652デフォルトの名無しさんNGNG
>>649
いい。実際はもっと取った方がいいけど。
>>651
snprintfは(略)
0653デフォルトの名無しさんNGNG
char a=255;
a++;

としたら、aが0になることは仕様として保証されてますか?
0654デフォルトの名無しさんNGNG
>>653
オーバーフローしてマイナスになるんじゃなかったっけ?
って言うか、signedのcharは、255まで行かない・・・。
って言うか、オーバーフローを期待する処理って見たことない・・・。
0655デフォルトの名無しさんNGNG
>>653
いない。
char型が8bitである保証はない。
0656653NGNG
>>654
おっと、unsigned char の間違いでした。
その場合は255の次は必ず0になりますかね?
>>655
K&Rを見たらchar型は1バイトと書いてあったから
(対してintは「自然な大きさ」と書かれている)
charのバイト数は省略して書かなかったんですが……。
一応char型が1byteだと仮定して話してます。
0657デフォルトの名無しさんNGNG
>>656
1byte = 8bit
とは規定されてないんじゃなかったっけ?
0658プレゼントNGNG
TOTOのHP、この一番下の「便座・便ふたワンタッチ着脱」
のムービー見てみてよ。思わぬところに。。。(*´Д`)
http://www.toto.co.jp/products/toilet/t00016/02.htm
0659デフォルトの名無しさんNGNG
>>658
ゴチになりますた。
0660デフォルトの名無しさんNGNG
>>658
もっと刺激がほしかった・・・
0661デフォルトの名無しさんNGNG
>>656,657
ANSI C言語辞典第一版の付録?のハードウェア特性一覧によれば
Hoheywell 600 のCHAR_BITマクロつまり1バイトのビット数は9だったそうな。

ANSIでCHAR_BITなんてマクロが定義されている以上は可変なんだろやっぱ。
0662デフォルトの名無しさんNGNG
int a;
としたとき
sizeof(int)
と
sizeof(a)
は
意味・処理ともに違いますか?
0663デフォルトの名無しさんNGNG
>>655
> char a=255;
char型に255の代入結果がどうなるかは処理系定義
コンパイラのマニュアルに聞け

>>662
結果は同じだが意味は
a += 1; a = a + 1;
と同じぐらい違う
0664デフォルトの名無しさんNGNG
#include <stdio.h>
#define num 5

int main(void)
{
FILE *fp;
int num,i;

fp=fopen("test1.bin","rb");

if(fp==NULL){
printf("ファイルをオープンできませんでした\n");
return 1;
}

printf("何番目のデータを読み込みますか?(1〜5)\n");
scanf("%d",&i);

fseek(fp,(i-1)*sizeof(int),SEEK_SET);

fread(&num,sizeof(int),1,fp);

printf("%d番目のデータは%dです。\n",i,num);

fclose(fp);

return 0;
}

ある参考書にのってるソースなんですが、
コンパイル全然できません。何がおかしいんでしょうか?
厨房ですがお願いしますだ。
0665デフォルトの名無しさんNGNG
>>664
使用しているOS、コンパイラ、それに
どのような方法でコンパイルしてみて
どのような結果になるのかを書け。
0666デフォルトの名無しさんNGNG
>>664
#define num 5
を削除。

ど ん な エ ラ ー が 出 た の か く ら い 書 け よ 。
0667デフォルトの名無しさんNGNG
>>664
 1. コンパイラが入っていない。
 2. ソースを入力していない。
 3. コンパイルの仕方が判らない。
のどれかでしょう。つか、
> コンパイル全然できません。
だけで何が起こっているのか他人に判るとお思いか?
0668デフォルトの名無しさんNGNG
と思ったら何なのこれ?

>#define num 5

>int num,i;

ネタだったのか、くそ!
0669デフォルトの名無しさんNGNG
いやネタじゃないっす。リア中です。
LSI-cで、コンパイルしたっす。
OSはウインドウズっす。

iが未定義と山ほどでたっす。

でも解決しました。
アホみたいなこと書いてすんません。
参考書のソース>ネタw
0670デフォルトの名無しさんNGNG
突然ですが、質問があります。
C言語のプログラムで、キー認証を行うためのプログラムは、どのようにして組めばよいのでしょうか?
お答えいただければ幸いです。
0671デフォルトの名無しさんNGNG
char s[256];
puts("キーを入力してください >");
fgets(s,sizeof s, stdin);
if (strcmp(s,"1234")!=0) {
puts("キーが不正です");
exit(1);
}
0672デフォルトの名無しさんNGNG
依存関係を示すインクルード文はどこに書いてる?
ヘッダ? ボディ?
0673デフォルトの名無しさんNGNG
#includeならコメントを除けば一番上に書いているけど。
0674デフォルトの名無しさんNGNG
実際そういう場合 sizeof(型) 派と sizeof(変数) 派ではどちらが多いのだろう。
0675デフォルトの名無しさんNGNG
>>674
どれに対するレスだよ。
0676デフォルトの名無しさんNGNG
>>662-663あたりに関して>>675
0677デフォルトの名無しさんNGNG
>>676
俺は型だな。
でも配列の要素数を求める時はsizeof 先頭の要素で割っている。
0678デフォルトの名無しさんNGNG
ソケットとか、Windowsの構造体とか、
ライブラリやAPIが要求する場合は型のサイズ、
それ以外は変数
0679677NGNG
そういえば型だと変数の型をintからshort intに変えた時などにsizeofのところも変えないといけなくなるな・・・
0680デフォルトの名無しさんNGNG
>ソケットとか、Windowsの構造体とか
よろしければ理由も教えてもらえますか?
0681デフォルトの名無しさんNGNG
>>680
大抵ポインタだから。
0682デフォルトの名無しさんNGNG
なるほどその場合は明らかに両者の結果が違ってしまうケースなので
仕方がないですよね。基本的には sizeof(変数) ってことですね。
0683デフォルトの名無しさんNGNG
>>682
つられんなよ。ポインタでも sizeof *pでOKだろ。
0684デフォルトの名無しさんNGNG
質問です。
横に40個並んだ数値データの列が100行あるデータファイルがあります。
データの一つ一つは5桁の整数で、これを配列に格納したいのです。
1 2 3 1 1.............(40個)
(100行)

いったいどうすればいいのでしょうか?
fscanf(fp,"40%5d" a[i][j] j=1,40);
なんていうのは無理なようですが......。

どなたかお助けを。
0685デフォルトの名無しさんNGNG
変数というか式になりますかその場合。
0686デフォルトの名無しさんNGNG
>>684
一行に確実に40個数字があるの?それぞれの区切り文字は半角スペース?
0687デフォルトの名無しさんNGNG
というか、どちらでもいい。つまらん論争だな。
0688デフォルトの名無しさんNGNG
>>686
数字は確実にあります。Fortranから吐かれたでーたで、半角スペースも
1桁とかぞえて、5桁です。
^^^24^^^12^^^^1.......
(^は半角スペースのつもり)
fscanf(fp,"%d%d%d%d.........(40個ならべ、それぞれ変数に格納しる)

というしかてがないのでしょうか?
0689デフォルトの名無しさんNGNG
>>684
俺ならfreadを使う。それとatoi系の関数。
0690デフォルトの名無しさんNGNG
>>689
fgetsとstrtolの方がよくない?多分strtolは数字のあとの空白で変換を終えてくれるとおもうから。
0691690NGNG
strtolの第二引数をうまく使えばいいと思うんだよね。
0692689NGNG
>>690
ありがと。書き込み時刻からわかると思うけど、
俺のレスは 684を読んだ時のものです。
0693690NGNG
>>689
なぜfreadを薦めたのかわかった。
なるほどね(笑) よく>>688を読んだら分かった。
0694デフォルトの名無しさんNGNG
>>688
for(i = 0; i < 100; i++) {
  fgets(buf, sizeof buf, fp);
  for(j = 0; j < 40; j++) {
    sscanf(buf,"%d", a[i][j]);
  }
}
じゃ駄目なの?
0695684NGNG
>>693
皆様、レスありがとうございます。

でもfreadを使う方がいいのか分からない........。
0696デフォルトの名無しさんNGNG
>>695
何桁だろうとスペースで補って5文字なんだろ?
ならfread使えばいい。
0697684NGNG
>>696

fread使ったことがないですが、やってみます。
>>694
こちらの線も試してみます。

(Fortranはこういう時だけ便利なんだけどなあ。)
0698デフォルトの名無しさんNGNG
freadで5バイトずつ読みとってからatoiで数値にして変数に格納。これを40回繰り返してから改行文字を読み飛ばす。
という作業を100回繰り返せばよいのかな。
0699698NGNG
×5バイトずつ
○5バイト
0700684NGNG
>>698
改行文字を読み飛ばすのはどうするんですか?
0701デフォルトの名無しさんNGNG
>>700
fgetsとか・・・
まあ改行文字数分fseekしてもいいけど。
0702684NGNG
>>701
ありがとう。
やってみます。
0703698NGNG
あ、そうだ。
5バイト読みとったあとに終端に\0をつけないと。
最初にbuf[5]に\0を入れておいてもいいかな。
0704デフォルトの名無しさんNGNG
退屈です。仕事をください。
0705デフォルトの名無しさんNGNG
externのプロトタイプ宣言ってつけた場合とつけない場合とどう違うのですか?
extern宣言の場合、とあるプロジェクトのソース見たら引数が違ったのですが。
こんな感じで・・・
↓
---a.c---
extern int hoge();
---------
---b.c---
int hoge( int hoge ){...}
---------
0706デフォルトの名無しさんNGNG
memsetをつかうと警告で”プロトタイプ宣言の無い関数の呼び出し”
といわれてしまうのですが.........。
0707デフォルトの名無しさんNGNG
>>705
デフォルトでexternだからつけてもつけなくても同じ

>>706
string.hをインクルード
0708707NGNG
あくまでも「extern」を。だからね。
0709デフォルトの名無しさんNGNG
いくら欲しい?
0710デフォルトの名無しさんNGNG
ちなみにプロトタイプ宣言の引数リストが省略されると関数呼び出しでどんな引数リストにしてもコンパイルでひっかからないはず。
0711706NGNG
>>707>>710
ありがとう。スッキリしました。
0712bloomNGNG

http://www.leverage.jp/bloom/start3/
0713705NGNG
>>707
そうなんですか。ありがとです

>>710
そいつは初耳ですた。
0714デフォルトの名無しさんNGNG
おれの能力を100とすれば710の能力は30ぐらいだな。
0715デフォルトの名無しさんNGNG
C++厨がいる模様。
0716684NGNG
freadの使い方はなんとなくわかったのですが....。
横40、縦126に並んだ5桁ずつのデータをmallocで動的に確保
した3次元配列に格納しようとしています。
イメージとしてはx[i][j][k]です。

for(i=0 ; j<1 ; i++) {
for (j=0; j < 128 ; j++ ){ // セクター範囲ループ
fread(x,sizeof(int),40,fp1); // レーダー雨量の読み込み
printf("%d\n",x);
}
}

メモリの確保は成功しているようなのですが、読み込むときに
”メモリがreadになることは出来ませんでした"といわれます。
なぜでしょうか(T_T)。
0717684NGNG
>>716
コメント消し忘れた...鬱欝....。
0718デフォルトの名無しさんNGNG
> fread(x,sizeof(int),40,fp1)
fread(x[i][j],sizeof(int),40,fp1);

int x[2][128][40];
と仮定
0719684NGNG
>>718
多謝!多謝!
0720718NGNG
あれ?
int x[1][128][40];
か?
0721デフォルトの名無しさんNGNG
718は25くらいか
0722デフォルトの名無しさんNGNG
C++厨は可及的速やかに去ってください。
0723デフォルトの名無しさんNGNG
>>716
そのxは何?(^_^;)
0724684NGNG
>>720
本当は、i=720,j=128,k=40のデータなのです。
今は簡単のため、i=1にしています。

あっ!>>716は

for(i=0 ; j<1 ; i++) {

になってた。
これ

for(i=0 ; i<1 ; i++) {

欝鬱蔚....。
0725723NGNG
もしかして、xってint型?
freadの第一引数はvoid *だよ(^_^;)
0726デフォルトの名無しさんNGNG
>>716
一番外のループの判定はi使ってるよね?
0727684NGNG
>>723
忘れて下され......(汗)
0728デフォルトの名無しさんNGNG
多分freadの機能を勘違いしているんだと思う。
0729684NGNG
>>725
あ、私の勘違い。(xのデータの意味を聞かれているのかとおもった。)
え、ということは、型キャストかなにかしなければいけないのですか?
ネットで調べたら
double data[256];
fread( data, sizeof(double), 256, stream );
というように使ってあったのですが。

>>726
はい。iです。
0730デフォルトの名無しさんNGNG
>>729
いや、ポインタならいいんだけど、printfで%dなんてやっているからint型かと思った。
0731デフォルトの名無しさんNGNG
int x[720][128][40];
fread(x, sizeof(int), 720 * 128 * 40, fp1);
ひょっとしてこうか?
0732デフォルトの名無しさんNGNG
#include <stdio.h>
int count_bits(unsigned int x){
int count = 0;
while (x){
if (x & 1U) count++;
x>>=1;
}
return (count);
}
int int_bits(void){
return (count_bits(~0U));
}
void print_bits(unsigned int x){
int i;
for (i=int_bits() - 1;i >= 0; i--)
putchar(((x>>i) & 1U) ? '1' : '0');
}
int main (void){
unsigned int nx;
printf("非負の整数を入力してください:");
scanf("%u",&nx);
print_bits(nx);
putchar('\n');
return 0;}
// --------------------------------
上記のプログラムでunsigned なら動くのですが
unsigned int を全て int に変えると動きません。
エラーメッセージも出ないので無限ループか何かに入ってるようです
なぜだかわかりますか?
0733デフォルトの名無しさんNGNG
↓なんか、やってること変わってない?

684 :デフォルトの名無しさん :02/09/12 17:34
質問です。
横に40個並んだ数値データの列が100行あるデータファイルがあります。
データの一つ一つは5桁の整数で、これを配列に格納したいのです。
1 2 3 1 1.............(40個)
(100行)
0734732NGNG
ちなみに入力にはいづれの場合も正の整数を入力しています

環境は
コンパイラ:Borland C++
OS: Win2k
です
0735デフォルトの名無しさんNGNG
>>732
処理系によっては論理シフトが算術シフトになるから?
・・・・きっと的はずれなこと言っているな・・・・
0736684NGNG
>>730
ありがとう。
>>731
え、そうなるんですか?
改行されているのですが、freadは無視して読み込んでゆくのですか?
>>733
データの列は100⇒128になりました。
freadがよいというのでやって見ているのですが.....どうも
うまくゆきません。
0737デフォルトの名無しさんNGNG
>>736
freadで5文字分をchar型の配列に読み込んでからatoiで変換するんだってば。
0738デフォルトの名無しさんNGNG
>>735
多分そう。
>>732
count_bits() のループ内で、x の値がどう変わっていくか調べると判ると思う。
0739デフォルトの名無しさんNGNG
最初にfreadを薦めた人の考えは、
「一行の構造が決まっているから、改行文字以前の部分は
一気に固定長の文字配列に読み込んでから変換すればいい」
って事だと思う。

それがなぜか、intの多次元配列に直接読み込んでる。
ご冗談を。。
0740684NGNG
>>737
>>739
ああ、ワカリマスタ.....。
有難う、やってみます。

当方Fortran厨だったもので、Cの文字列の扱いがどうにも
苦手です。ただただ、データファイルの整数値を読みたいだけ
なのですが(涙)Fortranなら
 read(fp1,'40d5') a[i][i][k] k=1,40
でスミマスのに.......。
0741デフォルトの名無しさんNGNG
C の 無 能 さ が ま た 証 明 さ れ ま し た
0742684NGNG
>>741
いえ、私が無能なだけです(鬱
0743デフォルトの名無しさんNGNG
739は28だな。
0744デフォルトの名無しさんNGNG
char buf[40 * 5 + 1];
buf[40 * 5] = '\0'; // 末尾に車止め
...
for (i =...
  for (j =...
    fread(buf, sizeof(char), 40 * 5, fp1); // 5桁が40個
    for (k = 0; k < 40; k++)
      x[i][j][k] = atoi(buf[k * 5]);
...
こういう意味だよね?
0745デフォルトの名無しさんNGNG
いや、>>28は俺だ。
0746デフォルトの名無しさんNGNG
>>743 26ですが、何か
0747デフォルトの名無しさんNGNG
間違えた
> x[i][j][k] = atoi(buf[k * 5]);

x[i][j][k] = atoi(buf + k * 5);
または
x[i][j][k] = atoi(&buf[k * 5]);
0748デフォルトの名無しさんNGNG
でもまてよ、5桁の最上位が必ず空白であると仮定しているんだけど、
これって本当かな
0749744=747 NGNG
改行の読み飛ばしは適当にやってね
0750デフォルトの名無しさんNGNG
>>748
仮定してないでしょ?
10000以上の数だったら空白はないはず。
0751デフォルトの名無しさんNGNG
>>750
そか、じゃあ、5文字ずつやんなきゃ駄目だね。
0752684NGNG
>>744>>747
あ、なんか動き出しました。
いけそうな予感がします。
しかし”車止め"ってのは一体...。
>>748
実はそうなんです。
0753デフォルトの名無しさんNGNG
でも正直、「何も考えずにscanf(系)を使え」が正解だと思うのだが
0754デフォルトの名無しさんNGNG
>>752
ん?ということはある数をxとして、0 <= x <=9999か?
0755デフォルトの名無しさんNGNG
>>752
ありゃそうなのか。じゃああとは、改行の読み飛ばしだけか。
0756デフォルトの名無しさんNGNG
>>752
「車止め」というか null terminator とか何とかいうんだけど、
C言語の文字列は、末尾に 0 コードが入っていないといけない
0757デフォルトの名無しさんNGNG
753は10ってとこだな。
0758684NGNG
>>753
私も初めは
fscanf(fp,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",a[i][j][1],a[i][j][2].....);
考えましたが、これはあまりにも......。
>>754
整数値はせいぜい3桁どまりです。

0759 NGNG
車止め・・・・、初めて聞いた。
どこか地方の方言?
0760732NGNG
>>735
>>738
なるほど、今助言から調べてみましたが
そうでした
ありがとうございました
0761デフォルトの名無しさんNGNG
番兵ちゃうのん?
0762デフォルトの名無しさんNGNG
あんまり関係ないけど、
char (*token)[5] = buf;
という、5文字単位に切り直したポインタを使うと、
> x[i][j][k] = atoi(&buf[k * 5]);
これが
x[i][j][k] = atoi(token[k]);
となって、見やすいかもしれない。。。けどどうでもいいな、こりゃ

scanfマンセー
0763デフォルトの名無しさんNGNG
東京は雨が降ってきたみたいです。
このスレは雨天休業です。
0764デフォルトの名無しさんNGNG
>761
ちゃう
0765732NGNG
いややっぱり違うっぽいです
#include <stdio.h>
int main (void){
int x;
printf("非負の整数を入力してください:");
scanf("%d",&x);
x >>=5;
int i;
for (i=32-1 ;i >= 0; i--) // intは32bit
putchar(((x>>i) & 1U) ? '1' : '0');
putchar('\n');
return 0;
}
これを実行してみたところ(値は5ぐらいを代入)
全て0になりました。算術シフトはされていないようです。
0766デフォルトの名無しさんNGNG
764は8か
0767732NGNG
intの右シフトが算術シフトなら
上位ビットは1になるはずですよね?
しかも代入している値は正の数ばかりですので
最上位ビットも1ではありません。

どなたか間違いのわかるかた
よろしくお願いします
0768デフォルトの名無しさんNGNG
http://chijiwa.ne.jp/yaboo/siseki/daimon/daimon_ue.JPG
車止め
0769デフォルトの名無しさんNGNG
>765
たぶんそこじゃなくて count_bits() 関数のことを言ってたんだと思うけど......
0770デフォルトの名無しさんNGNG
>>767
いくつかあるループのうち、どこで無限ループになるのか書いてくれればバグの発見も早いわけだが。
0771デフォルトの名無しさんNGNG
> scanf("%d",&x);
> x >>=5;

えっと、32より小さな値は無視?
0772デフォルトの名無しさんNGNG
あ、64かな
0773デフォルトの名無しさんNGNG
LEAVE命令とFPOデータではどのくらい処理速度が変わってくるのでしょうか。
概算でいいので教えていただけないでしょうか。
0774デフォルトの名無しさんNGNG
>>773
そんな命令(?)がCにあったっけ?
0775732NGNG
>>769
x>>=1; の部分ですか?
それならこの方法でもわかると思いますが違うのでしょうか?

>>770

ちょっと試してみます
0776732NGNG
>>771
右シフトすると上位が1になるか確かめるためです
とりあえず右にシフトしたかっただけで
5自体に特別な意味はありません
0777デフォルトの名無しさんNGNG
>>732
↓これの

int count_bits(unsigned int x){
int count = 0;
while (x){
if (x & 1U) count++;
x>>=1;
}

int cout_bits(unsigned int x)
を
int count_bits(int x)
にすると無限ループになるって話じゃないのかな(わかんないけど)?
0778732NGNG
>>769
count_bits 関数のことでした
なぜここだけint にすると問題が出るのでしょう?
わからないです
0779デフォルトの名無しさんNGNG
FILE *fp;
int i,j,k;
int x[1][128][40];

fp = fopen("filename", "r");

for(i=0; i<1; i++)
for(j=0; j<128; j++)
for(k=0; k<40; k++)
fscanf(fp, "%d", &x[i][j][k]);

fclose(fp);

0780732NGNG
>>777
そうです。そのとおりですが何がおかしいのかわかりません
0781デフォルトの名無しさんNGNG
算術シフトって、
「シフトすると最上位ビットが1になる」んじゃなくて、
「シフトしても最上位ビットは変わらない」だと思うが。

「算術シフトはされていない」という言葉の意味がわからなかったので、
よく読まずに書いてみるテスト
0782デフォルトの名無しさんNGNG
int型を受け取るcount_bitsにINT_MAXよりも大きな値を渡したら無限ループにならない?
0783デフォルトの名無しさんNGNG
>732
>>777 だけど、
x には 111.....111 が渡されるから
これをいくら算術シフトしても111....111のままで無限ループ
0784732NGNG
確か算術シフトは最上位ビットで
シフトして動かした部分が埋め尽くされることだったと思います

>>777
での unsigned を除くとエラーがでることが不明です。。
0785デフォルトの名無しさんNGNG
>>784
算術シフトじゃなくて算術"右"シフトな。
どちらにしろ最上位ビット(符号ビット)は変わらないだろ。
0786732NGNG
>>784
なるほど、完全にわかりました。
ありがとうございました
0787デフォルトの名無しさんNGNG
(-1 >> 1) == -1 であることを踏まえると、
x = -1 から初めて x >>= 1 を何度か繰り返しても、
決して x == 0 にはならない。
よって↓は無限ループに陥る

while (x){
  if (x & 1U) count++;
  x>>=1;
}
0788デフォルトの名無しさんNGNG
オソカッタ
0789デフォルトの名無しさんNGNG
ビット数が分かっているのなら指定回数ループすればいいのに。
0790789NGNG
いや、この場合はきっと可変か・・・
0791789NGNG
つっこまれそうなんで一応・・・
11000と1011000などで桁数が違うってこと。
0792732NGNG
>>786は >>783の間違いでした

>>787
ありがとうございました

>>789
いやbit数をだす練習もかねてのプログラムですから。。
0793デフォルトの名無しさんNGNG
>>779
それが正義というものだよな。
0794デフォルトの名無しさんNGNG
なんで三重配列なんだろう。
0795684NGNG
>>779>>793
え!それでできるんですか?
(ちょっとやってみます)

>>794
(x,y,t)みたいなデータなのです。
0796684NGNG
fread()のやりかたで結構うまくいっているのですが
データがずれて読み込まれています...。
(ああ、明日までに終わるか)

for (i=0 ; i < t ; i++){

buf[40 * 5] = '\0'; // 末尾に車止め
for (j=0; j < 128 ; j++ ){
fread(buf, sizeof(char), 40*5, fp1); // 5桁が40個
for (k = 0; k < 40; k++){
x[i][j][k] = atoi(&buf[k*5]);
dummy = x[i][j][k];
if( dummy > 0 ){
printf("%d %d %d\n",j,k,dummy);
}
}

}
}
0797デフォルトの名無しさんNGNG
>>796
だから「改行を読み飛ばしなさい」とあれほど。。。
fscanf(fp1, "\n"); とかでできるような気がする。嘘かもしれないが
0798デフォルトの名無しさんNGNG
あくまでもfreadなどの低レベルな関数に拘るなら、
fseek(fp1, 1, SEEK_CUR); または fseek(fp1, 2, SEEK_CUR);
で、改行コードの分だけ送り出す
0799デフォルトの名無しさんNGNG
>>796

freadで一行を一気に読み込んでどうするのよ。freadで5バイトずつ読めって言ったでしょ。
一行を一気に読み込むのならばfgetsでいいと思う。
0800799NGNG
正確に言えば「freadで改行文字を除いた一行を一気に」だな。
0801デフォルトの名無しさんNGNG
> freadで5バイトずつ

それはどういう御利益があるのか
0802デフォルトの名無しさんNGNG
>>801
省メモリー
というかその方がわかりやすいでしょ・・・
0803デフォルトの名無しさんNGNG
> その方がわかりやすい

fscanfの方がわかりやすいもんねっ
0804デフォルトの名無しさんNGNG
>>803
それはまた別の話だよ。
freadを使った場合に限って。
0805デフォルトの名無しさんNGNG
200バイトを省メモリーって、ネタですよね?
0806デフォルトの名無しさんNGNG
>>805
うん。それはね。
0807デフォルトの名無しさんNGNG
関数呼び出しがけっこう増えるぞ
0808デフォルトの名無しさんNGNG
一行読み込んでもいいけれど、fgetsにしろっての。
0809684NGNG
混乱してきました......。

とりあえず、freadの線でやっています。
改行を読み飛ばすすべを教えてください。
(fscanf(fp1, "\n"); では駄目でした)
0810デフォルトの名無しさんNGNG
>>809
freadじゃなくてfgetsで読めば改行の読み飛ばしなんて考えなくていい。
ただしバッファはもう少し多く取ること。
0811デフォルトの名無しさんNGNG
>>809
bufを少し大きくして、fread を fgets(buf, sizeof(buf), fp1) に置き換える
0812684NGNG
>>810

わかりました。
fgetでやってみます。(もういわれるがまま.......。)

あと、みなさんも有難う。
0813デフォルトの名無しさんNGNG
fgetsでタイムアウトってねーの?
0814デフォルトの名無しさんNGNG
fgets(buf,sizeof(buf),fp1)じゃなくてfgets(buf,40*5+2,fp1)の方がいいかも。
確かバッファはmallocで獲得しているとか言っていたし・・・
0815デフォルトの名無しさんNGNG
fgetsで1行読み込み。
読み込んだ文字列に対して strtokで文字列切り出し。
切り出した文字列を atolなどで数字に変換。
を行数分繰り返す。

が楽だと思うけど。
0816デフォルトの名無しさんNGNG
Perlを使うのが楽だと思うけど。
0817デフォルトの名無しさんNGNG
while (x){ xだけは危険。
とか書いてみる。
strtok で、区切りは空白?
0818デフォルトの名無しさんNGNG
>684
>>779 じゃダメなの?
0819デフォルトの名無しさんNGNG
>>817
だね。\nを入れてもいいけど。意味無いけど。
0820684NGNG
>>818
!!いけました.....ああ。
(なんということだ)

でも色々勉強になりました。
これを機に、文字列の扱いも勉強してみます。
有難うございます。
0821デフォルトの名無しさんNGNG
> strtok
切り出さなくても桁がそろってるそうだから、
atoi(&buf[k * 5])でいいらしい
0822684NGNG
(でも、まだ終わりじゃないんです。)
0823デフォルトの名無しさんNGNG
int main(void) {
  int *p, rt;
  rt = fnc_1(p);
  // その後fnc_1()で入った値を使う
}
int fnc_1(int *p) {
  int i; // 毎回iに違う値が入る.......
  p = (int *)malloc(i * sizeof(int));
  // pに適当な値が入る。 *p = 1;*(p + 1) = 2;.....
  return 1;
}
の場合、fnc_1()が終わった時点でmalloc()で確保した領域は開放されて
しまって、後でmainのほうでは値を見ることができないのでしょうか?
0824デフォルトの名無しさんNGNG
結論=やっぱり正義(scanf)は勝つ
0825デフォルトの名無しさんNGNG
>>823 ネタですよね?
0826デフォルトの名無しさんNGNG
>>823
> fnc_1()が終わった時点でmalloc()で確保した領域は開放
んなことはない。が、

> int i; // 毎回iに違う値が入る.......
> p = (int *)malloc(i * sizeof(int));
i を初期化せずに使って大丈夫なのか?
0827デフォルトの名無しさんNGNG
>>826 それは値が入るって書いてあるじゃん
0828デフォルトの名無しさんNGNG
>823
static i=0;
i++;
とかにしないと・・・
mainのpとfnc_1のpは別物だからね。
fnc_1内のそれらは、毎回初期化される。
iは使い物にならないと思うよ。
0829デフォルトの名無しさんNGNG
>>828 あーなるほど、そういう話だとすれば辻褄があうな
0830デフォルトの名無しさんNGNG
てか思いっきりメモリリーク
0831デフォルトの名無しさんNGNG
>>830
必ずしもそうではないと思うけど、議論は長くなりそうなので略。
0832デフォルトの名無しさんNGNG
>>830 俺も初めそれ疑ったけど、省略してあるので何ともいえん
0833デフォルトの名無しさんNGNG
わかった。int **pp だ
0834デフォルトの名無しさんNGNG
int main(void) {
  int *p, rt;
  rt = fnc_1(&p);
  // その後fnc_1()で入った値を使う
}
int fnc_1(int **pp) {
  int i; // 毎回iに違う値が入る.......
  *pp = (int *)malloc(i * sizeof(int));
  // .....
  return 1;
}
0835デフォルトの名無しさんNGNG
もし引数によってアドレスを返したいなら、
「受け皿のポインタpへのポインタpp」が渡らなければならない
0836デフォルトの名無しさんNGNG
訂正:「受け皿のポインタpのアドレスpp」
0837デフォルトの名無しさんNGNG
mod_cってなんですか?
0838773NGNG
俺は放置プレイですか?
0839デフォルトの名無しさんNGNG
774を放置してるからでない?
0840デフォルトの名無しさんNGNG
>>774
0841デフォルトの名無しさんNGNG
>>839-840
晩婚
0842773NGNG
774を見逃していた。
アセンブラの命令の話です。これもここでいいんだよね。
0843デフォルトの名無しさんNGNG
誰がそんなことを?
0844最初のfread提案者NGNG
>>820
fgetsを使うくらいなら freadを使っておけ。
つーか、fgetsをすすめる奴らは
とりあえず動けばそれでいいのか?
例外時のケースも少しは考えろ。

それから、fseekは効率が悪いので、
fgetcで改行コードを確かめる方がベター。

はあ、昨日は退屈すぎて寝ちまったんだよ。仕事をください。
0845684NGNG
初歩的な質問で申し訳ないのですが
48330000,山田川,59,129,177.0,3971.5,0.0,0.0
というデータを読み込むのに
fscanf(fp2,"%d,%s,%d,%d,%f,%f,%f,%f\n",&mesh,&sdummy,&range,§or,&fdummy,&fdummy,&fdummy,&fdummy);でだめなのはどうしてでしょう?
printf("%d\n",range);
とやると
4251844
という値が出てきてしまいます。
0846デフォルトの名無しさんNGNG
>>845
rangeじゃなくてsdummyの内容を確認してみれば、理由が分かると思う。
0847684NGNG
>>846
printf("%s\n",sdummy);
とすると
山田川,59,129,177.0,3971.5,0.0,0.0
ということは.....。

>>844
こちらのやり方も今度マスターしてみます。
(いまのところ私にはむずかしすぎるようです)
0848684NGNG
自己レスfscanf(fp2,"%d,%6s,%d,%d,%f,%f,%f,%f\n",&mesh,&sdummy,&range,§or,&fdummy,&fdummy,&fdummy,
&fdummy);
としてできました。ありがとう。
0849デフォルトの名無しさんNGNG
if(a != 0 && (b != 0 && c != 0) )
 continue;

の時に,
aがTRUEで,
bかcがFALSEの時は,continueが実行されません
continueが実行されるようにするためにはどうしたらいいのでしょうか?
0850デフォルトの名無しさんNGNG
%s
で、読み取る時に、','以降まで、読みとって整合性が無くなるのはよくある話し。
0851デフォルトの名無しさんNGNG
>>849
ifの行を削除。
0852デフォルトの名無しさんNGNG
真理値表書いてどの時、continueしたいのか書いたほうがいいかもしれないけど、
&&=>||でいいんじゃない?
aがTRUEって、a!=0がTRUEのこと?
0853デフォルトの名無しさんNGNG
a!=0がTRUEのことです
0854デフォルトの名無しさんNGNG
(b!=0,c!=0)
が
(T,T)(T,F)(F,T)(F,F)[T:TRUE,F:False]
の、どの時、continueしたいの?

さらに、A!=0がTRUEの時は、常にcontinueを、実行したいの?
0855デフォルトの名無しさんNGNG
if(a != 0 && !(b == 0 && c == 0) )
 continue;

で無理やり解決しました

>>851-852
ありがとう
0856デフォルトの名無しさんNGNG
>>854
a!=0がTRUEの時でも,
b == 0 と c == 0の片方がTRUEになった時に抜けるんじゃなく,
b == 0 と c == 0の両方がTRUEになった時に抜けるようにしたかったんです
0857デフォルトの名無しさんNGNG
!(b == 0 && c == 0) は ( b != 0 || c != 0 ) と等価なんだが。
0858デフォルトの名無しさんNGNG
↓まあまあ、そうツッコむなよ。
0859858NGNG
くそ、一歩遅かった。
0860デフォルトの名無しさんNGNG
>>857
ってことは,
b == 0 と c == 0の両方がTRUEになった時でも
FALSEになると?
0861デフォルトの名無しさんNGNG
>>858-859
オモシロイ(w
0862デフォルトの名無しさんNGNG
if(a == 0 || (b == 0 && c == 0) )
の条件にならない時に,continueしたかったんですが
0863デフォルトの名無しさんNGNG
if(a == 0 || (b == 0 && c == 0) );
else continue;
や、
if(!(a==0 || (b == 0 && c == 0) ) )continue;
if( a!=0 && !(b== 0 && c == 0) )continue;
if( a!=0 && (b != 0 || c != 0) )continue;
などが等価だと思われます。
0864684NGNG
すべてのデータが
39341725,山田川,66,83,198.0,4584.3,0.0,0.0
と思っていたら、ところどころ
39341726,-該当なし-,-,-,-,-,-,-
というデータが入っていました。
"-該当なし-"のデータは飛ばしたいのですが
上手い判定の仕方がわかりません。
予めbufに読み込んでから長さを測るのですか?
(カンマも含めて一行のデータの長さは固定です。)

結構膨大なデータなので時間がかかりそうな....。
0865デフォルトの名無しさんNGNG
>>864
Cでやってるならstrtokとかで
0866デフォルトの名無しさんNGNG
>>844
freadで一行を一気に読むコードを書いたやつに言えよ。
俺はfreadで一行を一気に読むくらいならfgetsを使えと言ったんだ。

ところで、例外ってどんな例外?
0867デフォルトの名無しさんNGNG
>>864
if(*dat[1]=="-該当なし-")
  continue;
じゃなくて?
該当なしの時、その後のデータにも'-'が入っているのなら
if(*dat[2]=='-')
  continue;
で、出来ないの?
その前に取りこんでから、isdigit等を使うのかもしれないけれど。
やっぱ、strtokがいいんじゃないの?
0868デフォルトの名無しさんNGNG
char *p;
gets(in);
p=strtok(in,",");
for(i=0; i<8; i++){
〜〜〜〜
 &nbswpp=strtok(NULL,",");
}
0869デフォルトの名無しさんNGNG
int i;
*(&i)=0;
というコードがあったんですけど、i=0;とどう違うんですか・・・?
0870デフォルトの名無しさんNGNG
>>844
fread/fgets論は興味ないので見てないけど、
いまどき、これくらいの処理で効率を気にするか?

例外云々もこれがどういうところで使われるのかによるし。
数回手動で動かせばいい、問題あったらその場で手直しできる
ようなプログラムなら、とりあえず動けば全く問題なし。
0871デフォルトの名無しさんNGNG
標準入力から読み込まれた
テキストの最初の12行だけを表示するのを作りたいんだけど
何かヒント下さい…。さっぱり分かりません…。

0872デフォルトの名無しさんNGNG
見た目と書く奴の神経が違うだけ。
0873デフォルトの名無しさんNGNG
>>871
改行文字を数える。
0874684NGNG
>>865
>>867

ありがとう。
できました。
0875デフォルトの名無しさんNGNG
>>869
見た感じ同じだと思うが、
書いた本人に意図を確認するのが一番確実だと思う。
0876デフォルトの名無しさんNGNG
>>870
お前の書いたプログラムはせいぜい学習用だけに
使ってくれ。間違っても外部に公開するな。
0877デフォルトの名無しさんNGNG
なるほど…。
有り難うございます。
0878デフォルトの名無しさんNGNG
自分用の使い捨てプログラムにわざわざ様々なエラー処理を施すやつもあまりいないと思うよ(笑)
0879デフォルトの名無しさんNGNG
>>871
fgetsを12回。
0880デフォルトの名無しさんNGNG
>>878
同意。
0881デフォルトの名無しさんNGNG
>自分用の使い捨てプログラム
誰もそんなことは言ってないが?
0882デフォルトの名無しさんNGNG
>>879
なるほど。どうもすみません。
0883デフォルトの名無しさんNGNG
あれだけしっかりとフォーマットの決まっているファイルなら、エラー処理なんていらないと思うんだが・・・
0884871NGNG
えっとたびたびすいません、では、
実行プログラムの名前が myhead でそれがカレントディレクトリに存
在するとすると,
myhaed < ~/.cshrc
というコマンドの出力結果が
head -12 < ~/.cshrc
の出力結果と同じになるようなプログラム.
の場合はどうしたら良いでしょうか…?
0885デフォルトの名無しさんNGNG
strが指す文字列が空かどうか判断するには、
if(*str=='\0')
/* 空 */ ;
else
/* 空でない */ ;

これが一番効率がいいですか?
コードのわかりやすさではif(strlen(str)==0)だと思うんですけど。
0886デフォルトの名無しさんNGNG
>>883
だめだ、お前ら話にならん。
初心者スレで実用を仮定した話をすること自体が
無理なんだろうな。
まあいいわ。俺が困るわけでもない。
0887デフォルトの名無しさんNGNG
>>883
他人が使うモノなら、正しいフォーマットが入ってくることを期待
するのはかなり危険(仕様外だとつっぱねることができるとしても)。
0888デフォルトの名無しさんNGNG
>>884
一文字ずつよみ取り表示しながら、\nを12回検知するかファイルの終端に達したら終わりにすれば?
0889デフォルトの名無しさんNGNG
>>887
やつの最初の方の書き込みをよく見ろよ・・・
0890871NGNG
>>888
なるほど、どうもありがとうございます、
さっそくやってみます!
0891デフォルトの名無しさんNGNG
>>886
無理というか、わざわざここでそういう話をする意味があるのか?
まぁ、注意を促すのは悪いことではないと思うけど。
0892デフォルトの名無しさんNGNG
限りなき初心者ですみませんが、

typedef struct {
int index;
char name[NAME_SIZE];
} Data;

というような構造体があったとして、main()の中で

Data array[ARRAY_MAX];

for(i = 0; i < ARRAY_MAX; i++) {
array[i].index = 0;
array[i].name = NULL;
}

ってやって初期化しよとしたら駄目でした。書き込んではいけないところに書き込もうとしたんでしょうか?
もしそうなら、どうやって初期化したらいいでしょうか?
お願いします。
0893デフォルトの名無しさんNGNG
この場合、正しいフォーマットを期待しなければfreadなんて使えないだろ(ワラ
0894886NGNG
> 無理というか、わざわざここでそういう話をする意味があるのか?
あるに決まってるだろ。
0895デフォルトの名無しさんNGNG
>>892
配列名は左辺値にならんでしょ。
0896デフォルトの名無しさんNGNG
>>894
じゃぁ、どこまで作り込めばいいと思う?
0897デフォルトの名無しさんNGNG
>>893
また初心者発見。
0898デフォルトの名無しさんNGNG
>>897
はぁ?
じゃあ5桁じゃなくてもfreadを使ってうまく動くのか?
0899デフォルトの名無しさんNGNG
>>898
freadでバッファに取り込んで、1文字ずつ自分で処理していくんじゃない?
ばかばかしいけど。
0900デフォルトの名無しさんNGNG
Perlを使え。
ということで684ネタはここで終了。
0901デフォルトの名無しさんNGNG
>>899

ファイルサイズを調べてからファイルの内容を全部ってことか・・・?
あほらしい。
0902デフォルトの名無しさんNGNG
>>885
strlenも、すぐにループが終わるのでそんなに効率悪くないと思う。
0903897ではないがNGNG
>>898
固定長で読み込めば仮にファイルの途中が破損しても
破損していないデータはすべて読み込むことができる。
fgetsでは破損個所以降のデータがすべてずれてしまう
可能性がある。この違いは大きい。

多分お前ファイル操作を根本的にわかってないよ。
0904デフォルトの名無しさんNGNG
>>903
で、破損していないデータだけ読み込んでどうしようってんだ?
0905デフォルトの名無しさんNGNG
getsにつづいてfgetsまでたたかれるようになったのね。
じゃあこれからは標準入力から読むときもfread使おう。
0906905NGNG
バッファを満たすまで入力が終わらないと思うけど、それは仕様ということで。
0907903NGNG
>>904
じゃあお前だけデータを全部失っとけ。
そしたらバックアップがどうとか書くんだろうな (プ
0908デフォルトの名無しさんNGNG
読んだだけでファイルって壊れるものなのか・・・知らなかった!!
0909デフォルトの名無しさんNGNG
だからfscanfを使えと
0910デフォルトの名無しさんNGNG
>>903って相当頭が固いみたいだな。
0911デフォルトの名無しさんNGNG
>892
array[i].*name = NULL;
は?
0912デフォルトの名無しさんNGNG
じゃあそろそろこの辺でまとめてよろしいか。

少しでも堅牢なプログラムの方がよいと思う人は freadを使え。
自分用の使い捨てと学校の課題レベルのプログラムしか
書いたことがない人、
または 1行が可変長のフォーマットを処理する時は fgetsを使え。

以上。
0913デフォルトの名無しさんNGNG
>>903
途中で余計な空白文字が入ってレコード長が変わっちゃったとかいう
場合にはfgetsのほうが融通きくと思うけど?
0914892NGNG
>>895
なるほど。ありがとうございました。
>>911
あ、そうするのか…それでarray[i].nameの値がからっぽになればいいのかな?
ありがとうございました。
0915デフォルトの名無しさんNGNG
>>913
あんたファイルの仕組みを理解してないよ。
0916903NGNG
>>913
安全よりも融通を優先するのか?(プ
まあお前はデータを全部失っとけ。
0917デフォルトの名無しさんNGNG
>>398
まじでワラタ
0918デフォルトの名無しさんNGNG
apacheもfgets使っているな・・・
これからは怖くて使えないや。
0919デフォルトの名無しさんNGNG
ところで、なぜfreadの方が安全なの?
0920デフォルトの名無しさんNGNG
>>919
破損したファイルをfgetsで読むとデータをすべて失うから。
0921デフォルトの名無しさんNGNG
>>920
影響は一行だけに留まらない?
0922デフォルトの名無しさんNGNG
>>921
あんたファイルの仕組みを理解してないよ。
0923デフォルトの名無しさんNGNG
ファイルの途中が破損しているわかった場合、
そのファイルの中のデータは既に信用ならないものに
なっていると思うが。
0924デフォルトの名無しさんNGNG
>あんたファイルの仕組みを理解してないよ。
このセリフは聞き飽きた
どうせならもっと建設的な意見述べてさっさとこの議論終わらせてくれよ
0925デフォルトの名無しさんNGNG
fgetsを使ったソフトなんていくらでもあると思うんだが。。。
それはみんな危険なんだろうか。
0926デフォルトの名無しさんNGNG
誤りのないバイナリデータの入力はfread、
何か誤りがありそうでテキスト入力ならfgets -> sscanf
ってやってたけど間違ってたのか。
0927デフォルトの名無しさんNGNG
>>923
だからお前はデータを全部失っとけ。
0928デフォルトの名無しさんNGNG
>>924
じゃあそろそろこの辺でまとめてよろしいか。

少しでも堅牢なプログラムの方がよいと思う人は freadを使え。
自分用の使い捨てと学校の課題レベルのプログラムしか
書いたことがない人、
または 1行が可変長のフォーマットを処理する時は fgetsを使え。

以上。
0929デフォルトの名無しさんNGNG
たとえばさ、一行100バイト(改行コード含む)という仕様のデータ
ファイルを処理するときに、fgetsで一行読み込んで途中で100バイ
ト以外の行があれば、とりあえずその行は捨てて、次の行から処理
を継続してるんだけど。何かまずい?
freadで100バイトづつ決めうちで読み込んだら途中でずれそうで恐い。

#1バイトずつ自分でパースしろって?
0930デフォルトの名無しさんNGNG
でもなんで読んだだけでデータを失うことになるのかなぁ?
ファイルってそんなにもろいのかなぁ?
0931みんなC好きだねぇNGNG
>>928
コピペは建設的ではないよぉぅ ・゚・(ノД`)・゚・。ウワァァン
0932デフォルトの名無しさんNGNG
903 がファイルの仕組みを理解してないってことでよろしいか。
0933デフォルトの名無しさんNGNG
>>929
そのデータの作成方法にもよるだろ。

> fgetsで一行読み込んで途中で100バイト以外の行があれば、
これが破損によるものなら、

> とりあえずその行は捨てて、次の行から処理
> を継続してるんだけど。
fgetsだとこの時点でデータがずれる。

が、破損でなくて、人間がエディタで直接作成したデータ
(作成時にその行の長さを間違えた、つまり可変長になっている)
だとしたらfgetsの方がいい。
0934デフォルトの名無しさんNGNG
一様乱数を作りたいんですが。
randでは無理ですよね?
0935デフォルトの名無しさんNGNG
array[i].name[0] = '\0';
0936デフォルトの名無しさんNGNG
>>933
ずれたとして、なんでそれだけでデータが失われるの?
そこが一番の疑問だYO!
0937デフォルトの名無しさんNGNG
>>936
データを取得するために新たにプログラムを作る必要がある。
だったら初めからそうしておけばいい話。
0938デフォルトの名無しさんNGNG
>>928 全然違う
テキストデータを1行ずつ処理したい場合はfgetsを使え。
固定長のバイナリデータを処理したい場合はfreadを使え。
少しでも堅牢なプログラムの方がよいと思う人はさらにferror()でチェックしろ。

freadの方がfgetsより堅牢と思いたい奴は気休めのためにfreadを使え。
0939929NGNG
>>933
ああ、各行に関連性はないってことを書き忘れてた。
つまり、どこか行が抜けても、行の順番が入れ替わってても問題はない
データね。
0940デフォルトの名無しさんNGNG
extern a;
int a=10;

を同じファイル内に書いてもOK?
0941デフォルトの名無しさんNGNG
>>940
もっちろん♪
でもextern int a;でしょ。
0942デフォルトの名無しさんNGNG
>>938
全然違う。テキストかバイナリかは直接関係ない。
書き直してみると↓こうなる。

可変長のテキストデータを1行ずつ処理したい場合はfgetsを使え。
固定長のデータを処理したい場合はfreadを使え。

少しでも堅牢なプログラムの方がよいと思う人はさらにferror()でチェックしろ。

テキストなら何でもfgetsの方がいいと思いこんでる奴は
気休めのためにfgetsを使え。
0943デフォルトの名無しさんNGNG
>>903みたいな人とは一緒に仕事したくないです! (;_;)
0944デフォルトの名無しさんNGNG
>>940
問題ない。
というか、大抵の場合は(*.hと*.cに分けて書いていても)おなじ
コンパイル単位に入ってる。
0945デフォルトの名無しさんNGNG
少しでも堅牢なプログラムのほうがよいと思う人は、読み込んだデータ
は全て疑え。
0946デフォルトの名無しさんNGNG
>>942
固定長のテキストデータを扱うプログラムを書いて、データを失うのがおち。
0947903NGNG
>>943
つーかお前俺の部下だろ。まだ叩き込まれ足りないようだな。
0948903NGNG
>>943
多分お前 俺の部下だろ。今さらやめたいってか?
0949デフォルトの名無しさんNGNG
ところでそろそろ950ゲットだ。
0950デフォルトの名無しさんNGNG
質問
FtpPutFileやFtpGetFileを使ってファイルをアップロード、ダウンロードする時に
プログレスバーに処理状況を表示したいのですが、方法がわからないので教えて下さい。
また、FtpPutFile等を途中で中断する方法も教えて下さい、。
0951デフォルトの名無しさんNGNG
>>950
スレ違う。ここはファイル処理の堅牢性について話すスレだよ!!
0952デフォルトの名無しさんNGNG
>>945
atoiは使うなってことですか?
0953デフォルトの名無しさんNGNG
おまいら、fgetsとかfreadとかで破損とかずれるとか、、
f g e t c で 1 文 字 づ つ 処 理 し ろ よ
0954デフォルトの名無しさんNGNG
↓もうその話は飽きたよう。
0955デフォルトの名無しさんNGNG
>>942
Cの知識も煽りのレベルも低いな。
  テキストなら何でもfgetsの方がいいと思いこんでる奴は
  馬鹿の一つ覚えのfgetsを使え。
この方が的確な煽りだろ?

確かにfreadは読み出し途中でエラーが発生すると読み込みを中断し、
fgetsは途中でエラーが発生しても中断はしない。
特に読み込みエラーになった場合にエラー場所から
リトライとかを行いたい場合、fgetsでは無理。

が、そんなケースの発生は希だし、今回のケースの場合は
せいぜいできることは何行目が読めないとかいうエラーメッセージを
出してプログラムを終了するぐらいだろ?
よって無理にfreadは使う必要など無い。
0956デフォルトの名無しさんNGNG
おいおい
上司 VS 部下 でもって2chかよ おめでてーな
0957デフォルトの名無しさんNGNG
>>952
atoiのかわりにstrtolで。
そんなに面倒じゃないから、もっとstrtol利用していいと思うけど。マジで。
0958942NGNG
>>955
はあ?
お前はファイル内容が破損すると必ず読み込みエラーが
発生するとでも思ってんのか?
ファイル破損=メディアからの読み出しエラー
とは限らないんだが。
知ったかぶって書いた割にはレベルが低かったな。

たとえばバイト化けして'\0'が混じったらどうなる?
そういうことに対処するなら最初からfreadを使った方がマシ。
fgetsと比べてコーディングの手間がかかるわけでもない。

> 今回のケースの場合は
> せいぜいできることは何行目が読めないとかいうエラーメッセージを
> 出してプログラムを終了するぐらいだろ?
これも読み出しエラーしか想定してないのでボツ。
0959デフォルトの名無しさんNGNG
>>903とかはよっぽど上から流れてくるデータが酷いプロジェクトばっかり
携わってたんだろうな。言わばテロに必要以上に怯えている今のアメリカみたいなもんか。
0960684NGNG
あの....お取込中すみませんが、どなたかそろそろパート<32>
を立てませんか?(私は" 俺に聞け!"というレベルじゃないので立てれません。)
0961デフォルトの名無しさんNGNG
>>959
こいつ自分の使ってるブラウザにさえデータ破損を
考慮した処理が入ってることを知らないんだろうな (プ
0962デフォルトの名無しさんNGNG
次スレはShow-A孫でたのむ。
0963959NGNG
おや?俺は別に煽ったつもりはなかったんだけどなぁ・・気に障ったか?スマソ
0964fread提案者NGNG
んじゃ、最終結論を出してよろしいか。

どうぞお前ら fgetsでもfreadでもfgetcでもfscanfでも
好きなのを使ってください。
それでどうなろうが俺の知ったことか。
あと、仕事をください。
0965デフォルトの名無しさんNGNG
>>964
Show-Aたん?????
0966デフォルトの名無しさんNGNG
>>970
次スレよろしく〜
0967964NGNG
>>965
意味がわかりませんでした。
このスレを立てたのは私のせがれだと聞いてます。それが何か?
0968デフォルトの名無しさんNGNG
>>684 sscanfの書式に注目。
----------------------------------------------------
#include <stdio.h>
main () {
  char buf[1024];
  while (NULL != fgets (buf, sizeof (buf), stdin)) {
    char name[1024];
    int id, a, b;
    float c, d, e, f;
    int count = sscanf (buf, "%d,%[^,],%d,%d,%f,%f,%f,%f",
                        &id, name, &a, &b, &c, &d, &e, &f);
    if (count != 8) continue;
    printf ("id=%d name=%s (%d %d %f %f %f %f)\n",
            id, name, a, b, c, d, e, f);
  }
}
----------------------------------------------------
39341725,山田川,66,83,198.0,4584.3,0.0,0.0
39341726,-該当なし-,-,-,-,-,-,-
39341725,アイウエオ,66,83,198.0,4584.3,0.0,0.0
----------------------------------------------------
C:\WINDOWS\デスクトップ\c-test>a < str.txt
id=39341725 name=山田川 (66 83 198.000000 4584.299805 0.000000 0.000000)
id=39341725 name=アイウエオ (66 83 198.000000 4584.299805 0.000000 0.000000)
----------------------------------------------------
s c a n f マ ン セ ー !
0969955NGNG
>>958

> たとえばバイト化けして'\0'が混じったらどうなる?
freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。
お前、教えて君やってないで自分で試してみろよ。

ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
あんたファイルの仕組みを理解してないよ。

> fgetsと比べてコーディングの手間がかかるわけでもない。
1行のバイト数が変わってしまった場合は?
例えばftpでしくじって\r\nが\nに化けた場合。

> これも読み出しエラーしか想定してないのでボツ。
他のエラーって何?バイト化けして'\0'が混じったデータなら
freadでも文字列のチェックは必要だろ?

> 知ったかぶって書いた割にはレベルが低かったな。
お前がな、捨てハン付けてまで、馬鹿丸出しの発言するなよ。
0970よっしゃNGNG
新スレ立てるけどファイル入力の話はこっちで完結させろよな<一部の粘着クン
0971684NGNG
>>968
なるほど。sscanf一本でもいけるのですね。
しかしこんな書式知らなかった。
勉強になります。

0972968NGNG
>>971
%[^,]=カンマ以外の文字列、という意味。
俺も調べて初めて知ったんだけど、色々あるみたいだね。とっつきにくいけど
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
こういう短い行ごとの処理なら、fgets+sscanfをうまく使えると思う
0973SHOW-A孫NGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0974デフォルトの名無しさんNGNG
>>973
貼る場所が違うぞ(藁
0975SHOW-A孫NGNG
ぐはっ!なんか書き込まれてないと思ったら前スレの方に貼ってたのか(;´Д`)

ちなみに新スレ
http://pc3.2ch.net/test/read.cgi/tech/1031905402/
0976955NGNG
>>970
> <一部の粘着クン
俺については了解。あっちではこの話題は出さない。
というかあの知ったか君の完全敗北で完結してるけどね。
0977デフォルトの名無しさんNGNG
なんだかんだ行ってもム板の顔だね、このスレは。
最近は1週間で使い切るし。
0978名無しさん@EmacsNGNG
そうだよね〜。2、3日忙しくて目通せないと、すげーレスついてるし。
0979デフォルトの名無しさんNGNG
>>978
SHOW-Aのカリスマ性が関係してるとかしてないとか…
いや、関係はないわ ごめん
0980デフォルトの名無しさんNGNG
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< えふりどえふりど!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< えふりどえふりどえふりぃどぉ〜〜!
えふりぃど〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
0981デフォルトの名無しさんNGNG
>>980
えいどりあん?
0982958NGNG
>>969
ぎゃはは。全然意味がわかってないよお前。
> freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。

'\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
どうやって判断するんだ?という意味なんだが。
(初心者が陥りそうな罠がまだ残ってるから反論には気をつけてね)

しかも'\0'というのは一例を挙げただけで、
もっと深刻な事態になる文字もあるわな。わかると思うけど。

だから
> そういうことに対処するなら最初からfreadを使った方がマシ。
> fgetsと比べてコーディングの手間がかかるわけでもない。
と書いてるんだよ。

> ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
> あんたファイルの仕組みを理解してないよ。
これはお話にならん。エラー時の話をしていたはずだが。
お前のところのテキストファイルは壊れようが何しようが
テキストデータしか存在しないのかもしれんが。

> 1行のバイト数が変わってしまった場合は?
> 例えばftpでしくじって\r\nが\nに化けた場合。
お前やっぱりファイルの仕組みを理解してないよ。
ファイルの破損とお前がftpを操作をしくじって
ファイル内容を書き換えるのでは意味が違う。
しくじった後のファイルは、あらかじめ決められた長さ
の固定長ファイルとは言えない。
0983デフォルトの名無しさんNGNG
freadならどこが終端なのかわかるのかな・・・
0984デフォルトの名無しさんNGNG
903とその信者は自分のつくったソフト以外は使うなってことだよな。
他人のつくったソフトにfgetsを使っているところがあって、データを失うようなことになったら困るもんな(藁
0985デフォルトの名無しさんNGNG
UNICODE(UTF16)テキストなら'0'が大量に入るわけだが。
0986エディタ製作中@クソ初心者NGNG
俺が作ってるテキストエディタは、fgets関数を使用しております。
・・・今のままでいいのか、fread関数に変えるべきか・・・。
0987982NGNG
だめだ俺、これ以上付き合うと
自分の性格が歪んでしまいそうなので辞退する。

>>969
ごめん。
この件について俺からはもう書くことは無いけど、
俺が間違ってたよ。
0988デフォルトの名無しさんNGNG
ところで「さいたまさいたまさいたま」の意味が良くわからん。
誰か教えれ。
0989デフォルトの名無しさんNGNG
>>986
固定長テキストエディタなんて要らんぞ
0990デフォルトの名無しさんNGNG
>>986
fread厨の言うことを真に受けるなよ。
0991エディタ製作中@クソ初心者NGNG
>>989
その辺は大丈夫です。
ちゃんと、メモリ資源がつづく限りテキストを読めるよう改造する予定ッス。
どんなに改造しても、
自分の窓を持たないエディタなんて他の人に使ってもらえそうにないですけど・・・(涙
それでも、勉強のつもりで自分の限界まで改造してみます。

>>990
う〜ん、fgetsで大丈夫なんですかね〜・・・。
上の方で、ファイルを読み込んだだけでファイルが壊れる事があるってありますけど・・・
マジッスか!?
うっかりバイナリとかをfgetsで読みに行ってファイル壊れるってことありませんよね?(汗
0992デフォルトの名無しさんNGNG
読み込んだデータを書き込まなきゃ大丈夫
0993エディタ製作中@クソ初心者NGNG
>>992
ですよね!
うん、安心しました・・・。
ありがとうございます。
0994デフォルトの名無しさんNGNG
1000!
0995デフォルトの名無しさんNGNG
1000?
0996デフォルトの名無しさんNGNG
fread派はもう言い残すことは何もありませんか?
1000逝く前に言いたいことがあればどうぞ。
0997デフォルトの名無しさんNGNG
struct res buf[1000];
fread (buf, sizeof (struct res), 1001);
0998デフォルトの名無しさんNGNG
あ、FILE*忘れた
0999デフォルトの名無しさんNGNG
999
1000955NGNG
>>982
> '\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
> どうやって判断するんだ?という意味なんだが。
どこまでが読み込んだのかを判断する必要はない。
正しく読めたかを判断できればよい。
どっちにしろ堅牢なプログラムを作る必要があるのなら、
読み込んだデータは正しいフォーマットかどうかのチェックをするんだから
フォーマットのチェックで引っかかる。

> もっと深刻な事態になる文字もあるわな。
'\n'か?ところで、コントロール文字が化けるケースってあまり思いつかないんだけど
何するとコントロール文字が化けるの?
お前の作った糞プログラムを動かしたりするとか

> これはお話にならん。エラー時の話をしていたはずだが。
了解、テキストファイルが壊れてバイナリになってしまったケースだな
それならばなぜ

> しくじった後のファイルは、あらかじめ決められた長さ
> の固定長ファイルとは言えない。
とかぬかすんだ?自分で矛盾していること言ってることに気づいてないのか?
テキストファイルがバイナリファイルに化ける可能性は考慮して、
固定長ファイルの1レコード長が変わる可能性は考慮しないのか?

固定長ファイルの1レコード長が変わる可能性の方が遙かに高いと思うが?
freadの方が堅牢なんて恥ずかしい無知を晒した上に、
今度は自分の考えの浅さを露呈して楽しいか?
まぁ、世の中にはそういう変態がいることは知っているけどね。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。