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

C言語の事訊いて!!!第.38支部

レス数が1000を超えています。これ以上書き込みはできません。
0001隊員NO.1919072 ◆rhAfp.iLoU NGNG
C言語の質問スレッド38発目だよ。
それはそうと君もC言語隊員になろう!!

・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/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0002デフォルトの名無しさんNGNG
2
0003隊員NO.1919072 ◆rhAfp.iLoU 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
0004デフォルトの名無しさんNGNG
4げとずさ
0005隊員NO.1919072 ◆rhAfp.iLoU NGNG
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。

1間違えた。隊員失格だね・・・

<前スレ(37支部)>
http://pc3.2ch.net/test/read.cgi/tech/1035623265/
0006Void ◆XHOW.zla5c NGNG
改訂第4版 ANSI C対応 はじめてのCはどうなの?と言ってみる罠。
0007デフォルトの名無しさんNGNG
即答できる質問をかけ
0008デフォルトの名無しさんNGNG
で、結局C99の話題はありなのか?
0009デフォルトの名無しさんNGNG
ついに、”オレ様”の名前がなくなっちゃったね。
0010デフォルトの名無しさんNGNG
なぜCのポインタ周りの仕様は複雑ですか?
0011デフォルトの名無しさんNGNG
>>10
どこが?
0012デフォルトの名無しさんNGNG
プリプロセッサはCの機能の一部ですか?
0013隊員NO.1919072 ◆rhAfp.iLoU NGNG
ああ、みんなごめんね。
前スレのリンクが、前々スレになってるよ・・・

ぐへぁ!
0014デフォルトの名無しさんNGNG
>>8
有りだが、個人的にはC99に特化した書き込みなら
そのように前置きしてほしい。
0015デフォルトの名無しさんNGNG
質問ですけど、c = (char)c;って(以下略
0016デフォルトの名無しさんNGNG
C#とJava の違いを教えてください。
0017デフォルトの名無しさんNGNG
>>15
(以下略
0018デフォルトの名無しさんNGNG
>>12
一部だが、前処理として実行されるため、Cの文法解釈を無視している。
0019デフォルトの名無しさんNGNG
c=(char)c;の目的って結局なんだったの?
char文字列と比較するために単にint→charにしただけ?
0020デフォルトの名無しさんNGNG
>>8
あなたの好きにしていいのよ。
>>9
そうですね。
>>10
あなたには複雑に感じるのかも知れません。
>>12
はい、ただし C コンパイラの一部ではありません。
>>16
残念ながらスレ違いです。
0021デフォルトの名無しさんNGNG
windowsで環境変数の値を取得したいのですがどうすればいいのでしょうか?
002212NGNG
>>18 >>20
分かりやすい解答をサンクスコ
0023デフォルトの名無しさんNGNG
>>21
「C」 では getenv() を使ってください。
環境依存の話では、Windows で動く多くの処理系が main() の第三引数 envp
をサポートしているのでそれを走査してください。
002421NGNG
>>23
ありがとうございます。試してみます。
0025デフォルトの名無しさんNGNG
>>19に答えてくれんか。
もしchar文字列と比較するために型をそろえただけなら
なぜあんな論争になったのかがわかんないんだよ・・・
0026デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
printf("%d\n" , __argc);

return 0;
}

どうしてこれで動くのでしょうか?
0027デフォルトの名無しさんNGNG
strchrの引数が絡んでるんじゃ無いの?
0028デフォルトの名無しさんNGNG
>>26
動きませんが
0029デフォルトの名無しさんNGNG
>>24
まんま、19 の通り。
なぜそんな事をしているかと言えば、規格で引数が int なのに 「char に変換された値」
と明記されているから。
0030デフォルトの名無しさんNGNG
アンダーバー二つは何かあったっけ?
0031デフォルトの名無しさんNGNG
>>25
c = (char)c;
の c が int 型ってのは分かってる?
0032デフォルトの名無しさんNGNG
>>25
それだけ。
論争の原因はたぶん、なくても動く処理系が多いから不要と考える人が多かったからかな。
003326NGNG
環境はWindows2000です。
0034デフォルトの名無しさんNGNG
>>26
VC++ を使ってますね?
__argc は <stdlib.h> でコソーリ定義されています。
何に使っているのかはよくわかりません。

何にせよ、これは C の規格に無い事なので __argc を使っては逝けません。
0035デフォルトの名無しさんNGNG
>>33
ウィソ厨は(・∀・)キエロ!!!
0036デフォルトの名無しさんNGNG
>>25
charがsignedな処理系でも
strchrx("aアa", 0xb1); 
がちゃんと'ア'にヒットするかどうか。
0037デフォルトの名無しさんNGNG
>>34
激しくコンパイラ依存の話ですまんが、
GUIアプリはエントリポイントがWinMain()だからだろうね。
BCCでも同じようなグローバル変数が用意されていたと思う。
0038デフォルトの名無しさんNGNG
>>25
規格で決まってるからという理由以外で説明するなら、
36が書いてるように、charの最上位ビットが1になるような
文字の場合に、それが負の数値で渡されても正の数値で渡されても
対応できるようにするため
というのが一番の目的だろうね。
(他に charで表現できない整数がcharに切り詰められるというのもあるね)
0039デフォルトの名無しさんNGNG
あるヘッダファイルに
typedef unsigned int bit_16;
が記述されていて、
Cのソース
void main(bit_16 argc, byte *argv[])
{
}
と記述されている場合、このCソースファイルをどうすれば
コンパイルできるのでしょうか。コンパイラにヘッダファイルの
置き場所を指定すれば良いのでしょうか。
0040デフォルトの名無しさんNGNG
char *c="chinko"

先頭アドレスしか入ってないはずなのに、
printfするとちゃんとchinkoと表示されるのはなぜですか?
普通に考えると、cとしか表示されないはずです。

もう一度聞きます。
なぜポインタ周りの仕様は複雑ですか?
0041デフォルトの名無しさんNGNG
>>40
デンパですか?
0042デフォルトの名無しさんNGNG
>>40
・・・・・・・
0043デフォルトの名無しさんNGNG
char型の配列でしょう?chinkoは。
int型の配列であれば、先頭だけしか表示されなかったはずです。
しかしchar型はcだけでなくchinkoまでちゃんと表示されるのです。

もう一度聞きます。
なぜポインタ周りの仕様は複雑ですか?
0044デフォルトの名無しさんNGNG
単に、
>printfするとちゃんとchinkoと表示されるのはなぜですか?
に答えればいいんじゃないすかね。皆さんがんばってください。
0045デフォルトの名無しさんNGNG
>>43
> しかしchar型はcだけでなくchinkoまでちゃんと表示されるのです。

cしか表示されません。なんででしょうか?
char *c="chinko";
printf("%c", *c);
0046デフォルトの名無しさんNGNG
s
0047デフォルトの名無しさんNGNG
>>39
ソースファイルと同じ場所に置いておけば、
#include "そのヘッダー.h"
で取り込める。

ソースファイルと同じ場所に置いておくことができない場合は、
#include "フルパスのそのヘッダー.h"
で取り込める。
0048デフォルトの名無しさんNGNG
>>39
多くのコンパイラにはオプショナルなヘッダファイルの場所を指定するための
コマンドラインオプションとして -I がある
0049279NGNG
発言しようと思ったけど叩かれそうなのでやめました。
0050デフォルトの名無しさんNGNG
>>49
叩かれて人は強くなる。どんどん発言しなさい。
0051デフォルトの名無しさんNGNG
>>40
関数にポインタを渡したとき、普通にポインタが渡されます。
関数に配列を渡したとき、その配列の最初の要素へのポインタが渡されます。
だから char c[]="chinko"; でも char *c="chinko"; でも、 printf("%s", c)
には結局 "chinko" の c へのポインタが渡されます。

一方 printf() では、"%s" が渡されると対応する引数をポインタとして受け取り、
'\0' を検出するまでそのアドレスからその次のアドレスへと、ひたすら次々に文字を
出力していくのです。

だから表示は c ではなく chinko になります。

ポインタ周りはあなたにとっては難しいのかも知れませんね。
printf() の動作もよく研究して下さい。
0052デフォルトの名無しさんNGNG
ポインタ周りはあなたにとっては難しいのかも知れませんね。
printf() の動作もよく研究して下さい。

>>43
「int型の配列であれば、先頭だけしか表示されなかったはずです」 とは、何を
表現したかったのでしょう。
int c[]="chinko"; ではエラーになりますし、int c[]={"chinko"}; でも c[0] に
"chinko" へのポインタが格納されます。
これは、おそらくあなたの意図した初期化ではないでしょう。

int c[]={'c','h','i','n','k','o','\0'}; なら c[] の要素要素ごとにそれぞれの
文字の値が入ります。
int の内部表現は少なくとも 16-bit が保証されていますから、c[0] == 0x0063 のよ
うになるでしょう。
しかし、この値がメモリ上に 00 63 と格納されるか 63 00 と格納されるかは処理系
依存です。
もし後者 (ビッグエンディアン) ならあなたの言う通り c だけが表示されますが、
もし前者 (リトルエンディアン) でかつ char が 8bit であれば、何も表示されない
可能性もあります。

ところで、char 型と言ってしまっているのは char 型の配列の事ですよね?
一方、char の配列やポインタは >>前 で述べた通り、'\0' が見つかるまで次々と
走査して行きますので、c だけで途切れることも無く chinko と表示されるのです。

なお、int 型の配列であれば絶対に chinko と表示されないような口ぶりですが、
int が 32bit、char が 8bit でリトルエンディアンの処理系の場合に、
int c[]={ 0x6E696863, 0x00006F6B }; printf("%s", c); は chinko を表示しますが
何か?
まあ、これは処理系依存の、ほんのお遊びですが、いずれにせよあなたの 「int型の配列
であれば、先頭だけしか表示されなかったはずです」 という仮定は成り立ちません。

ポインタ周りに加えて変数初期化周りも、あなたにとっては難しいのかも知れませんね。
0053デフォルトの名無しさんNGNG
>>45
あなたの試したコード printf("%c", *c); を見てみましょう。
まず *c は、c が指しているアドレスにある、char 型のデータを表します。つまりこの
場合、文字 c です。

一方 printf() では、"%c" が渡されると対応する引数を文字データとして受け取り、
その 1 文字だけを出力します。

だから表示は chinko ではなく c になります。

あなたも >>40 と同じく、ポインタ周りと printf() の動作を研究するべきです。
0054デフォルトの名無しさんNGNG
>>53
>>45はネタだろ。
0055デフォルトの名無しさんNGNG
>>54
メ(略
0056デフォルトの名無しさんNGNG
>>54
005751-53NGNG
すこし肩が凝ってしまいました・・・。
005854NGNG
正直、すまんかった。
005945NGNG
あはは。ネタにネタレスされちゃった。
でも
> しかし、この値がメモリ上に 00 63 と格納されるか 63 00 と格納されるかは処理系
> 依存です。
> もし後者 (ビッグエンディアン) ならあなたの言う通り c だけが表示されますが、
> もし前者 (リトルエンディアン) でかつ char が 8bit であれば、何も表示されない
> 可能性もあります。

ここまでネタ書かなくてもいいのにね。
006051-53NGNG
自分で改めて見返すと、そう秀逸でもない。
どっかにポロありそうだ。

>>59
まあネタだから許して。
0061デフォルトの名無しさんNGNG
カッコワリィ
006245NGNG
>>60
いや、あれだけの長文で「ツッコミどころがない」ような文章は
なかなか書けるものではない。正直、間違い探しに苦労しました。
0063デフォルトの名無しさんNGNG
ディスクファイルってなんですか?
高水準出力関数は、OSとの間にバッファを持ち、プログラムではこのバッファとの間で
データの入出力を行うイメージになります。このバッファはOSが管理し、自動的に
“ディスクファイル”とデータの入出力を行います。
という使われ方してんねんけど、ディスクファイルだけ意味わからん。
マルチになりますがお願いします。
0064デフォルトの名無しさんNGNG
63 マルチ放置
0065デフォルトの名無しさんNGNG
>>63
> マルチになりますがお願いします。
意味わかって言ってる?
006651-53NGNG
>>62
ツッコミどころと言うと、52 の頭 2 行が余計だとか、51 へのリンクを貼る
つもりが >>前 のままだったとか・・・
0067デフォルトの名無しさんNGNG
>>63
そのくらいぐぐれや
0068デフォルトの名無しさんNGNG
>>65
ええ、過去スレにも書きましたし、スレ立てるまでも…にも書いたんでマルチになるかと。
でも過去スレに書いたんはここが新スレって気がつかんかったんです。
スレ立てるまでも…には答えがないのでこっちに来たと言うことです。せっかちなんで。
006951-53NGNG
>>63
ここの 「マルチポスト 」 はお読みになりましたか?
http://www.geocities.co.jp/SiliconValley/5634/t82DC_0004.html#555
0070デフォルトの名無しさんNGNG
>>69
ここは2ちゃんねるですよ。
007151-53NGNG
ヽ(´ー`)ノ
0072デフォルトの名無しさんNGNG
>>70=>>68=>>63
どっちだ?
・ 調べ方が分からない
・ そもそも自分で調べるつもりは全く無い
0073デフォルトの名無しさんNGNG
70は俺じゃねー。いちおー調べてみたけど単語としてディスクファイルってでてるだけで
意味は書いてなかった。ここならさくっと答えてくれるかなと思ったんやけど
そんなに難解なことなんかな?
0074デフォルトの名無しさんNGNG
漏れらに難解なのはディスクファイルという用語ではなく、
73 が 69 の忠告を無視したり 72 の質問を無視したりする根拠だ。
第一、2 ちゃんねるをなんだと思ってる?

つーか難解だと思わないなら自分で調べてみれ。
0075デフォルトの名無しさんNGNG
>>73
ここは2ちゃんねるですよ。
0076デフォルトの名無しさんNGNG
c = (a < c++) ? y * c : c++;
このコードが未定義でないという理由がわからないので教えてください
0077デフォルトの名無しさんNGNG
>>74
2ちゃんねるはやりたいことを好き勝手やるとこに決まってんじゃん。
なにか疑問があったときに言葉巧みに答えを引き出したりするけどね。
0078デフォルトの名無しさんNGNG
>>77
> なにか疑問があったときに言葉巧みに答えを引き出したりするけどね。

なるほど。
> ここならさくっと答えてくれるかなと思ったんやけど
> そんなに難解なことなんかな?
これが「言葉巧み」に該当するわけね。
0079デフォルトの名無しさんNGNG
77 が哀れだ・・・
2 ちゃんねるは単なる媒体で、書き込みを行っているのは日本中 (世界中?) の
人間だ。
その面前で堂々と 「2ちゃんねるはやりたいことを好き勝手やるとこに決まってん
じゃん」 なんて言い放つとは・・・。
0080デフォルトの名無しさんNGNG
あーわかった、わかった。そんなに怒んなや、別に69の忠告は無視してないで、
今度から気をつけよーおもてるし、72の解答としては「調べてみたけど分からんかった」
ってことになるかとおもたんや。
0081デフォルトの名無しさんNGNG
ちょっとまて77は俺ちゃうぞ。
0082デフォルトの名無しさんNGNG
>>79
匿名掲示板で言ってるの?
0083デフォルトの名無しさんNGNG
>>76
それ、(a < c++) は問題無いけど、それが偽だった場合に
c = c++; と等価になるからまずくないか?
008482NGNG
「何」が抜けちゃったよ。
正しくは、匿名掲示板で何言ってるの? ね。
0085デフォルトの名無しさんNGNG
>>82
ある程度の好き勝手はいいけど、悪質が過ぎるならアクセス禁止食らうよ。
008685NGNG
>>82
あと、匿名なら相手のことは全く考えないで (・∀・)イイ!! とでも?
008773 ◆GRRPdDaVH. NGNG
>>74
とりあえず気を悪くしたんなら誤ります、すみませんでした。
0088デフォルトの名無しさんNGNG
アクセス禁止ってただ単に俺(と同じプロバイダの奴?)が2ちゃんねるに
アクセスできなくなるくらいだろ。
別に2ちゃんねるにアクセスできないなら出来ないで問題ないし。
どうしてもアクセスしたかったらプロバイダ変えればいいだけだし。
その程度じゃなんの問題も無いね。
0089デフォルトの名無しさんNGNG
>>83
持ってる本に (a < c++) のあとに副作用完了点があるから
問題ないとだけ書いてあるんです。で、自分も偽だったとき
まずいのではと思ったんです。
一応試しに a = 100 c = 1 で if (a < c++) c = y * c else c = c++;
をやると未定義ですが3になり、三項演算子のは2になりました。
0090デフォルトの名無しさんNGNG
>>86
そんなに言いたいなら俺以外の相手のことは全く考えてない奴全員に言ったら。
2ちゃんねるはそんな奴ばかりだから苦労するだろうね。
0091デフォルトの名無しさんNGNG
>>80
指摘されなきゃ反省のそぶりも見せないなら、そりゃあ怒るわさ。
でもすまん漏れもいい気になってた、確かに検索だとなかなか出てこないな。

しかし、ディスクファイルって文字通りディスクに格納されたファイルの事
なんだが、想像つかなかったか?
他に、メモリファイルとかあるわけだが。
検索で単語は引っかかったみたいだけど、それがどう使われているかで何と
なく感じ取れなかったか?
考えてね。

後、マルチポストがいけない理由はちゃんと理解した?
それは、あなたが恥をかくからじゃないよ。
より多くの人に迷惑というか手間をかけるから、しかもどこか 1 ヶ所で
答えが見つかったら他の探してた人の苦労が水の泡になるからだよ。
「スレ立てるまでも…」 の方では、ちゃんと質問を個のスレに写した事を
明記してきた?
0092デフォルトの名無しさんNGNG
>>91
ここは2ちゃんねるですよ。
0093デフォルトの名無しさんNGNG
88 って超迷惑野郎じゃないか?
009473 ◆GRRPdDaVH. NGNG
>>90
最低やな、匿名性が高いから言うてそんなこと言うとったら私生活で隠してても
いつかボロがでて痛い目みるやろ。
0095デフォルトの名無しさんNGNG
どうもこのスレに、63 をはるかに凌ぐ迷惑野郎がいるようだな。
0096デフォルトの名無しさんNGNG
>>91
いい人だな。俺だったらこんな奴には絶対答えたくない。
009791NGNG
>>96
91 の冒頭の通り、漏れにも落ち度があったからな。詫び。
でなかったらやっぱり答えないよ。
009873 ◆GRRPdDaVH. NGNG
>>91
レスくれてありがと。
なんとなくの予想はついてても、初心者やからちゃんとした知識身につけたいと
思ってて確証が欲しかった。
0099デフォルトの名無しさんNGNG
>>93
迷惑野郎ですよ。いや女かもしれないけどね。
2ちゃんねる以外でこんなことする奴は痛い目見るでしょうね。
私はしませんけど。

>>94
楽しみですね、その日が。まあ例えそうなってもあなたは私が痛い目を
見たことを知ることは無いでしょうが。匿名ってのは不便ですね。
010097NGNG
あと、どうも話が通じそうだったからな。
でなきゃ何書いても無駄だし。
0101デフォルトの名無しさんNGNG
>>88
わざわざそんなレスしないといけない程2ちゃんねるが重要なのか。。。
0102デフォルトの名無しさんNGNG
あれっ。もしかして俺のおかげで答えが得られたのかな? 俺っていい奴じゃん。
0103100 get したけどNGNG
99 には話が通じそうも無いな。
0104デフォルトの名無しさんNGNG
>>101
ん? 俺が面白いから書き込んでるだけだけど。
010589NGNG
雑談やめて、俺の質問が流されちゃったよ。
あんなコード書かないだろうから、そんなに切実でもないけど。
0106デフォルトの名無しさんNGNG
>>99
というより、匿名掲示版で暴れないといけないって時点ですでにかなり
痛い状態になっているような。
010773 ◆GRRPdDaVH. NGNG
>>99
いつかは分からなくても、お前がいつか痛い目見るだけでうれしいわ。
お前が自分の本性隠そうと必死に生きてる姿を想像するだけでもうれしいわ。
010883NGNG
>>105
悪い見失ってた。
そうだな、未定義かどうかわからない不気味なコードは書く事は無い。
0109デフォルトの名無しさんNGNG
>>105
ごめんね。雑談ってのは一人じゃ出来ないんだ。
全部相手が悪いんだよ。俺は悪くないよ。



別に俺が悪者扱いされようがここだけの話だし知ったことじゃないが。
011091NGNG
漏れは、2 ちゃんねるそのものはそんなに大事だと思わないが、ここに
集まってくる人はそれなりに応対しないとあかんと思う。
前にも出たけど、2 ちゃんねるは単なる媒体で、その向こう側は生の人間
なんだからな。
しかし、少しばかりその例外を作らないといけないようだ。
0111デフォルトの名無しさんNGNG
109 は匿名なので誰が謝っているか全くわからない罠
0112デフォルトの名無しさんNGNG
>>107
本性? 本性ってのは本来のすがたってだけで本性が悪いとは限らないんだよね。
ここでの姿が仮の姿で本性はいい奴だよ。すでに本性ばればれだけどね。
0113デフォルトの名無しさんNGNG
>>109
いえ、こっちこそすいませんでした。つい取り乱して。
0114デフォルトの名無しさんNGNG
112 は hiloshi
0115デフォルトの名無しさんNGNG
>>110
少しばかりの例外って何? 匿名性を低くするって事?
それには俺も賛成だ。2ちゃんねるはマナーが悪い奴が多すぎる。
俺の仮の姿みたいにな。もっと平和な所にしてほしいよ。
0116デフォルトの名無しさんNGNG
月曜日のこの時間に書き込んでるのは2〜3数人だろうから、、
さて、誰と誰が同一人物でしょう?
0117デフォルトの名無しさんNGNG
お前らいい人だな。でも常識のないアホは放置というか、
せいぜい心の中で憐れむくらいでいいんだよ。
相手にするのは時間の無駄。
0118デフォルトの名無しさんNGNG
>>116
70と75と77と82と84と88と90と92と99と102と109と112と115が俺
0119デフォルトの名無しさんNGNG
>>117
その通り。ここは2ちゃんねるだしな。
0120デフォルトの名無しさんNGNG
>>115
2ちゃんねるはもともと平和な所じゃなくて喧嘩上等な所。
012173 ◆GRRPdDaVH. NGNG
>>112
匿名性が高いとこで出てくるのが本性や、そんなんもわからんか?
それとも分裂症か?
0122110NGNG
>>115
いや、匿名性が多少下がってもそんなに意味無いのはメーリングリスト等で
実証済みだし。
完全実名制でもないと。
そうでなくて、人にはそれなりに誠意もって応対すべき、ただし一部の誰かさんは
きっぱり無視すべき、って事。

>>116
5 人はいただろ、1 人は去ったようだが。
ま、大差ないか。
ROM はもうちょっといるだろう。
0123デフォルトの名無しさんNGNG
>>115
2 ちゃんねるのどの規約にそんな事書いてあった?
たまに、ローカルルールで許可されている板はあるものの。
0124デフォルトの名無しさんNGNG
>>120
煽りと荒しは違う。
中には目的もなく煽ってるやつもいるが。
0125123NGNG
スマソ 120 宛て。
0126デフォルトの名無しさんNGNG
>>122
なんつーか農水大臣みたいなお人だ
0127122NGNG
>>126
そーなの?
0128デフォルトの名無しさんNGNG
>>123
規約以前にいろいろな板を見ていればわかるだろ。
規約がすべてで現状認識ができていないのでは。
0129デフォルトの名無しさんNGNG
>>119
( ´,_ゝ`)プッ
0130デフォルトの名無しさんNGNG
>>120
そうそう。だから喧嘩上等な場所通りの行動をしているまで。
でもいやだよ。本性は。

>>121
匿名性が高い所で出てくるのが本性ってことは
匿名性が低い所では本性じゃないのかな? あなたは。
匿名性が高いここで本性を出しているってことは、匿名性が低いリアルではどんな奴なんだか。
0131デフォルトの名無しさんNGNG
法律以前にいろいろな事件を見ていればわかるだろ。
法律がすべてで現状認識ができていないのでは。

( ´,_ゝ`)プッ
0132デフォルトの名無しさんNGNG
>>128
誤爆
0133デフォルトの名無しさんNGNG
>>130
これはあなたか?

99 :デフォルトの名無しさん :02/10/28 04:15
 >>93
 迷惑野郎ですよ。いや女かもしれないけどね。
 2ちゃんねる以外でこんなことする奴は痛い目見るでしょうね。
 私はしませんけど。
0134デフォルトの名無しさんNGNG
128 はモラルが無いんだねえ・・・
131 の比喩を見ればよくわかるよ。
0135デフォルトの名無しさんNGNG
いいからお前ら一部のアホは放置しとけよ。
なんでわざわざ煽りに反応してやるんだ?

ここはCの話題を扱うスレだぞ。
0136デフォルトの名無しさんNGNG
まぁ、あれだ。
匿名性が高い状態でチンポ出すやつもいれば、親の前でチンポ出すやつもいるってことだ。
0137デフォルトの名無しさんNGNG
モラルなど煮ても焼いても食えないものは捨ててしまえ
013873 ◆GRRPdDaVH. NGNG
>>117
いや、そんなことは無いぞ。確実にいやな気分になるかムカついてるはずや、
根拠は
>>本性? 本性ってのは本来のすがたってだけで本性が悪いとは限らないんだよね。
>>ここでの姿が仮の姿で本性はいい奴だよ。すでに本性ばればれだけどね。
ここに書き込んでるのは仮の姿でほんまの自分じゃないって言っとる。
つまり、仮の姿の自分が虐められててほんまの自分は虐められてないってことにしとる。
何でそうせなあかんか?それはほんまの自分が傷つくからやろ。
そうやって仮の姿に現実逃避してても無駄やぞ、さっきも言うたけど今のお前がほんまのお前。
自分で気がついてないだけや


0139デフォルトの名無しさんNGNG
つーかね。ひろゆきだっけ? 2ちゃんねるの管理人。嵐とか偽の情報とか
そんなのをちゃんと管理するなら俺も悪者ぶったりしないって。
疲れたので消えるよ。いや逃げるよ。いい暇つぶしになった。
今までお付き合いくださってありがとうございます。
0140デフォルトの名無しさんNGNG
だいだい何故スレ違いが延々と続いているんだ?

CスレならCスレらしくしろ。
0141デフォルトの名無しさんNGNG
136 がいい事言った。
134 や 138 もそろそろ放置にしてくれ。
0142デフォルトの名無しさんNGNG
>>138
お前も頼むからもう書きこまないでくれ。冷静になってくれ。
マルチな質問を親切な住人に答えてもらったこのスレを
いつまで荒らす気だ?
0143デフォルトの名無しさんNGNG
>>139
スレ違いの話を延々と引っ張って己を正当化して逃げる貴方、ステキです
0144デフォルトの名無しさんNGNG
>>143
つっついてみたい気持ちはわかるが、140 とかの気持ちも考えてやれ。
014573 ◆GRRPdDaVH. NGNG
>>142
それ言われたら弱いな。最後にあんたに謝辞させてくれ。
0146デフォルトの名無しさんNGNG
じゃ、誰かお口直しにCのネタきぼーん
といきたいところだが、今日はもう眠いので寝るか
0147デフォルトの名無しさんNGNG
未解決の >>76 なんかどうよ?
0148デフォルトの名無しさんNGNG
( ゚д゚) ポカーン
0149デフォルトの名無しさんNGNG
strchr(const char *str, int c)の実装について
c=(char)c;が何故必要?->c&=0xffではダメ?->ビット切り取りだと問題が出る事がある。
(char = signed char,int = signed intな環境と仮定)
int c = 0xFFFFFFB1を渡す時
cの上位ビットを切り取ると0x000000B1---------------------[A]
文字列中の文字*strのint昇格後取りうる値0xFFFFFF80-0x0000007F
(charはint型に昇格されて比較される,その際「符号は保持」する。)
マッチする筈の元のiの値0xFFFFFFB1がstrに入っていても[A]の為にはじかれる。
以上の理由でビット切り取りではダメ。
->しかし上記の論は「c=(char)cが必要である事の理由」では無い。
->ではchar,intをsigned,unsignedの各場合について分けて考えてみる。

変換前のint cと変換後(c=(char)c;を行った後)のc(混同を防ぐためc'とする) 比較
signed char,signed intな環境:∀c,-127<c<128でc'=cとなる
unsigned char, unsigned intな環境:∀c,0=<c<256でc'=cとなる
signed char,unsigned intな環境:0=<c<128はc'=c,128=<c<256ではc'が大きな値になる。
unsigned char, signed intな環境:∀c,0=<c<256でc'=cとなる

signed char,unsigned intな環境でかつ、128=<c<256な場合,cとc'に違いがある訳だが
この時c=(char)cがある場合と無い場合ではどのようになるか考えてみる。
無い場合: cは128=<c<256の値をとる。比較時でも当然128=<c<256の値,
    一方*strはchar(signed char)であり整数への拡大が適用される。
    この時-127=<*str<0なる*strは非常に大きな正の値に変換される為
    c=*strであった筈の値でも合致しない事となる。
有る場合: 128=<c<256なるcはc=(char)cで非常に大きな正の値に変換される。
    比較において意図した結果が得られる.
    (変換前のint c(128=<c<256)に対応する*str(-127<=*str<0)中の値)
よってc=(char)c;はchar=signed char,int=unsigned intな環境で128=<c<256 なcの値の時必要。
0150デフォルトの名無しさんNGNG
> int=unsigned intな環境

はあ?ネタでつか?
0151デフォルトの名無しさんNGNG
char以外はみんなデフォルトでsignedと決まっているね。
0152デフォルトの名無しさんNGNG
>>149
全く的はずれ。
charがsignedかunsignedかは処理系依存だが、intはsignedであることが保証されてる。
さらに、intは最低でも16bitだがそれを全く考慮してない。
まあ、そんなことはどうでも良くて・・・なんだこりゃ!
前スレもう一回読んで見ろ。
それと壮大なネタか?
0153デフォルトの名無しさんNGNG
シフトで、signedなら算術シフトにunsignedなら論理シフトになると規格で決めてほしかった・・・
あれって処理系依存なんだよな〜

Cで確実に算術シフト(または論理シフト)をする方法ってあります?
0154デフォルトの名無しさんNGNG
確かにイタいな。というか単なる符号拡張の話を
よくもこんなにゴチャゴチャと書けるな。
0155デフォルトの名無しさんNGNG
>>153
確実に論理シフトしたいのなら、最初っからunsignedでやればいい。
だが、算術シフトは、移植性のある方法ってあるんだろうか。
0156デフォルトの名無しさんNGNG
>>155
unsignedなら論理シフトになるというのは規格では決まっていないはず・・・
0157デフォルトの名無しさんNGNG
>>156
unsignedなら必然的に論理シフトになると思うのだが・・・
0158デフォルトの名無しさんNGNG
>>157
漏れもそう思う。
0159デフォルトの名無しさんNGNG
算術シフトは加減乗除でなんとかしる!
0160デフォルトの名無しさんNGNG
>>149
> c&=0xffではダメ?->ビット切り取りだと問題が出る事がある。

比較の両辺とも処理すれば問題なし。
0161デフォルトの名無しさんNGNG
signedを論理シフトしたいなら、単にキャストすればいいだけでないの?
int n = -1;
n = (unsigned)n >> 1;

なんかはずしてる?
0162デフォルトの名無しさんNGNG
>>161
合ってるけどそれは155の言ってることに含まれてるはず。
0163デフォルトの名無しさんNGNG
printf("signed char\n");
printf("int c(-1); %x\n", -1);
printf("c(変換後); %x\n", (signed char)-1);
printf("int c(0xff); %x\n", 0xff);
printf("c(変換後); %x\n", (signed char)0xff);
printf("*str(元の値): ff\n");
printf("*str(比較時): %x\n", (int)-1);
printf("unsigned char\n");
printf("int c(-1); %x\n", -1);
printf("c(変換後); %x\n", (unsigned char)-1);
printf("int c(0xff); %x\n", 0xff);
printf("c(変換後); %x\n", (unsigned char)0xff);
printf("*str(元の値): %x\n", 0xff);
printf("*str(比較時): %x\n", (int)0xff);
一旦charとして妥当な値に直してやってそれをまた比較の為符号拡張するのか。
なんとか分かった。
0164デフォルトの名無しさんNGNG
argc/argvの処理って普通はどんな風に書くものなのでしょうか。
書籍ではargcの数を数えることしかしてないし。
getopt()はなんか機能不足な気もしますし。

フリーソフトウェアのソースを読むほどの技量がないので
どなたかごきょうじゅくだはい
0165デフォルトの名無しさんNGNG
記念ぱぴぽ
0166デフォルトの名無しさんNGNG
argc は引数の数をチェックする為に使う。
argv は引数を取得する為に使う。

テキストファイルをコピーするプログラム fcopy.c について考えると、
Usage: fcopy "input filepath" "output filepath"
として、
/* fcopy.c */
#include <stdio.h>
int main(int argc, char *argv[])
{
  FILE *fin, *fout;
  /* argc を利用した引数の数をチェックする */
  if (argc != 3) {
    fprintf(stderr, "引数が足りません\n");
    return 1;
  }
  /* argv で任意のファイル名を使ってファイルオープン */
  fin = fopen(argv[1], "r");
  fout = fopen(argv[2], "w");
  /* ファイルコピー処理 */
  fclose(fin);
  fclose(fout);
  return 0;
}
argc, argv は、こんな感じで使います。
0167166NGNG
>>164に対してのレスね。ごめん
0168デフォルトの名無しさんNGNG
>>164
自分で面倒見るのならこうやってやるかなあ。
プログラムの機能によって全然変わっちゃうけど、いつもはこうしてる。
つうかいつもはunix前提なんでgetopt使っちゃうけど(w
argvをいじっちゃうのであまりよくないスタイルではある。
int main(int argc, char **argv)
{
 while (*++argv) {
  if (*argv[0] == '-') { /* スイッチの処理 */
   char *p;
   for (p = *argv + 1; *p; p++) {
    switch(*p) {
    case 'a':
     :
    }
   }
  }
  else { /* ファイルの処理 */
   :
  }
  :
}
ただこれだと'-'で始まるファイル名は扱えない。
0169164NGNG
レスありがとう。参考になります。

なかなか穴の無い処理が書けなくて
悩んでたんですが、ある程度
端折っちゃって大丈夫ですよね。
考えすぎでしたスマソ
0170デフォルトの名無しさんNGNG
今本読んでたら、

「Cでは配列の後に[]をつけずに、配列名だけ単独で書くと
配列の先頭要素へのポインタとみなす」
っていうのは間違いだ( ゚Д゚)ゴルァ!

って書いてたんだけど、ほんとうですか?
0171アフォ ◆Ez1ZxZMJoU NGNG
こういう事?
char data[300];
char *p = data; // OK
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(data)); // NG
0172配列とポインタNGNG
質問です。

typedef struct
{
  double *base;
  …
}matrix;

matrix A;

このAに
double a[4][4]={
 {0.0,0.0,1.0,0.0},
 …
};

と定数で宣言した配列の先頭アドレスを
A.base = (double *)a;

と突っ込んでいるんですが、ここでプログラムが落ちてしまいます
(コンパイルエラーはないです)
ポインタ宣言したAに直接、配列の定数を突っ込みたいのですが、
それが分からなかったので、こんな方法をやってます。
( *(A.base+0+0) = 1.0; とか突っ込むのも考えたんですが)
元のプログラムがMS-DOSのTurboC++で書かれていて(ある本のプログラム)
それをWin+BC++5.02J上でやりたいんです。
何が間違いでしょうか。
0173配列とポインタNGNG
質問はageみたいですね・・・
ということでage
0174デフォルトの名無しさんNGNG
C++の質問は余所でおながいします。
0175デフォルトの名無しさんNGNG
>>174
C++じゃないよ。
0176デフォルトの名無しさんNGNG
>>172
別に落ちないよ。BCC5.5.1だけど。
0177デフォルトの名無しさんNGNG
みなさんは配列を扱うときにポインタ演算子を使ってますか?
それとも添え字演算子を使ってますか?
0178デフォルトの名無しさんNGNG
>>174
Cの範囲だろ。

>>172
gccでやってみたけど特に問題は起きなかったよ。
typedef struct 
{ 
  double *base; 
}matrix; 

matrix A; 

double a[4][4]={ 
  {0.0,0.0,1.0,0.0}, 
  {0.0,0.0,1.0,0.0}, 
  {0.0,0.0,1.0,0.0}, 
  {0.0,0.0,1.0,0.0}, 
}; 

int main(int argc, char * argv[])
{
  A.base = (double *)a; /* ここ */
  return 0;
}

本当に「ここ」の部分でエラー起きてる? どうやってそこだと特定したんだろう。
0179デフォルトの名無しさんNGNG
すまそ、質問です。

fgets(a,b,c)は
a=入力する文字列
b=文字列の長さ
c=入力場所
でいいんですか?
あとsscanf(a,b,c)は
それぞれどんな仮引数なんでつか?
0180配列とポインタNGNG
>>176
本当っすか?!
なんで自分の環境では落ちるのかな・・・。
値は上手くわたっているみたいなんですが。
0181デフォルトの名無しさんNGNG
#include "windows.c"
ってなんじゃらほい?
0182配列とポインタNGNG
>>178
ありがとうございます。
えっと、return 0; の前にgetch()をおいて
DOSプロンプトが自動的に閉じるのを防いで、
その後に
//A.base = (double *)a;
とすると他の行列はきちんと表示して自分の思い通りになるので・・・。
0183デフォルトの名無しさんNGNG
>>179
自分で調べる癖を付けましょう
http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp
0184デフォルトの名無しさんNGNG
MSDOSプロンプトで、プログラムを実行したときに
全画面をクリアしてから実行するようにするには
どうしたらいいんですか?
0185デフォルトの名無しさんNGNG
>>184
system("cls");
0186178NGNG
>>182
なるほど。178で書いたコードでは特に問題になるところはないと思う。
他に色々やってるようなので、どこか別のところで変数を壊すなりしてないか?
配列で確保した以上のところに書いているとかその辺。
0187デフォルトの名無しさんNGNG
>>172
> A.base = (double *)a; /* ここ */
変なキャストを行っているから

> typedef struct
> {
> double *base;
  double (*base)[4];
> }matrix;

> A.base = (double *)a; /* ここ */
  A.base = a;
こうしてみろ

>>186
> なるほど。178で書いたコードでは特に問題になるところはないと思う。
おいおい、問題ありまくりの糞ソースが「たまたま」動いたから
問題ないというのは非常に疑問だぞ。
0188デフォルトの名無しさんNGNG
>>187
それは気づいていたけど、代入しただけで落ちるというから、別の理由が
あるんじゃないかと思っている。
0189配列とポインタNGNG
>>186 = >>178
>別のところで変数を壊すなりしてないか?
問題の処理の前後でメモリの配置・開放(行列式に適用したmallocのようなもの(?))
があるくらいで、>>178で書いていただいたコードとほとんど一緒です。

もっと詳しくプログラムを追ってみたほうが良さそうですね・・・。
ありがとうございました。
0190デフォルトの名無しさんNGNG
超初心者なんですが。
Cywinをダウンロードしてインストールもしたんですが
このあとどうすればいいんですか?
英語のサイトばっかで訳がわかりません
0191デフォルトの名無しさんNGNG
>>188
> 代入しただけで落ちる
いいえ、現在の情報では、「代入をコメントにしたら落ちる」です。
どの箇所で落ちたのかは不明です。
おそらく、代入した部分ではなく、表示や計算の部分で落ちている
可能性が高いと思われます。
0192デフォルトの名無しさんNGNG
>>189
>>(行列式に適用したmallocのようなもの(?))
それだ!そこで確保した領域を破壊しているか。
freeすべき場所が書き換えられている。

A.base = &a[0][0]
でいいだろ。
0193デフォルトの名無しさんNGNG
>いいえ、現在の情報では、「代入をコメントにしたら落ちる」です。
・・・・・・・
もしかして初期化してないポインタを使っているとか、そういうオチは
ないよな?
0194配列とポインタNGNG
>>187
ありがとうございます。

キャストをしたのはコンパイラに怒られて、
この方法しか思いつかなかったので・・・。

ご指摘の通りにやってみましたが、やはりエラーログを吐いてしまいます。
(win2kの調子がおかしいんでしょうか・・・)
あと
>double (*base)[4];
なんですが、この場合のみならOKなんですが、
他の行列1*4や3*3の行列でも使用しますので、これだと少し都合が・・・。
(#defineなどで指定するのも都合が悪いです・・・)
0195デフォルトの名無しさんNGNG
>>190
ほれ
http://www.mars.dti.ne.jp/~sohda/cygwin/setup.html
ただし、
> (9)ダウンロードするパッケージを選択します。
では全部defaultにしてしまうと、gccなとのコンパイラは
インストールされないので、Devel配下にあるgcc, gdb, make
ぐらいはインストールしといた方がいい。
容量に余裕があるならDevelを全部インストールする方法もある。
0196配列とポインタNGNG
>>191
わかりづらくてすいません。
「代入したら落ちる(エラーログを吐く)」です。
コメントすると普通に動きます。
0197配列とポインタNGNG
すいません、ちょっと席をはずします。(22時過ぎまで)

明日、別の環境で試してみます。
皆さん、ありがとうございました。
0198デフォルトの名無しさんNGNG
>>189
> 問題の処理の前後でメモリの配置・開放(行列式に適用したmallocのようなもの(?))
俺の経験と勘によるとそこが非常に怪しいのだが...そこは大丈夫なのか?
0199デフォルトの名無しさんNGNG
>>194
サンクス!
インストール成功しました!
環境変数変えたりとかはいいんでつか?
0200デフォルトの名無しさんNGNG
200げっと
0201デフォルトの名無しさんNGNG
>>199
> 環境変数変えたりとかはいいんでつか?
そのページの下のリンクをよく見てみろ
Cygwin 環境の構築
http://www.mars.dti.ne.jp/~sohda/cygwin/setenv.html
環境変数を設定して.bashrcを書けば一応終了

Cygwinを起動してgccと打ってみて
gcc: no input files
と出るとインストール成功、hello,worldでも作ってろ
bash: gcc: command not found
とか出るとインストール失敗、インストールからやり直せ
0202デフォルトの名無しさんNGNG
これって Windowsでも?

http://rec.ncos.co.jp/cgi-bin/errorfrmC.cgi?161

0203193→一休さんNGNG
Ikanji1st()に、ついて質問したいことがあります。
ソースを、二つに分けて出力したいと思います。
 int Iskanji1st(int c)
{
unsigned char uch=c;

if(uch>=0x81&&uch<=0x9f||uch>=0xe0&&0xfc)
return 1;
else
return 0;
}
0204193→一休さんNGNG
main()
{
int n;

while((n=getchar())!=EOF){
if(Iskanji1st(n)){

if(isalnum(n=getchar()))
putchar('?');
else
putchar('*');
continue;
}
else if(isalnum(n))
putchar(n);
else
;
}
return 0;
}
0205デフォルトの名無しさんNGNG
>>203-204
どうでもいいが、こんな汚いコード書くな。
0206193→一休さんNGNG
int getchar(void)関数は、unsinged char→intに変換します。
 その際、位置インジゲータとエラーインジゲータを返すとある。
  この手のソースの中によくからんでくるのが。
   getchar();だけで、読み飛ばしとか何かgetchar関数の細かい
 操作がしてある。(while((n=getchar())!=EOF){}の中で)
 こういったEOFを使ったループの使い方がいまいち把握できない。
  ループ内で、getchar();とn=getchar();の違いなんですか!?
0207デフォルトの名無しさんNGNG
c++の質問をお願いします

0〜99の数字を1秒間隔で表示。1〜9で改行、表示する
こんな感じです

1 2 3 4 5 6 7 8 9
10 11 12〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜99

これのプログラムを教えてください
よろしくお願いします
0208デフォルトの名無しさんNGNG
>>207
すれ違いだし環境書いてないし日本語がちょっと変。
0209デフォルトの名無しさんNGNG
>>207
> c++の質問をお願いします
ここはCスレ、以下の場所に逝ってくれ。
C++相談室 part12
http://pc3.2ch.net/test/read.cgi/tech/1035005882/
0210デフォルトの名無しさんNGNG
すまん
0211デフォルトの名無しさんNGNG
>>202
結論から言うと「状況による」です。
Linuxの場合、逆に速くなる場合もあるそうです。
# fjの「WORDは遅い、int の6倍遅い?」で
# 彼の勇姿をなま暖かく見守っていた一人
0212デフォルトの名無しさんNGNG
>>208
Cの標準関数だけでもできないわけじゃないけどな・・・
ビジーループ使うから効率悪いけど。
0213デフォルトの名無しさんNGNG
tabeみたいなキチガイにネットを使わせちゃまずいでしょ。
彼の保護者はなにやってるの?
0214デフォルトの名無しさんNGNG
scanfの返却値って改行を含めない入力文字個数なんでつか?
0215デフォルトの名無しさんNGNG
>>51-53
非常に丁寧かつ長文のレスありがとうございました。
特にprintfに関する説明には感謝しております。

確かに私にとってポインタ周りの仕様は複雑に
思えます。
また勉強し直し、髭をそり直しそして出直して参ります。

ギャフン
0216デフォルトの名無しさんNGNG
Cで点は描けますか?
Win32API使うとしたら出来ますか?
0217デフォルトの名無しさんNGNG
>>216
>Win32API使うとしたら出来ますか?

できます。
0218デフォルトの名無しさんNGNG
>>216
> Cで点は描けますか?
printf("."); printf("点");

> Win32API使うとしたら出来ますか?
うん。
Win32API 質問箱 Build6
http://pc3.2ch.net/test/read.cgi/tech/1032548635/l30
0219デフォルトの名無しさんNGNG
もうFAQだね
0220rubyist@カラアゲうまうまNGNG
FLASHによるC言語講座
http://www.geocities.co.jp/Milano-Killer/8183/swf/wori.swf
0221デフォルトの名無しさんNGNG
>>220
スレ違いです。
0222デフォルトの名無しさんNGNG
>>207 はマルチだから放置。
0223デフォルトの名無しさんNGNG
>>214
リファレンスとかヘルプとか参考書とか読め。
scanf() の戻り値は、正常に値を入力できた変数の数。
何文字入力したかは関係無い。
0224配列とポインタNGNG
さっきの続きで、皆さんの知恵をお貸しください。
>>198さんの仰るようにメモリ周りが怪しいので
その部分をいろいろいじってみたんですが、エラーログを吐きます。
関係する部分を以下に・・・

typedef struct
{
/* double base;*/
 double *base;
 unsigned row;
 unsigned col;
 unsigned temp;
}matrix;

/* main */
...
 matalloc(&A,4,4); /* メモリ取得 */
...
 A.base = &a[0][0]; /* 代入 */
...
 mfree(&A);
0225配列とポインタNGNG
/* 怪しい関数 */
void matalloc(a,row,col)
matrix *a;
unsigned row,col;
{
 /* char *malloc();*/
 char *p;
 unsigned i;
 p=malloc(row*col*sizeof(double));
 /* (char *) でキャストすべきっすか?*/

 if(p==0){
  printf("\n メモリ不足");
  exit(0);
 }
 a->base=(double *)p; a->row=row;
 a->col=col; a->temp=0;
 for(i=0;i<row*col;i++) *(a->base+i)=0.0;
}

以上、よろしくお願いします。
0226デフォルトの名無しさんNGNG
>>225
mfree()関数内で
free( a->base );
とかしてない?
0227デフォルトの名無しさんNGNG
mfreeもぁゃιぃ。

>A.base = &a[0][0];
ここでメモリリークしている
0228デフォルトの名無しさんNGNG
なんでdoubleをいちいちメモリ確保するわけ?
(つかなんでポインタなの?)
0229デフォルトの名無しさんNGNG
禿しく何も見ずにレスしてた。
0230配列とポインタNGNG
レスありがとうございます。

>>226
void mfree(a)
matrix *a;
{
 if(a->temp) abort();
 free((char *)a->base); /* たしかにしてますね・・・ */
}

>>227
>A.base = &a[0][0];
あれ?上の方でこうしる・・といわれたような。
A.base = &a;
で良いですか?

>>228
えっとですね、参考にしている本が行列計算をポインタ中心で
やっているので、その行列計算(関数?)に合わせたいんです。
合わせると言っても引数のタイプを合わせるだけなんですが・・・。

main関数以外は本のプログラムのままなので、なんとも言えないのが実情です。。。
0231デフォルトの名無しさんNGNG
>>320
その参考書が怪しくねーか?
駄本も多いから気をつけろ。
0232デフォルトの名無しさんNGNG
処理を並べてみろ

matirx A;
A->p=malloc(row*col*sizeof(double));
A->p = &a[0][0];
free(A->p);

明らかにおかしいだろが
0233デフォルトの名無しさんNGNG
freeしてる時点でbaseのアドレスは(以下略
0234デフォルトの名無しさんNGNG
おかしいのは漏れだ。吊ってくる、、

 ∧||∧
(  ⌒ ヽ
 ∪ 。ノ 
  ∪∪
0235デフォルトの名無しさんNGNG
s/A->p/A->base/g ってことね
0236デフォルトの名無しさんNGNG
>>224
 matalloc(&A,4,4); /* メモリ取得 */
...
 A.base = &a[0][0]; /* 代入 */
...
 mfree(&A);

って領域確保とポインタ(アドレス)と実体とゴッチャになってるから
/*代入*/で間違っている。アドレスを代入するのではなくポインタが指し示す
メモリ上に値を埋めていく作業が必要。
0237デフォルトの名無しさんNGNG
または、mallocもfreeも必要無い。
今度はグローバル変数である事で何か問題が
起こる可能性もあるが。
0238配列とポインタNGNG
皆さん、どうもありがとうございます。

>>236さんの
>メモリ上に値を埋めていく作業が必要。
というのが決め手で、分かりました。
自分では領域確保してアドレスを渡せば間接参照(?)されるかと思ってました。

 for(i=0;i<M;i++){
  for(j=0;j<N;j++){
   *(A.base+i*N+j) = a[i][j];
  }
 }

こんな感じで作ったらうまく渡すことができました。
ありがとうございました。
0239配列とポインタNGNG
すいません、まだ済んでませんでした。
mfreeのコメントをはずすのを忘れてました。
(mfreeが怪しいといわれたのでコメントをしてました。)

で、(一度コメントしてmakeした後に)mfreeのコメントをはずしたら
エラーログを吐き出されました・・。

mfree(free)せずに処理系に任せるのは・・・まずいっすよね・・・。
この場合、どのように対処したら良いのでしょうか。
0240デフォルトの名無しさんNGNG
>>239
a->temp
が 0 のままじゃない?
0241デフォルトの名無しさんNGNG
>>239
対症療法でやるなって。
ちゃんとポインタとかを理解して、コード組めよ。
0242デフォルトの名無しさんNGNG
ポインターアドレスを取得して、メモリーを確保して、
アドレスのコピーを取って、使って、
使って居ないもとのアドレスを指している方をフリー
0243デフォルトの名無しさんNGNG
>>239
> A.base = &a[0][0];

この代入がまだ残ってるとか。
ちゃんと削除した?
0244配列とポインタNGNG
>>240
a->tempは0のままで良いようです。
"保存用"なら0、"作業用"なら1のフラグを立てるところのようで、
今、Aには保存用のデータを収納したいので。
(abort()は飛ばされていることを確認しました)

>>241
ポインタ(配列)を100%理解はしていませんが、今は対症療法(打って覚える)を
実践しようと思ってやってるので・・・。
(理解が足りていないのは百も承知でやってます)

>>243
言われて削除したんですが、変わらずでした。

で、現在、>>242さんのご意見を頭の中で整理しています。
やはり、理解が足りないようです。出直してきます。
皆さん、ありがとうございました。
0245デフォルトの名無しさんNGNG
>>244
まず、いわゆる二次元以上の配列は初心者にはかなり理解が厳しいと思う。

やるのなら、matrixを操作する関数群を作るといいと思う。

matrixを確保、開放する関数、row、colを指定して値を設定する関数、
同様に取り出す関数、比較する関数、複製する関数など。

確保する関数はrowとcolを指定して、matrixのポインタを返すようにして、
残りの関数はmatrixのポインタと必要なパラメータを受け取るようにすれば
いいんじゃないかな。
0246配列とポインタNGNG
>>245
ご意見、ありがとうございます。
そうですね。matrixに関しての関数をもう一度、自分で作成するか
手元にある怪しい関数を一から見直す必要があるようです。
( >row、colを指定して値を設定する関数 は今作ってみました。 )

勉強と思って一から作成してみます。
では、これにて。。。
0247デフォルトの名無しさんNGNG
お前ら!! どうよ?
0248デフォルトの名無しさんNGNG
Visual C++6でC言語のコンパイルってどうやればできる?
0249デフォルトの名無しさんNGNG
>>248
スレ違い。
http://pc3.2ch.net/test/read.cgi/tech/1030985362/l50
http://pc3.2ch.net/test/read.cgi/tech/1022499000/l50
0250デフォルトの名無しさんNGNG
QUAJPG.exeってプログラム知ってますか?
↑非可逆圧縮のプログラムね
知ってたらソースファイル教えてください

スレ違いだったらすまん。
0251デフォルトの名無しさんNGNG
>>249
さんきゅです
0252デフォルトの名無しさんNGNG
>>250
スレちがい。
作者のサイトで公開されてなかったらあきらめろよ。
0253デフォルトの名無しさんNGNG
8 桁の整数を入力として受け付けて、それぞれの桁を配列の要素として格納する。繰り
返しを使って実現せよ。ただし配列名をdata とすると、1 の位がdata[0]に、10 の位
がdata[1]に格納されるものとする。最後に配列の全要素を出力せよ。
例: 38459341 が入力された場合
配列には{1,4,3,9,5,4,8,3}が格納される
0254デフォルトの名無しさんNGNG
>>253
それが人に教えを請う態度かよ。
つか、宿題は自分でやれや。
0255ぉ ◆Ez1ZxZMJoU NGNG
char data[9];
sprintf(data, "%d", N);
for(i = 0; i < 4; ++ i) {
c = data[i]; data[i] = data[7-i]; data[7-i] = c;
}
0256デフォルトの名無しさんNGNG
>>253perl -e '@data=split(//,<STDIN>);foreach(@data){print;}'
0257デフォルトの名無しさんNGNG
>>254
「問題の掲載ご苦労様でした。」 とでも言っとけ。
0258デフォルトの名無しさんNGNG
char *p;
p="abc";
p="abcd";
p="abcde";

上でstrlenとやるとそれぞれ3,4,5になるのに、sizeofだと最初の4のままなのはどうして?
0259デフォルトの名無しさんNGNG
>>258
ポインタの大きさと、文字列の大きさの違いについて調べてきなさい。
理解するまで、このスレにカキコ禁止。
0260デフォルトの名無しさんNGNG
>>258
1 のリンクにある C FAQ を通読してくれ。
0261258NGNG
>>259
ポインタの大きさは32ビットコンパイラの場合4バイトってこと?
ポインタにsizeofすれば文字列+\0の大きさが返ってくるものとばっかりおもってました。
0262260NGNG
>>261
だから、まず 1 のリンクにある C FAQ を通読してくれ。
ちなみに、ポインタの大きさはコンパイラが何ビットかとは直接関係無い。
たまたま一致する事もあるが、規格では規定されていないので思い込んではいけない。
0263配列とポインタ NGNG
それらしい動きになったので、一応報告です。
>>242さんに言われたことを整理して
matalloc内の
p=malloc(row*col*sizeof(double))
このpをreturnで戻してmain関数内で(char *)型のchaaで受け取って
free(chaa)としたらエラー無しで終了できました。
>>242 "使って居ないもとのアドレスを指している方をフリー"
が重要だったようです。

皆さん、ありがとうございました。
(もっと勉強が必要だと感じました。。)
0264258NGNG
>>260の書き込みを見たのは>>261を書き込んでからでしてはい。
C FAQ読んできます
0265デフォルトの名無しさんNGNG
すいません、質問です。
int型だけで、1兆+1兆=?
みたいな計算をどうやるかっていう問題で、
多倍長演算使うってとこまではわかったんですが、
多倍長演算ってのが何かわかりません。
誰か教えてください。

0266デフォルトの名無しさんNGNG
>>265
そこまで分かったのなら、とりあえず検索して見れ。
0267デフォルトの名無しさんNGNG
>>265配列を使う。 int i[];専用の加減乗除関数を作成。ex.add(int i[], int j[], int val[])
0268デフォルトの名無しさんNGNG
>>265
http://www.google.co.jp/search?q=%E5%A4%9A%E5%80%8D%E9%95%B7

100進4桁にするといいよ。
0269デフォルトの名無しさんNGNG
stdinから受け取った内容をstdoutに出して、他のプログラムにバイパスする処理を作りたいのですが 巧くいきません、教えてください、おながいします
# out | in のイメージで

/* out.c */
#include <stdio.h>
int main(void) {
char buff[128];

memset(buff, '\0', sizeof(buff));
while (fgets(buff, sizeof(buff), stdin) != NULL) {
fputs(buff, stdout);
memset(buff, '\0', sizeof(buff));
}
return system("./in");
}

/* in.c */
#include <stdio.h>
int main(void) {
char buff[128];
FILE *fp=NULL;

fp = fopen("./hoge.txt", "wb");
memset(buff, '\0', sizeof(buff));
while (fgets(buff, sizeof(buff), stdin) != NULL) {
fputs(buff, fp);
memset(buff, '\0', sizeof(buff));
}
return 0;
}
0270デフォルトの名無しさんNGNG
なんでpipeつかわへんの?
なんでreturn system("./in")なん?
0271269NGNG
>270

pipe ってのがあるんですか・・・(´・ω・`)
そのものズバリな予感。

調べてみます
0272デフォルトの名無しさんNGNG
代理クラスって何か教えてください。
ネットで探しても見つからないんで
0273デフォルトの名無しさんNGNG
>>272
プロキシークラスでぐぐれ。
0274デフォルトの名無しさんNGNG
C:\デスクトップ\20021025\20021025.c(21) : warning C4005: 'MAX_THETA' : マクロが再定義されました。
という警告がたまにでるのですが、いいのでしょうか?
0275269NGNG
popen() で、バイパス自体は巧くいきました。

ただ、この場合呼び出し先のリターンコードって取得できるんでしょうか?
0276デフォルトの名無しさんNGNG
man pclose
0277ゆみこNGNG
ここで宿題やってもらうのっていいんですか?
0278デフォルトの名無しさんNGNG
>>277
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0279デフォルトの名無しさんNGNG
>>277
土建屋のゼネコンのような丸投げ君は禁止しています。
# 昔の1には書いてあったのだが...今は無いな。

自分でやってみてわからないところを質問するのは構いません。
0280ゆみこNGNG
わかりました。今度お願いします。
0281デフォルトの名無しさんNGNG
#include <stdio.h>

struct hoge {
 char a[4];
 long b;
 short c;
};

int main(void)
{
 printf("%d\n", sizeof(struct hoge));
 return 0;
}
↑のようなコードで、12 と結果が出ます。
sizeof(long)は4で、sizeof(short)は2です。
何故、構造体hogeのサイズが10にならんのですか?
0282デフォルトの名無しさんNGNG
>>281
>>1のC FAQを読んでから出直せ。
0283デフォルトの名無しさんNGNG
>>281
目に見えない何かが詰まってるんだよ。
0284281NGNG
>>282,283
納得しました。
sizeofは詰めものまで数えるのね。
0285デフォルトの名無しさんNGNG
そりゃそーだ。
0286269NGNG
>276

pclose のリターン値ですが、
これって、fcloseに準拠するんでしょうか?

呼び出し先のアプリが複数ステータスを返す場合は
pipeで、やり取りするしかないんでしょうか?
0287デフォルトの名無しさんNGNG
>>281
C FAQ 2.13:を参照
http://www.catnet.ne.jp/kouno/c_faq/c2.html
> 構造体にsizeof演算子を使ったら、私が思っていたよりも大きな大き
> さを返してきた。まるで、おしりに詰め物がしてあるようだ。
0288デフォルトの名無しさんNGNG
だからmanしろと言ってるだろ。

> The pclose() function waits for the associated process to terminate and
> returns the exit status of the command as returned by wait4().
0289デフォルトの名無しさんNGNG
どうも。3*3の○×ゲームの対CPUのプログラムを作りたいんですが
何から初めていいものか分かりません。
そもそも、こういう処理をコンピュータにやらせる事をなんていうんですか?
思考ルーチンとか?
0290デフォルトの名無しさんNGNG
>>288
bugsに
> Failure to execute the shell is indistinguishable from the
> shell's failure to execute command, or an immediate exit of the
> command. The only hint is an exit status of 127.
こんなことが書いてあるけど、pcloseでは成功の判断はできるけど
どのプロセスで何のエラーが発生したのかは判断できないんじゃない?
0291269NGNG
>288
見落としてました・・・。・゚・(ノД`)・゚・。
0292デフォルトの名無しさんNGNG
>>289
以前おれ三目並べ作ったよ。一ヶ月もかかったがあれは楽しかった。
まずは紙に三目並べの局面の樹形図を描きまくることからはじめた。
0293デフォルトの名無しさんNGNG
>>292
三目並べ程度だったら今のマシンパワーだと、
枝刈りしなくても全然おっけーだから力技で解けちゃいそう。

つかMS-DOSの頃も枝刈りの必要なかったか。

とはいえ、練習だと思って枝刈り入れるといいかもね。
正規化するルール作って、回転対称とか軸対称とかで刈っちゃう。
んで、それぞれの局面を正規化して探索する、と。
0294デフォルトの名無しさんNGNG
うぅ
樹形図しか理解できないんで、勉強してきます・・・
0295デフォルトの名無しさんNGNG
枝刈りしないで全局面数えても9!だから、45通りしかないんじゃないか。
力技つってもたいしたことないな(w
ただ、それをどう評価するかを考えるのが楽しそうだ。
0296295NGNG
あ、ごめん45って1〜9の和じゃないか。
9!は362880か。
ただこれでも力技いけそう。
0297デフォルトの名無しさんNGNG
3目ならべなら、テーブル作って終わり。
0298デフォルトの名無しさんNGNG
4マスで3並びの個数が多い奴が勝ちとかしたらちょっとは面白くなるかもね。
0299すみませんNGNG
#include<stdio.h>
#include<stdib.h>
#define juand() ((double)rand()/(32767.0+1.0))
void main()
{
double z;
int i;
srand(2);
printf("自分の名前の入力\n");
for(i=1;i<10;i++){
z=jurand();
printf("%4d番目の乱数は%10.7lf\n",i,z);

これを利用して、乱数10個の平均をディスプレイに
出力するプログラムを作りたいんですが、
どのようにすればよいのか全く分かりません。
どなたか教えてください。
0300デフォルトの名無しさんNGNG
三つ前の自分の手が消えるとしたら、
三目並べも少しは面白くなるかもね。
0301デフォルトの名無しさんNGNG
>>299
srandの引数を定数にすると結果がいつも同じ。
0302デフォルトの名無しさんNGNG
>>299
あちこちに張るなよ。ボケが。
0303デフォルトの名無しさんNGNG
近藤君はまだ健在ですか?
0304デフォルトの名無しさんNGNG
>>299
酔っ払い五月蝿いよ
0305>>300を作ってみたNGNG
#include <stdio.h>
#define SL(i) (m[i][0]==m[i][1]&&m[i][1]==m[i][2]&&m[i][0]!=' ')
#define SC(i) (m[0][i]==m[1][i]&&m[1][i]==m[2][i]&&m[0][i]!=' ')
#define D1 (m[0][0]==m[1][1]&&m[1][1]==m[2][2]&&m[0][0]!=' ')
#define D2 (m[0][2]==m[1][1]&&m[1][1]==m[2][0]&&m[0][2]!=' ')
#define DU(i) (SL(i)||SC(i)||D1||D2)
#define PL() printf("-----\n");
#define PM(i) printf("%c|%c|%c\n", m[i][0], m[i][1], m[i][2]);
#define I(i) for(i=0;i<3;i++)
int main(void) {
  char m[3][3]={},s[3],me[3]={},com[3]={};
  int i,j,k,x,y;
  I(i)I(j)m[i][j]=' ';
  for (;;) {
    fputs("手は?(x):", stdout);fgets(s,3,stdin); x=atoi(s);
    fputs("手は?(y):", stdout);fgets(s,3,stdin); y=atoi(s);
    if (x<0||x>2||y<0||y>2||m[x][y]!=' ')
      {printf("そこには置けない\n");continue;}
    memmove(me+1,me,2); me[0]=(x*4+y+1);  /* player */
    I(i){I(j){if(m[i][j]=='o')m[i][j]=' ';}}
    I(i)if(me[i])m[(me[i]-1)/4][(me[i]-1)&3]='o';
    PM(0);PL();PM(1);PL();PM(2); printf("\n");
    I(i) if(DU(i)){ puts("o won");exit(1);}
    I(i) I(j){if(m[i][j]==' '){x=i;y=j;goto ll;}} ll:
    memmove(com+1,com,2); com[0]=(x*4+y+1); /* com */
    I(i){ I(j){ if(m[i][j]=='x')m[i][j]=' '; }}
    I(i)if(com[i])m[(com[i]-1)/4][(com[i]-1)&3]='x';
    PM(0);PL();PM(1);PL();PM(2); printf("\n");
    I(i) if(DU(i)){ puts("x won");exit(1);}
  }
}
0306デフォルトの名無しさんNGNG
3目並べあたりだと7行プログラミングスレの連中なら簡単に作りそうだな
7行でオセロにはビビったよ
0307デフォルトの名無しさんNGNG
>>305
すごい・・・
マクロ展開したんだけど、質問。
char型の配列の宣言の要素はなんでないの?

あと、#include <stdlib.h>
#include <string.h>が必要で、
セミコロンが1個余計なとこはけーん
0308デフォルトの名無しさんNGNG
>>306
これじゃないのかな
http://pc3.2ch.net/test/read.cgi/tech/1033143528/527
0309デフォルトの名無しさんNGNG
>>307char s[3]ならfgets専用の配列で嫌でも変わるから入れなかったよ。1文字,改行,0ってなるし。string.hはmemmove,stlib.hはatoiか,-Wallしてなかったんで見過ごしてた。○×ならできそうだけどオセロはすごいな。
0310307NGNG
オレも今見てきた。オセロすごすぎ。
オレは未だに単なる3*3の○×ゲームで
思考ルーチンに試行錯誤なのに・・・
しかもif文ばっかだし。
ソース全部展開して、見やすくして
徹底的に盗んでやる!
0311307NGNG
オレがコンパイルしたのはこれ

http://pc.2ch.net/test/read.cgi/tech/984182993/336
336レス目ね
0312浦島太郎な気分。NGNG
6年ぶりにプログラミングを再開しようと考えているのですが、VC++とC#、どちらにしたら
良いでしょうか。6年前は、富士通FM−R50/S(OS MS−DOS Ver 3.3)というマシンで、
F−BASIC、Quick C、MASMを使っていました(アセンブラはほんのお遊び程度)。
ネット、Windowsはおろか、ハードディスクさえ無い環境でしたので、いざ再開せん、と
意気込んだは良いのですが、当時のPC環境とのあまりの違いに、何をどうしたらよいのやら全く
分かりません。
0313デフォルトの名無しさんNGNG
>>312
Borland C++ Builderにしとけ。
0314デフォルトの名無しさんNGNG
Borland C++ Compiler
0315 ◆i.HARPeeuc NGNG
>>312
Windows 対応のコンパイラでコンソールアプリケーションを選べば、「昔」 と
ほぼ同じ感覚でプログラミングできる。
ウィンドウアプリは 「猫」 でも見ながら追々。
http://www.kumei.ne.jp/c_lang/
ただし C# なら 1 から始めるくらいの気持ちの方がいい。
0316デフォルトの名無しさんNGNG
((void (*pu)())1)
この場合puは値を返さない関数へのポインタってことなんでしょうか?
それはそうと"1"ってなんですか?
FreeBSDのソースでみかけたんですが
わからなくて困ってます
0317デフォルトの名無しさんNGNG
>>316
1を値を返さない関数へのポインタにキャストしているのかな?
なんでpuと書いてあるのかわからないけど。
0318デフォルトの名無しさんNGNG
C99では
void foo(void){}
void bar(void){ return foo();}
は合法とされているんでしょうか?
教えてください。
0319デフォルトの名無しさんNGNG
>>316
よくわからん。
VC6 と gcc-2.95 ではコンパイルエラーになる。
0320デフォルトの名無しさんNGNG
>>318
何がいけないと思うの?
0321デフォルトの名無しさんNGNG
>>320
あ、一般的なコーディングでこういうのって出て来るものですか?


C++で合法なのは知っていますが、Cではどうなのかなと。
プリプロセッサもどきを作成していて、こういうことが
したくなったのですが移植性が気になって。
0322321NGNG
320タン......

(-_-)
0323 NGNG
0324デフォルトの名無しさんNGNG
>>321
320 は、つまりどうしてそういう疑問を持つ事になったのか訊きたかっただけだけど。
書き方は悪かった、すまん。

移植性が気になるようなプリプロセッサを作るなら、規格書ぐらい自分で
読めなきゃダメだろう。

ISO-C-FDIS.1999-04.pdf
6.8.6.4 The return staatement
| 1 A return statements with an expression shall not appear in a function
|  whose return type is VOID. A return-type statement without an expression
|  shall only appear in a function whose return type is VOID.

void 型の関数で、エクスプレッションのある return は使っちゃダメだとさ。
逆に、エクスプレッションの無い return は void 型の関数のみで使えと。

「with an expression」 って、「戻り値のある」 って訳していいのかな?
漏れも英語苦手なんだから、英文読ませないでくれ。
PDF 検索しる。

あと、C++ で合法って何故?? 何が根拠?
0325324NGNG
すまん、typo してる。
で、探したら PDF でなくて TXT のバージョンがあるからそっち使ってくれ。

# Acrobat Reader って何でコピペできないんだよぅ・・・
0326デフォルトの名無しさんNGNG
>>324
> 「with an expression」 って、「戻り値のある」 って訳していいのかな?

訳すなら「引数を持った return 文」かなあ。
要するに return; はいいけど return expr; は駄目ってことなんだけど。
0327デフォルトの名無しさんNGNG
>>316
多分やりたい事は 317 だろう。
しかし、どう見ても文法エラーなんだが。
昔のコンパイラならキャストに名前が混じっててもコンパイル通ったのかな?
0328318NGNG
>>324
おおう。 調べていただいてどうもありがとうございます。C99の規格
持ってなくて・・。

C++の方ですが、ISO/IEC 14882-1998 の p.98, section 6.6.3

| A return statement with an expression of type ``cv void'' can be used only in functions
| with a return type of cv void; the expression is evaluated just before the function returns
| to its caller.

によります。templateにvoid戻りの関数オブジェクトを渡すとき、このような規格
でないと問題になるケースがいくらかあります。

ありがとうございました。
0329318NGNG
>>328
同じく英文は苦手なので引用すべき部分が間違ってたら平にご容赦。
0330デフォルトの名無しさんNGNG
>>325
普通に作ったPDFはコピペできるはず
できない文書はビットマップにしてあるんかな
0331デフォルトの名無しさんNGNG
>>328
cv void 型の表現を伴う return 文は cv void 型を返す
関数でのみ使うことができる。表現は呼び出し元に戻る直前に
評価される。

よく読め。
0332デフォルトの名無しさんNGNG
>>331
318が許される理由にはなっていない?
0333デフォルトの名無しさんNGNG
唐揚げ
0334デフォルトの名無しさんNGNG
cv void,where cv is [const|volatile].evaluation is applied to "cv void",whice is not "void" but [const|volatile]
0335デフォルトの名無しさんNGNG
>>334
C++の話題はメインじゃないんだから粘着せんでも。
0336デフォルトの名無しさんNGNG
講義でこんな問題出ました

4個の整数集合{a,b,c,d}と{e,f,g,h}が与えられたとき
2集合の全要素の組み合わせでかつ同一でない演算をする(+,−,×,÷,論理和,論理積)
※集合の要素値の与え方は自由
 組み合わせとはa+eのような2要素からなるものとする

記号16通り×6で96通りの計算をすればいいとおもうのですがC言語まったくわからないので
さっぱりです。

#include <stdio.h>
までしかわかりません
0337デフォルトの名無しさんNGNG
どうして 1 は 「課題丸投げ禁止」 を消してしまったんだ・・・。

>>336
スレ違い。
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0338デフォルトの名無しさんNGNG
本を読んでいたら
int hoge;
char buf[256];

fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&hoge);
っていうのが出てきたんだけど
sscanfって言い換えれば
文字列bufからscanf("%d",&hoge)しろって事?

あとなんでこんな事してるの?
0339デフォルトの名無しさんNGNG
>>336
この前も同じようなの見た。
同じ学校なのだろうか…
0340デフォルトの名無しさんNGNG
>>338
> sscanfって言い換えれば
> 文字列bufからscanf("%d",&hoge)しろって事?
まぁ、大体そんなかんじです。

> あとなんでこんな事してるの?
その本が比較的まともな本だからです。
良く読めば何でそんなことをしているのかも書いてあるはずです。
0341デフォルトの名無しさんNGNG
答え書こうとしたけど 340 みて踏み止まり。

>>338
参考までに、この場合に限っては

  fgets(buf,sizeof(buf),stdin);
  hoge = atoi(buf);

の方が一般的だし、わかりやすい。
関数のそれぞれのくわしい機能は調べておいてね。
0342デフォルトの名無しさんNGNG
>>340
>>341
ありがとう!!
atoiは今から調べてきます!
0343デフォルトの名無しさんNGNG
ANCI Cで、関数の引数に、決まってない数のパラメータを渡す方法ってどうやるんでしょうか?
printf() なんかみたいに、渡すパラメータの数が決まってないんです
0344わかりません ◆MSEEFfect2 NGNG
>>343
ANSI C って、なんでしたっけ。
stdarg.h はあるなら、va_list 使う。
ない場合は、以下で逝って世し。

宣言
void myprintf();
定義
void myprintf(int a, int b, int c, int d, int e, int f, int g, int h, int i)
{
}
0345デフォルトの名無しさんNGNG
>>343
多分、君のやりたいことはC FAQ 15.4: or 15.5: で解決する。
http://www.catnet.ne.jp/kouno/c_faq/c15.html
0346デフォルトの名無しさんNGNG
>>344
<stdarg.h> は ANSI で定義されてたと思う。
0347343NGNG
(・∀・)イイ!

やってきます
0348デフォルトの名無しさんNGNG
どこで聞こうか悩んだけど、ここで質問させてホスイ
・C言語で開発している爺
・グローバルな変数はあまり使いたくない志向
・文字列”名前”を渡し、加工後に決められたコントロールにて表示という以下の関数を作成
 void SetHogeName(HWND, LPSTR);

今までなんの疑いもなくこういう組み方をしていたんだけど、ある日気がついたんだ。
SetHogeNameって結構あちこちから呼び出しているんだよね。
で、コンパイルエラーが出ない範囲でHWNDやLPSTRを指定し間違えると、潜在バグってことになるよな?

ここで思ったんだが、どうせHWNDやLPSTRに指定するデータなんぞ出所は決まってるんだよ。
つまらんバグを回避するなら、いっそのこと必要データはグローバル変数に持っておき、SetHogeNameからグローバル変数にアクセスしに行けば良いんじゃないかと。

一応、グローバル変数って簡単に書き換えることが出来るという点で危険が残るのでよ、書き換える場合はアクセッサでも通してやれば良いかと思った。

ちょっとデムパ入ってるかのぅ?

C++なお年ごろ?
勘違い?
0349デフォルトの名無しさんNGNG
#include <stdlib.h>
#include <stdio.h>
int main(
int argc,
char * argv[ ]
)
{
if (argc !=3)
printf("wrong no. of arguments\n");
else
{
printf("Sum: %d\n", atoi(argv[1]) + atoi(argv[2]));
}
return 0;
}
このプログラムを改良して。引数より少ない正整数で割りきれるものをすべて列記する。
プログラムを開発せよ。

例
a.out22なら

22は11で割りきれる

22は2で割りきれる

22は1で割りきれる

だれかお願いします。
0350デフォルトの名無しさんNGNG
a.out20なら

20は10で割りきれる

20は5で割りきれる

20は4で割りきれる

20は2で割り切れる

20は1で割り切れる

引数より少ない正整数で割りきれるものをすべて列記する。
プログラムを開発せよ。
0351デフォルトの名無しさんNGNG
今度の1は必ず「宿題丸投げお断り」の文言を入れといてくれ
>>350
ヒント:素因数分解
0352デフォルトの名無しさんNGNG
>>351

もっとヒントプリーズ

できれば答えも
0353デフォルトの名無しさんNGNG
>>348
グローバル変数では無く、ファイルスコープのstatic変数にしろ。
でアクセサ経由でstatic変数にアクセスしろ。
これで意味が分かるか?
0354デフォルトの名無しさんNGNG
>>352
http://www5.airnet.ne.jp/tomy/cpro/etc5.htm
0355352NGNG
>>354

ぎぶあっぷ

どうでもいいや俺の宿題じゃないし
0356348NGNG
>>353
サンクス。よっく分かりますた。
でも、SetHogeNameみたいな関数って他にもかなり沢山あるんだよね・・。
ちと鬱。
0357デフォルトの名無しさんNGNG
>>355
君のレベルが知りたい
質問1:素数は知っているか。
質問2:任意の数が素数であることを判定するプログラムが作れるか?
質問3:任意の数の最大公約数を求めるプログラムが作れるか?
全部の質問にyesならば素因数分解するプログラムも作れるはずなのだが。
0358355NGNG
>>357
質問1にのみイエス

C言語は必須じゃなかったから去年あきらめたんだよ。

だから君のことは少し尊敬かも。でも無事卒業したよ。
0359デフォルトの名無しさんNGNG
>>357
�@1とそれ自身以外で割り切れない数
�A枝切りしながらやる
�Bこれも枝切り
よって、高枝切りばさみが必要
0360デフォルトの名無しさんNGNG
>>359
氏ね

>>357
�@握りこぶし位の大きさで、湿気の多い所にある
�A中火で5分、弱火で10分コトコト煮込む
�Bアニメ「一休さん」のさよちゃんによく似ていた
0361デフォルトの名無しさんNGNG
質問です。
猫でも・・・を見ていたらエスケープシーケンスってのが出てきたから
やってみたんだけど、実行結果が
[2j
こういう風になって、全然画面が変わらない!

ちなみにソースは
#include <stdio.h>
int main()
{
    printf("\x1b[2j");
    return(0);
}
です。

色が変わったりするのも、何も起きなかったし。
OS XPで、BCC使ってます。
何か原因わかります?
0362デフォルトの名無しさんNGNG
>>361
たしかXPはエスケープシーケンスは使えなかったと思う。
0363デフォルトの名無しさんNGNG
>>362
( ̄□ ̄;)!!
まじっすか!?
ふざけんなビルゲイツ( ゚Д゚)ゴルァ!
できねーじゃねーか( ゚Д゚)ゴルァ!

アア・・・マジ切ないよ
やる気なくすよ・・・。
VC++なら出来ますか?
0364デフォルトの名無しさんNGNG
>>363
config.ntにansi.sysをデバイスドライバ登録すればいいじゃん。
0365教えて厨NGNG
課題
4個の整数集合{a,b,c,d}と{e,f,g,h}が与えられたとき、
二集合の全要素の組み合わせで、かつ同一でない演算をする
プログラムを作る
(演算とは+−×÷、論理和、論理積)

集合の要素値の与え方は自由
「組み合わせ」とはa+bのような二要素からなるものとする
0366351NGNG
悪い、難しく考えすぎてた
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  int n, i;
  
  if(argc != 2 || (n = atoi(argv[1])) == 0)
  {
    printf("数値を入力してください\n", argv[0]);
    return 0;
  }
  for(i = n - 1; i > 0; i--)
    if((n % i) == 0)
      printf("%dは%dで割り切れる\n", n, i);
  return 0;
}
0367教えて厨NGNG
誰か、Cでプログラム組んでください
おながいします
0368デフォルトの名無しさんNGNG
>>361
第58章 コンソールアプリで文字色を変える
ってので色変えるヨロシ。
0369デフォルトの名無しさんNGNG
>>364
ごめん!全然わからんw
こことか?
http://mayu.als.jp/XPcom/wxp_conf.html
これって、MS-DOS使ってやるの?
なんかダウンロードする必要ある?
0370デフォルトの名無しさんNGNG
>>367
この板の何処かに同じような問題を見たなぁ。
答えも書いてあったような...
0371教えて厨NGNG
うpキボン
0372デフォルトの名無しさんNGNG
>>368
でもオレVC++でなくてBCCだから・・・
bccじゃ出来ないよね・・・?
0373デフォルトの名無しさんNGNG
ごめん!NT用っぽいけどこんなのあった
http://www.tim.hi-ho.ne.jp/gonbuto/memo/nt-esc.txt
とりあえずこれやってみます。
0374デフォルトの名無しさんNGNG
>>371
http://pc3.2ch.net/test/read.cgi/tech/1021862587/889-

>>372
bccでも可。
0375デフォルトの名無しさんNGNG
何度もごめん!>>373のサイト行ったら、
step1:config.ntにansi.sysを追加。
step2:config.ntの最後に"dosonly"と追加。
step3:command.comを起動。
※NTのコマンドプロンプトはcmd.exeです。command.comはsystem32に含まれています。)
step4:エスケープシーケンスを含むバッチを実行。

ってあったんだけど、ステップ3のって
XPでいうとコマンドプロンプトなのかなあ

>>374
できる!?コンソールアプリね。
調べてきます
0376デフォルトの名無しさんNGNG
>>374
できたあ!ありがとうございます。
エスケープシーケンスはまだ出来ないけどw
再起動しないとダメなのかな。

で、質問なんだけどもw
コンソールAPIって、Win32APIみたいなものっすか?
windowsヘッダをインクルードしてるし・・・。
でもbccじゃWin32API使えないよね!?
0377デフォルトの名無しさんNGNG
>>376
> bccじゃWin32API使えないよね!?
MFCが使えないだけで、win32api SDKは使うことができます。
つまり、猫でも〜のSDK編に載っているapiは全て使える。
0378デフォルトの名無しさんNGNG
>>377
そうだったんですか!!
VC++だったら全部できるんだよね?
かおっかなー。でもまだまだだからいいや。
0379デフォルトの名無しさんNGNG
>>377
すいませぬが・・・
http://www.kumei.ne.jp/c_lang/sdk/sdk_25.htm
にあるソースをこぴって実行しようとしたら
エラー E2034 graph.cpp 25: 'void *' 型は 'HBRUSH__ *' 型に変換できない(関数 __stdcall WinMain(HINSTA
NCE__ *,HINSTANCE__ *,char *,int) )
というエラーが4つも出てきたよー!!
やっぱ何かがおかしい・・・
0380デフォルトの名無しさんNGNG
キャストは他の演算子に比べてどれくらい優先度が高いんですか?
0381デフォルトの名無しさんNGNG
>>379
bcc32 -tW xxx.cpp
ってやればできるよ。
0382デフォルトの名無しさんNGNG
>>379
C++としてコンパイルすると確かにそのエラーが出てくる
hoge.cpp をhoge.cにして
bcc32 -W hoge.c
でコンパイルすると
  Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
  hoge.c:
  警告 W8057 hoge.c 31: パラメータ 'lpszCmdLine' は一度も使用されない(関数 WinMain )
  警告 W8004 hoge.c 79: 'y' に代入した値は使われていない(関数 ShowText )
  Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
こんな警告が出てくるけどコンパイルと実行はできる。
0383デフォルトの名無しさんNGNG
>>381
>>382
THANX!!
でもC++ではだめで、Cならできるってどういう事なんだ・・・。
0384デフォルトの名無しさんNGNG
>>380
http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Operator/Main.asp
0385デフォルトの名無しさんNGNG
>>383
> でもC++ではだめで、Cならできるってどういう事
俺も良くわからん。
以下のスレの方がもう少し詳しい回答をもらえそうな気がする。

タダで使えるBorland C++ part2
http://pc3.2ch.net/test/read.cgi/tech/1030493157
0386デフォルトの名無しさんNGNG
>>383
C++はそれだけ厳格だってこと。
0387デフォルトの名無しさんNGNG
void *vp;
int *ip;

ip=vp; // CだとOKでC++だとだめ。
ip=(int *)vp; // これならどちらでもOK
0388デフォルトの名無しさんNGNG
NULLポインタってどういう時使うんですか?
数字の0とは何が違う?
0389デフォルトの名無しさんNGNG
>>388
勘弁してください。
0390デフォルトの名無しさんNGNG
ストリームからとりこんでchar配列に格納する関数ってありますか?
改行してもEOFまでひたすらとりこむ関数
0391デフォルトの名無しさんNGNG
>>390
freadで出来ると思う
0392デフォルトの名無しさんNGNG
>>391
どもやってみます
0393デフォルトの名無しさんNGNG
/*演習3-3 en03_3.c*/
/*学籍番号 02C1075 氏名 山下祥隆*/
/*作成日10月10日*/
#include <stdio.h>
int main(void)
{
int num1;
printf("あなたの年齢を入力してください。\n");
scanf("%d",&num1);

double num2;
double num3;
printf("あなたの身長と体重を入力してください(センチ、キログラム)。\n");
scanf("%lf",&num2);
scanf("%lf",&num3);
printf("あなたの年齢は'%d'です。\n");
printf("あなたの身長は、%lf、あなたの体重は%lfです。\n");
return 0;
}


すいません、他の板に書いたら不適切だとのご指摘を頂いたのでこちらに
カキコさせていただきます。二重カキコになりますがお許しくださいm(__)m

上記のプログラムを実行したらランタイムエラーが起きて、
プログラムがうまく実行できません。エラーは0なんですが・・・。

ご指導をいただけたら幸いですm(__)m
0394デフォルトの名無しさんNGNG
>>393
下の二つのprintf()で引数が足らない。

あと、板ではなくスレね
0395 ◆hMJAPH9PWA NGNG
学籍番号とか氏名とか本気なんだろうか、とか、
作成日から20日たってるけど全然間違いに気付かなかったのか、とか突っ込みどころ満載だけど…。

#トリップ忘れてた…
0396デフォルトの名無しさんNGNG
>>394
ご返答ありがとうございますm(__)m

申し訳ありませんが引数とは何でしょうか?

わかりました、次から気をつけます。
0397デフォルトの名無しさんNGNG
>>378
おお!仲間ハケーンだ。
とりあえずVS.NETの学割版かなぁ・・・
0398デフォルトの名無しさんNGNG
互換モードでもできんのか・・・。
あー面毒さw
0399デフォルトの名無しさんNGNG
>>395
しまった・・・それ自分のじゃないんです・・・聞かれてコピーしてしまいました・・・
その部分は見なかったことにしてやってください(T^T)
0400デフォルトの名無しさんNGNG
>>396

printf("あなたの年齢は'%d'です。\n" , num1 );
/* %dで指定したら変数を指定しる!  ↑ ここ。 */

printf("あなたの身長は、%lf、あなたの体重は%lfです。\n", num2 , num3);
/* ここも上と同じで%n.mが二つあるから二つ指定する。    ↑ここと↑ここ。*/
0401デフォルトの名無しさんNGNG
やたー400げtしてもたw
0402デフォルトの名無しさんNGNG
func(aa,bb);
とかいうのがあったとしまして
引数二個しかとらないfunc()関数をプログラム中から探し出すとき
$grep 'func(.*,.*)' unko
ってやったら引数2個どころじゃない行が該当します
任意の文字列に「,」を含めない正規表現はどーかけばいいですか?
0403デフォルトの名無しさんNGNG
>>400
出来ました!本当にありがとうございましたm(__)m


解答していただいた皆様本当にありがとうございましたm(__)m
0404デフォルトの名無しさんNGNG
>>402
ここはC言語のためのスレッドです。
0405 ◆hMJAPH9PWA NGNG
>>402
C言語とは何の関係もないんじゃ…
とりあえず /func([^,]+,[^,]+)/ でいいんじゃないの?
func("a, b", 10)とか出せないけど。
0406402NGNG
いた違いでした
ありがとうございます
0407デフォルトの名無しさんNGNG
>>388

・ヌルポインタは、ポインタが何も参照していない事を示す為に使う。
・ヌルポインタは、副作用無しに free delete できる。

・定数の "0" は、文脈によってヌルポインタ、または整数の 0 として解釈される。ただし、可変長引数、またはプロトタイプをもたない関数の引数に現れた場合は、整数の 0 として解釈される。
 また、整数型とポインター型とで多重定義している関数の引数では、解釈は実装依存となる。
・ヌルポインタのビットパターンは実装依存である。
・条件式にヌルポインターが現れた場合、偽となる。
・ヌルポインタとヌルポインタとは等しい。
・ヌルポインタとその他のポインタとは、常に等しくない。
・ポインタ型によりヌルポインタのビットパターンが異なる場合があるが、コンパイラは(騙されない限り)正しい型を知っているので、比較は正しく行われる。

・NULL は 定数 "0" がヌルポインタとして解釈される場合のみ、定数 "0" の代わりに使用できる。他の文脈では、結果が実装依存となる。
(NULL を整数 0 の代わりに使用してはいけない)
・NULL の定義方法は実装依存である。(#undef NULL は合法)
0408デフォルトの名無しさんNGNG
>>397
オレはとりあえずVC++のアカデミック買うよ
たぶん1万2千くらいなはず!
フリーはなんだかんだいってフリーだからね
ボーランドごめん!
bccをサンクス・・・
0409デフォルトの名無しさんNGNG
かるい疑問だけど
よくchar型の配列strを宣言してるソースとかに
char str[256];
ってあるけど、
この256は2の8乗だよね?
分かりそうで分かんない256の意味をテルミー!
0410デフォルトの名無しさんNGNG
きりがいいんじゃない
0411デフォルトの名無しさんNGNG
>>409
バッファを2の乗数倍にしておくと、処理によっては早くなるケースも
あるけど、ほとんどの場合、意味は無いんじゃない?
0412デフォルトの名無しさんNGNG
tmp[100]とかとおなじで、適当なサイズ、ってことさ。
0413デフォルトの名無しさんNGNG
じゃあなんでstr[0x100]って書かないのさ?
0414デフォルトの名無しさんNGNG
str[0x100] だとなんか意味ありげ
0415デフォルトの名無しさんNGNG
バッファってなんでしょうか?
0416デフォルトの名無しさんNGNG
>>415
検索しる
http://www.wdic.org/
0417デフォルトの名無しさんNGNG
56gaiikara
256mosukareru
0418417NGNG
uso
0419デフォルトの名無しさんNGNG
関数形式マクロで

#define SWAP(a,b) {int temp;temp=a;a=b;b=temp;}

こんなの作ったとするしょ?
で、ソース中に

SWAP(data[left_index],data[right_index]);

こんな風に出てきたら、セミコロンが余計でないの?
あとこの場合はコンマ演算子使えないよね。
でも例えば

#define putsa(str) (putchar('\a',puts(str))

putsa("警告!!");

とかはコンマ演算子使えるしょ?
この二つの違いってなんだ?
0420デフォルトの名無しさんNGNG
>>419
普通は
#define SWAP_INT(a,b) do { int temp = a; a = b; b = temp } while( 0 )
ってするね
0421デフォルトの名無しさんNGNG
セミコロンは区切り子なので、
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
と書いてもエラーにはならない罠。
0422デフォルトの名無しさんNGNG
>>419
え?(プロトタイプ宣言をしていれば)putchar('\a',puts(str))はエラーになるでしょ?
引数が多すぎるって・・・

関数の実引数リストのコンマはコンマ演算子とは別物のはず。評価される順番は保証されていないし。
0423422NGNG
よく見たら括弧の対応がおかしいな。
そうかputchar('\a'),puts(str);と書きたかったのか。
0424419NGNG
>>421
空文ってことか。だったらなくてもおkだよね?

>>423
ごめん。まちがった。その通りです。
あとさ、>>490のは
#define SWAP_INT(a,b) {do { int temp = a; a = b; b = temp } while( 0 )}
って書かなくていいん?

>>422
オレが持ってる本に載ってたソースなんだけども
「こういうときはコンマ演算子を使いましょう」
って感じで紹介してるよ。
0425419NGNG
わりい。
>>490は
>>420に訂正

なんで間違ったんだ・・・
もう潮時か・・・
0426デフォルトの名無しさんNGNG
age
0427デフォルトの名無しさんNGNG
>#define SWAP_INT(a,b) {do { int temp = a; a = b; b = temp } while( 0 )}

つか、do..while()に終端の ; が無いからコンパイラが文句言うだろ
0428デフォルトの名無しさんNGNG
char *p = (char *)NULL; という冗長な記法のルーツを教えてください。
0429デフォルトの名無しさんNGNG
>>428
NULLはvoid *だったため。
0430デフォルトの名無しさんNGNG
void*から任意の型のポインタへの変更って、昔はキャストが必要だったんですか?
0431デフォルトの名無しさんNGNG
>>429
要らない。428 のようなコードはクソ。
C++ ではきちんとしたキャストが必要だけど、NULL が型を持ってないから
結局キャストは要らない。
0432デフォルトの名無しさんNGNG
>>431
>要らない。428 のようなコードはクソ。

早く寝な(藁
0433428NGNG
あ、昔から不要だったんですか。じゃぁルーツはなんだろう。

>>431
はい。C++では <cstddef> で #define NULL 0 ですね。
0434デフォルトの名無しさんNGNG
NULL論争するやつは、おそらく勘違いしているヤシが
混ざっているはずなので、まずC FAQを読むべし。
0435428NGNG
>>434
勘違いしてるのは僕?
0436デフォルトの名無しさんNGNG
>>435
自信がない奴は読んどいた方がいいよ。
おそらく「そうだったのか」と思うだろうから。
0437デフォルトの名無しさんNGNG
C/C++が勘違いしやすいように作られているのだから仕方ない。
悪いのは全部C/C++のせい。
0438デフォルトの名無しさんNGNG
>>419
> #define SWAP(a,b) {int temp;temp=a;a=b;b=temp;}
>>424
> #define SWAP_INT(a,b) {do { int temp = a; a = b; b = temp } while( 0 );}

if(a < b)
  SWAP(a,b);
else
  a = b;

と書いた時、文法エラーになる。
420 が正しい。

>>424
> 「こういうときはコンマ演算子を使いましょう」
その本のタイトルを晒したのち、すぐさま燃やせ。
コンマ演算子は何の役にも立たず、ソースを見にくくするだけの機能しかない事が
既にわかっている。
0439デフォルトの名無しさんNGNG
>>437
あと、誤解をさも真実のように言いふらす生兵法馬鹿が
過去に大勢いたせい、というのもあるねえ(ワラ
0440428NGNG
読んできた。
Cでは 0 か ((void*)0) にdefineされるんでしょう?ならキャスト不要では。
0441デフォルトの名無しさんNGNG
>>437
勘違いしているのはあなたのせい。
プログラムが動かない時、すぐ処理系のせいにする DQN が多くて困る。
一体何でつまずくんだか。
0442デフォルトの名無しさんNGNG
>>441
言語仕様書を読むことにつまづくんだろうよ(ワラ
0443428NGNG
期せずして燃料投下した感じだな(w

0444デフォルトの名無しさんNGNG
>>440
その通り。
432 のような DQN が、428 のようなクソコードを書く。
真に優れた人は char *p = 0; と書く。
0445デフォルトの名無しさんNGNG
>>442
そら思いっ切り処理系じゃなくて読む人のせいだ。
0446デフォルトの名無しさんNGNG
正式な言語仕様書が手軽に入手できないのが悪い
0447428NGNG
では、char *p = (char *)malloc(hoge); もDQNの所業ってことでいいっすね。
0448デフォルトの名無しさんNGNG
>>447
そりゃ意味が違うとおもうが・・・
0449428NGNG
>>448
void*からのキャストは不要、の文脈を採用。
0450デフォルトの名無しさんNGNG
お前等ちゃんと言語仕様書熟読してから使えよ
0451デフォルトの名無しさんNGNG
>>450
お前がまず読め
0452デフォルトの名無しさんNGNG
嫁が欲しい
0453デフォルトの名無しさんNGNG
447とは方向が逆だが、read(fd, (void *)buf, len); もDQNってことでOKだよね(readはBerkleySocketAPIの)。

0454デフォルトの名無しさんNGNG
>>452
お前がまず嫁
0455デフォルトの名無しさんNGNG
>>447
そのコードは C じゃなくて C++ だから話が違う。
>>453
DQN。
0456デフォルトの名無しさんNGNG
>>455
どこがC++?

0457456NGNG
もちろん、C++でどーしてもstd::mallocを使うならcastしないと駄目ってのはわかってるよ。
0458デフォルトの名無しさんNGNG
皆さんCとC++は別物ですよ〜。
pascalとDelphiぐらい違います。
0459デフォルトの名無しさんNGNG
んなこたーわかってるわ。
0460デフォルトの名無しさんNGNG
>>459
わかってないから言ってるんです。
0461デフォルトの名無しさんNGNG
>>460
じゃぁ何番が何をわかってないのか書いて(はぁと)
0462デフォルトの名無しさんNGNG
>>461
皆さんがCとC++は別物ということをわかっていない。
0463デフォルトの名無しさんNGNG
.........




相手にすんのやめよ・・
0464デフォルトの名無しさんNGNG
>>463
そうそう。さっさと去れ。
0465デフォルトの名無しさんNGNG
C++使いが来てはいけないんだよ。嫉み厨の心が乱れちゃうから(w >>463

0466デフォルトの名無しさんNGNG
C++厨必死だな(w
0467デフォルトの名無しさんNGNG
釣れてるし。
0468デフォルトの名無しさんNGNG
ちょっと疑問。
変数の初期化に非定数を指定するのは C では OK なのか?
0469456NGNG
あのー、強いて言うならどちらもそこそこ好きってだけなんで、>>455に
返答願う。
0470455NGNG
>>468
いや、そう思って VC6 で試したら、477 のコードが通ってしまうので規格見てた。
C99 では 6.7.8 の 4 で 「constant expressions or string literals」 って
書いてある。
ANSI ではどうなんだ?
0471デフォルトの名無しさんNGNG
このスレは昼と夜で性格が変わるな。
0472428NGNG
>>470他
あら、ごめん。>>448 の宣言と使用は別行ってことにしてください。
でも、gccの3.2で gcc -Wall -ansi -pedantic でも何も警告されんなぁ。

0473455NGNG
>>472
そうか、じゃあ多分 ANSI では OK だったんだな。
ちなみに今しがた DOS の MS-C6 で試したけど、やっぱり通ったよ。

C++ ならもちろん OK なんだよな。
0474428NGNG
C99で厳しくなったのか・・・
勉強になりましたサンクスコ
0475428NGNG
漏れも規格読んでみた。

>>470
6.7.8.4だよねえ。"that has static storage" って限定されてますが・・・・・・
0476428NGNG
static char *p = malloc... にしたら、"initializer element is not constant" でハネられましたわ。

0477455NGNG
>>475
すまん。じゃ、いいのか?
0478428NGNG
他はよんでないからわからんけど、いいんじゃないんかねえ・・
だれかの突っ込みを待ちまつ。
0479455NGNG
ANSIなんてクソ規格より俺様の趣味を優先しる!!
初期化は定数!!初期化は定数!!
0480デフォルトの名無しさんNGNG
>>479
寝つきがわるいのか?お子様は突然置きださないでちゃんと麻まで寝なさい。
0481455NGNG
>>479
おいおい・・・。
0482デフォルトの名無しさんNGNG
>>479
じゃあまずは&演算子の優先順位から何とかしてくれ。
0483419NGNG
昨日の問題を掘り起こすんだけど
関数形式マクロってのは、ただ単純に展開するだけだよね。
>>438が書いてる
#define SWAP(a,b) {do { int temp = a; a = b; b = temp } while( 0 );}

if(a < b)
  SWAP(a,b);
else
  a = b;
ってのは、展開して
if(a < b)
{
  do
  {
    int temp = a;
    a = b;
    b = temp
  } while( 0 );
}
else
  a = b;

こういう風には解釈されないの?

0484 ◆hMJAPH9PWA NGNG
そうはならない。正確に展開してね。
というか、わざわざdo{}while()で囲んであるのに、更にそれをブロックで囲んだのは誰?

if(a < b)
{
  do
  {
    int temp = a;
    a = b;
    b = temp
  } while( 0 );
}; /* <- セミコロンが!*/
else
  a = b;
0485デフォルトの名無しさんNGNG
>>483
if(a < b)
{
  do
  {
    int temp = a;
    a = b;
    b = temp
  } while( 0 );
};
else
  a = b;

こう展開されるのでは?
0486419NGNG
>>484
そうなるねw

でさ、今>>483に書いたソースでやってみたら
if(a < b)
  SWAP(a,b)
こうやって、最後の;はずしたらできたんだ。
Cって文末には;がいるけど、この場合は例外?
でも好ましくはないよね?
だとすると、ソース中にセミコロンがつくように
マクロの部分を調整するのがベスト?
0487デフォルトの名無しさんNGNG
#define swap(a, b) {int tmp; tmp=a;a=b;b=tmp;}これではダメなのか?swap(a,b);として普通にコンパイルできるが。
0488419NGNG
ごめん。まちがった。
オレがやったのはこういうの
#include <stdio.h>
#define putsa(str) {do{putchar('\a');puts(str);}while(0);}

int main(void)
{
  int na;

  printf("整数を入力してください:");
  scanf("%d",&na);

  if(na)
    putsa("その数は0ではありません。")
  else
    putsa("その数は0です。")

return(0);
}
これならおkだった。
あとさ、マクロの部分は{}をつけなきゃだめなんでないの?
それとも複文のときのみ?
0489419NGNG
>>487
それが最初に本にのってた
で、こうは出来ないのかなって思って質問しますた
0490487NGNG
>>488
putsaに;がついていなくて気色悪いな。
そう言うのを防止すると言う意味でのdo while(0)か?
0491419NGNG
>>487
それだと;が一個多いしょ?
空分だけど。
なんか納得いかん。
0492デフォルトの名無しさんNGNG
多くても別に間違いでは無いから気にする必要もない。
0493デフォルトの名無しさんNGNG
>>492
その意見を持つヤツに恐ろしく汚いコードを書くヤツは少なくない。
0494419NGNG
>>492
でもif文とかに使ったらエラーになるじゃん。
{}で括ってないから。
やっぱこういうときはdo{}while使えってこと?
0495デフォルトの名無しさんNGNG
>>487
>>438

>>494
マクロで複数ステートメント書きたかったら、do { } while(0) は定石。
0496495NGNG
間違えた。

>>492
>>438
0497419NGNG
>>495
なるほど。了解しました。
頭に叩き込んでおきます
0498デフォルトの名無しさんNGNG
C++ だと参照があるから、何も考えずにインライン関数書けばいいんだけどなー。
0499デフォルトの名無しさんNGNG
>>498
参照とインライン関数ってなんか関係あるんですか?

って言うか最近のインライン関数ってほとんどregister変数とかと同じ扱いでは?(初めからか・・・)
0500デフォルトの名無しさんNGNG
>>499
registerは指定してもレジスタに割り当てられるけど、
inlineは指定しないと、インライン展開されないでしょ。
0501デフォルトの名無しさんNGNG
>>500
ないよりましと。なるほど。
0502デフォルトの名無しさんNGNG
×registerは指定してもレジスタに割り当てられるけど、
○registerは指定しなくてもレジスタに割り当てられるけど、
0503498NGNG
いや、漏れはそんなに大した事言ってない。
C++ なら関数でも SWAP(a, b) って書き方できるでしょ。
C だと SWAP(&a, &b) って書かなきゃいけない。
それだけ。

ちなみに、最近のコンパイラでは register というキーワードは単に無視してるみたい。
あと、inline 指定しても内容が長かったり呼び出しが多かったり関数ポインタを得てる
場合はインライン展開されない。
頭のいいコンパイラは、inline 指定してなくてもインライン展開する事もある。
というか、C では inline はキーワードじゃないけど。
0504デフォルトの名無しさんNGNG
そうするとまた「C99にはinlineありますが何か?」という展開になって
0505503NGNG
何かと言われても、最後の行以外は何も変わらないけど・・・。
0506デフォルトの名無しさんNGNG
多倍長を使ってint型だけで、1兆+1兆をするって
配列とか使ってやるの?
でも1兆だったらたとえば、
int vc[4]={1,0000,0000,0000};
ってやっても、無駄だよね。
charが使えないからなー。どうしたらいい?
0507デフォルトの名無しさんNGNG
>charが使えないからなー。
意味が分からない。
0508デフォルトの名無しさんNGNG
つーかマクロ使わないで関数にしろ
0509デフォルトの名無しさんNGNG
友達がchar使ったらできるとか言ってたよ
でもintしか使えないから無理だなあって
0510デフォルトの名無しさんNGNG
誰か>>506に答えてくれーーー
0511また貴様か!&rlo;!ろり懲はし少 &lro;NGNG
              ヽ \
             / \ \
       ∧_∧/
      (;´Д`)     i i i
      /    ヽ _   i i i--、
     ./| |   | |   ̄ ̄ ̄ |:::::|.
    / \ヽ/| |       ノ__ノ..
   /   \\| |
   / /⌒\ し(メ    .i i i . .
 / /    > ) \  ノノノ
/ /     / /    .\_  ザックザック
し'     (_つ   /:::::/::...   /ヽ
          ; "ノ・ ./∴: / )i iヽ-、_へ    ,ヘ
          '',, : :―― / / i i i iヽ . ̄ ゙― ノ /
    n_    _/;    i  .ノ / /ノ-' ̄ ゙ ― 、__ノ
  _ノ 二二二、_( _Д_ ;)-ヽ_ノ-'>>506
  ゙ー ''~      ∨ ̄∨
0512デフォルトの名無しさんNGNG
int vc[4]={1,0000,0000,0000};
でええんちゃう。無駄が多いかもしれんが。
0513デフォルトの名無しさんNGNG
>>506
sizeog(int) >= 8 の処理系を使う。
0514デフォルトの名無しさんNGNG
char型の配列に下の位から1バイトずついれるんじゃないの?
0515デフォルトの名無しさんNGNG
>>512
それでやったら0000ってただの0に解釈されんの?
0516デフォルトの名無しさんNGNG
贅沢に、int を最小要素としてゾーン 10 進。これ最強。
0517デフォルトの名無しさんNGNG
8進数?
0518デフォルトの名無しさんNGNG
10進数で
0519デフォルトの名無しさんNGNG
せめてパック十進数で。
つーかよくしらねーんだが。
0520デフォルトの名無しさんNGNG
512 は擬似的なパック 10 進だろう。
正確にはゾーン 10000 進だが。

つーか、ここはネタスレか?
0521デフォルトの名無しさんNGNG
マジでわかんない。
てかそんな難しい話じゃないと思うよ。
まだ1ヶ月ちょっとしかたってないうちに
出された課題だからさ
0522デフォルトの名無しさんNGNG
>>521
人ごとみたいないいぐさ。
いいキャラだね。
0523デフォルトの名無しさんNGNG
printf("1兆+1兆=2兆\n");
0524デフォルトの名無しさんNGNG
つーかCで多倍長なんかつかえねーよ。
0525デフォルトの名無しさんNGNG
>>521
一ヶ月でもう授業についていけなくなってるのか。
かわいそうに。
0526デフォルトの名無しさんNGNG
俺の環境だとdoubleなら一兆入るな。
0527デフォルトの名無しさんNGNG
パック形式を使った演算処理を思い出した。
時間かかるけど。メモリーの許す限りの数を扱えるからな。
0528デフォルトの名無しさんNGNG
>>527
桁を増やすたびにreallocするの?
0529デフォルトの名無しさんNGNG
>>525
多倍長なんて習ってねーんだよ
なのいいきなり出しやがって、あのやろー。
無理なんでないの、こんなの。
お前らから、あのハゲにそう言ってやってくれ。
だってまだ授業じゃ関数の作り方すらやってねーんだもん
0530デフォルトの名無しさんNGNG
529 は習わないと何もできないのか。
くれぐれもプログラマは目指さないでくれよ。
0531デフォルトの名無しさんNGNG
ほへ?
多倍長整数、関数使ったほうがすっきりするけど、全部 main() でも
書けない事無いでしょ。
0532デフォルトの名無しさんNGNG
宿題スレにいけよ・・・
0533デフォルトの名無しさんNGNG
>>530
あめーな、今出来た。お前よりは頭いいんだよボケ

#include <stdio.h>

int main(void)
{
  int vc1[13]={1,0,0,0,0,0,0,0,0,0,0,0,0};
  int vc2[13]={1,0,0,0,0,0,0,0,0,0,0,0,0};
  int vc_data[13];
  int s;
  int up_s=0;
  int i;
  for(i=12;i>=0;i--)
  {
    s=vc1[i]+vc2[i]+up_s;
    up_s=0;
    if(s<10)
     vc_data[i]=s;
    else
    {
      vc_data[i]=s-10;
      up_s=1;
    }
  }
  for(i=0;i<13;i++)
    printf("%d",vc_data[i]);
  return(0);
}
0534デフォルトの名無しさんNGNG
結局お前らの誰もわかんなかったんだね
C初めて一ヶ月のオレに何も教えてやれないなんてw
頭のデキがちげーんだよ
特に>>530
煽る事しか能がねーw
ぷ
0535デフォルトの名無しさんNGNG
>>528
何桁ごとにreallocするかのか?という発想が欲しいね。
64byte(128桁)ごとに確保していたプログラムを打った。
0536デフォルトの名無しさんNGNG
バッファリングなしで、正真正銘一文字入力の関数ってなんだっけ?
getche()・・・?
0537デフォルトの名無しさんNGNG
>>503
inlineに展開しないのは、あとは再帰関数かな。
0538デフォルトの名無しさんNGNG
>>534
2ちゃんねらーよりあなたのほうがはるかにレベルが上です。
だれもあなたの質問に答えられません。
だからもうここでは聞かないでね
sage
0539デフォルトの名無しさんNGNG
>>536
バッファリングなしにするのなら、

setvbuf(pf, NULL, _IONBF, 0);
fgetchar(pf);

ってやればいいかな。
0540デフォルトの名無しさんNGNG
>>538
なに偽者煽ってるんだよ(藁
お前本当に2ちゃんねらーか?
0541デフォルトの名無しさんNGNG
>>539
setvbufてstdio.h?
0542539NGNG
おれは一体何を書いているのだ。
fgetchar(pf); /* × */
fgetc(pf); /* ○ */
0543デフォルトの名無しさんNGNG
>>536
それ。処理系依存だけど。
0544539NGNG
>>541
そう。C89にある標準関数。
0545デフォルトの名無しさんNGNG
fgetchar() は標準じゃないぞ。
fgetc() にしる。
0546デフォルトの名無しさんNGNG
>>544
サンクス!やってみる!
0547デフォルトの名無しさんNGNG
c言語におけるシンボルっていったいなんなんですか?
変数のこと?
0548デフォルトの名無しさんNGNG
533 のコードは確かに 1 兆 + 1 兆を計算するが、どう見ても多倍長整数では
ないぞ。
0549デフォルトの名無しさんNGNG
>>547
グローバルな変数名および関数名の事。
0550デフォルトの名無しさんNGNG
>>539
多分バッファリングなしに入力ってEnterキーを押さなくても入力できる方法という意味だと思うぞ。
それなら多分setvbufじゃ無理。それとfgetcharってなによ。
0551デフォルトの名無しさんNGNG
>>550
お。そうそう。
getcharだと\nまで溜め込むしょ?
そうじゃなくて、いちいちリターン押さなくても
入力されるようにしたいのさ
0552デフォルトの名無しさんNGNG
>>548
マジ!?
多倍長整数て・・・どんなもの?
0553533NGNG
こんなのは?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  int vc1[13]={1}; /* 13桁の数字1 (単位は兆で、13桁目は1) */
  int vc2[13]={1}; /* 13桁の数字2 */
  int vc_data[13]; /* 計算結果を格納 */
  int s; /* 一桁ずつ計算して、vc_dataにいれる数 */
  int up_s=0; /* くりあがり(1か0) */
  int i;
  int t;

  srand((unsigned int)time(NULL));

  /* vc1とvc2にランダムで数を入れる */
  for(i=1;i<13;i++){
    vc1[i]=rand()%10;
    vc2[i]=rand()%10;
  }
0554533NGNG
  /* 計算部分 */
  for(i=12;i>=0;i--){
    s=vc1[i]+vc2[i]+up_s;
    up_s=0;
    if(s<10)
      vc_data[i]=s;
    else{
      vc_data[i]=s-10;
      up_s=1;
    }
  }

/* vc1の表示 */
for(i=0;i<13;i++)
printf("%d",vc1[i]);
printf(" + ");
/* vc2の表示 */
for(i=0;i<13;i++)
printf("%d",vc2[i]);
printf(" = ");
/* 計算結果の表示 */
for(i=0;i<13;i++)
printf("%d",vc_data[i]);
putchar('\n');
return(0);
}
0555デフォルトの名無しさんNGNG
555
0556デフォルトの名無しさんNGNG
>>551
機種依存関数を使わないとできないと思うよ。
(この問題はたしかFAQにもあった)
0557548NGNG
>>552
多倍長整数ってのは、例えば short に対する long とでも思ってくれ。
553-554 はゾーン 10 進と言って、多倍長整数とは別物だ。
0558デフォルトの名無しさんNGNG
>>556
DOS/Windows なら getch() ね。
0559デフォルトの名無しさんNGNG
>>557
>多倍長整数ってのは、例えば short に対する long とでも思ってくれ。

これは違うだろ。
0560デフォルトの名無しさんNGNG
>>559
じゃあどういうこと?
以外にどこにも書いてないよ
多倍長の定義って。
0561デフォルトの名無しさんNGNG
>>560
定義はしらないけど、ネットで公開されてる多倍長整数演算ライブラリはどれも
>>533みたいに変数をいくつも使ってでかい数を計算するライブラリじゃん。
(もちろんやり方ははるかに洗練されてるけど)
0562デフォルトの名無しさんNGNG
DOSのディレクトリ名を取得する関数はなんでしょうか?
0563デフォルトの名無しさんNGNG
>>560
多倍長整数の定義はC言語自体には含まれない。
処理系が独自の型として long long などを持っていたり、
gmp のようにライブラリとして存在する。
0564デフォルトの名無しさんNGNG
>>562
_dos_findfirst() in <dos.h>
スレ違い。
0565557NGNG
559 で何故否定されたのか理解できない・・・
0566デフォルトの名無しさんNGNG
>>564
すいません。有難う御座いました。
0567デフォルトの名無しさんNGNG
>>561
ってことは>>533でも一応は
多倍長演算になってる?
0568デフォルトの名無しさんNGNG
>>561
勘違いされるからその表現はやめてくれ。
多倍長整数は、整数というからにはバイナリで整数だ。
「変数をいくつも使ってる」 ように見えるのは、単にデータが複数回に分けないと
アクセスできない大きさだからだ。
0569デフォルトの名無しさんNGNG
>>568
結局>>567の答えは?
ってたぶん「なってない」だよね。
どうやって出力したらいいんだろ。
バイナリって2真数のことだっけ?
あーわからん。
0570デフォルトの名無しさんNGNG
>>568
ええ?
じゃあ、単にlongを使っただけで多倍長整数?
0571デフォルトの名無しさんNGNG
>>567
なってない。あれは単なるゾーン計算。
しかし、関数も教えていない学生に多倍長演算を出題する講師もまた DQN だな。
0572デフォルトの名無しさんNGNG
>>570
sizeof(long)==sizeof(short)*2 の環境ならそれでも間違いではないけど、
そもそもそれじゃ 1 兆を表現できないでしょ。
一般的に多倍長演算は、処理系で扱えないサイズの整数をなんとか扱おうという
仕組みの事を指すよ。
0573デフォルトの名無しさんNGNG
double使えばいいじゃん。
0574デフォルトの名無しさんNGNG
ちなみに 1 兆 = 0xE8D4A51000 だね。最低 40bit 要る。
short * 3 の 48bit か、long * 2 の 64bit で計算するといいだろうね。
0575デフォルトの名無しさんNGNG
>>573
>>506
0576デフォルトの名無しさんNGNG
とりあえず、みんなの言ってることが火星語にしか聞こえないオレは
ゾーン演算とやらで、このレポートを提出します。
みんなありがとう。
0577デフォルトの名無しさんNGNG
ユーザーにカンマを挟んで二つの数字を入力させたいのですが
(ユーザーはカンマも打ち込む)(入力例:2,3)
scanf("%d"",""%d",&x,&y);
とするとうまくいきます。
うまくいくんですが、"%d"に挟まれた","が
どういう働きをしてるのか調べても本に載ってません。
コメントを書かなくてはならないので
ご存知の方どうか教えてください。お願いします。
0578デフォルトの名無しさんNGNG
>>577
可変個の引数をとるからコンパイルエラーにはならないけど、
それだと引数が多すぎるぞ。
scanf("%d%*[,]%d",&x,&y);でうまくゆくかも。
0579578NGNG
あ、よくみたら,が"で囲ってあった。
ということはその三つの文字列が連結されて・・・
0580デフォルトの名無しさんNGNG
scanf("%d,%d",&x,&y);
素直にこう書けばいいってことか。
0581578NGNG
文字集合じゃないから%*[.]なんて書かないで素直に.と書けばいいか。。
0582デフォルトの名無しさんNGNG
さげ
0583デフォルトの名無しさんNGNG
EOFってどうやって入力するんですか?
0584デフォルトの名無しさんNGNG
DOSならCtrl+Zじゃなかった?
0585583NGNG
>>584
ありがとうございました。
0586デフォルトの名無しさんNGNG
多倍長演算
数値にはunsigned short a[N+1];のような配列を用いる.ここでa[0]が整数部分、
a[1]からa[N]までが小数部分で、32768(=32768)進法で表す.たとえば3という値は
a[0]=3,a[1]=...=a[N]=0で表す.log[10]32768≒4.5154であるからm配列要素1個分が
10進4.5桁に相当する.したがって、10進で小数第1000位まで求めるには、N≒1000/4.5≒
222とする.(〜〜うんたらかんたら)
とか書いてあります。
「C言語による最新アルゴリズム事典」(P.179)より抜粋
本読めよ。
0587デフォルトの名無しさんNGNG
>>586
やべー持ってるw
でも意味わかんねー
勉強します
0588デフォルトの名無しさんNGNG
cscopeって便利ですよ
0589デフォルトの名無しさんNGNG
10進数で考えずに、intとかの使える範囲を全部使って、
効率良く詰め込む感じでしょ。
0590デフォルトの名無しさんNGNG
$ gcc christmas_plan.cgcc:No such plan$ gcc date_with_lover.cgcc:No such lover
0591デフォルトの名無しさんNGNG
_lwriteのパラメータを教えて下さい。
_lwrite(fp, (LPSTR)&fh, sizeof(fh)); だと
一番左が書き込むファイルのハンドルで、2番目が良くわかんないです。
3番目がfhのバイト数の指定ってとこまでは分かってます。(間違ってたら指摘下さい)
お願いします。
0592デフォルトの名無しさんNGNG
>>591
書き込むバッファの戦闘アドレスだろうが。
0593デフォルトの名無しさんNGNG
>>591
スレ違いぽ
0594デフォルトの名無しさんNGNG
なんでLPSTRなんかでキャストしてるんだろう?
0595デフォルトの名無しさんNGNG
doubleで表現できる範囲ってどれくらい?
処理系依存なのは分かってるけど、小数点が入ることで
どう変わるのかなって分かんない
0596デフォルトの名無しさんNGNG
>>595
IEEEフォーマットだと、

struct ieee_double {
u_int dbl_fracl;
u_int dbl_frach:20;
u_int dbl_exp:11;
u_int dbl_sign:1;
};

なので

-(2^52)*2^2047 〜 +(2^52)*(2^2047)-1

かな?
0597デフォルトの名無しさんNGNG
>>595
<float.h> の DBL_??? の定義を見てください。
DBL_DIG が 10 進での有効桁数。
表せる範囲は DBL_MIN 〜 DBL_MAX です。
0598デフォルトの名無しさんNGNG
ネットで拾った通信系のソースコード内に、

struct hoge hoge_data {
 bind: hoge_bind,
 accept: hoge_accept,
 ioctl: hoge_ioctl
};

てな構造体定義があったんですけど、この

bind:

のコロンの意味は何でしょうか?
今までこんな書式見たことない・・・制御系の基本なんだったらすみません。
0599デフォルトの名無しさんNGNG
>>598
ビットフィールドじゃないの?この文脈なら。
0600デフォルトの名無しさんNGNG
構造体のポインタを関数に渡して操作したいのですが、
bcc32でうまくいきません。

「)がありません」とか「構文エラー」とか「ひきすうが多すぎる」とか
でるのですが、どこがいけませんか?
勘違いをたぶんしてるとおもいますが。

struct Player
{
long money;
long game_num;

/* 省略。longとintしかない。 */

int luck;
}

void play()
{
plyr1.money -= 500;
printf("%ld\n",plyr1.money);
return;
}

int main()
{
Player plyr1;
plyr1.money = 10000;
play(&plyr1);
return 0;
}
0601598NGNG
あ、hoge_ioctlなどの部分は関数で宣言されてます。
OSはLinuxっす。

ioctlを呼んでいる部分はあるんすけど、hoge_ioctlとかpochi_ioctlとか…
宣言されている同種類(と思える)関数は、どこからも呼ばれている形跡がないので
もしかして上の構造体宣言は、システムコールをハックするような特別な記述なのかなーと
思ったんですが、社内誰も「そんな書式知らん」なんですよ。

>>599
早レスありがとうございます。
ビットフィールドは

型 変数名:ビットサイズ;

と違いましたっけ?
0602デフォルトの名無しさんNGNG
・・・・・・・・・・・・・・・・・ >>600

void play()

play(&plyr1);

この2行に違和感を感じないのが不思議だ。
0603デフォルトの名無しさんNGNG
>>602
あ、ゴメソ。

void play(Player *player)
です。
0604デフォルトの名無しさんNGNG
>>602
あ、ゴメソ。

void play(Player *player)
です。

#age忘れスマソ。
#つーかインデントを&nbsp;に置換しときゃよかった。
0605デフォルトの名無しさんNGNG
うわー二十カキコスマソ。
回線切れたw
0606デフォルトの名無しさんNGNG
void play(struct Player *player)

void play(Player *player)

void play(Player *player)
0607デフォルトの名無しさんNGNG
void play(struct Player *plyr1)
{
plyr1->money -= 500;
printf("%ld\n",plyr1->money);
}
0608デフォルトの名無しさんNGNG
>>598
これって構造体定義じゃなくて、変数宣言なんじゃねーの?
bindは構造体のメンバで、メンバを指定し、初期化できる仕様が
あるという話をどっかできいたようなきかなかったような…
0609598NGNG
>>608
回答どうもです。

ん〜、変数で同名のものは見当たらないので、関数へのポインタであると
思ってました。

何にせよ、 bind: のコロン部分の意味がわからない。
付けても付けなくても同じとかゆー ふざけたもんではないと思うし。

今日中にわからないと上司に頃されるわけではないので
どなたか・・・月曜までに(休出)何らかのヒントを・・・でないと犯頃しにされるかも。
0610デフォルトの名無しさんNGNG
メンバ指定の構造体部分初期化でしょ。

struct hoge {
int a;
int b;
int c;
};

struct hoge hoge_data = {
a: 1,
c: 2
};

みたいなことができるよ。少なくともgccでは。
0611デフォルトの名無しさんNGNG
何も付けてないとintになるってやつではなかろうか。
0612デフォルトの名無しさんNGNG
>>606
これがstructつけてもダメなんです。。。

ゴルァって思ってたらソース消してもた
#しかもShift-Delでゴミ箱残ってないw
#どうせクソコードだからいいよ、いいよw
0613デフォルトの名無しさんNGNG
struct Player
{
long money;
long game_num;

/* 省略。longとintしかない。 */

int luck;
};
最後に;をつける。
0614デフォルトの名無しさんNGNG
>>609
なんかいろいろ意見がでてるが、gccの拡張仕様だよ。それ。
>>608と>>610が正解。
gccのinfoが参照可能なら、C Extensions -> Labeled Elements を見てみましょう。
0615デフォルトの名無しさんNGNG
>>610
初めて見た。gccはんなこともできるのか。
0616デフォルトの名無しさんNGNG
>>613
ソース消えましたが、こんど作ったときにやってみます。

さんくすこ。
0617デフォルトの名無しさんNGNG
ビットフィールドとまぎらわしい。
struct hoge hoge_data = {
a = 1,
c = 2
};
とかだったらいいのに。
0618デフォルトの名無しさんNGNG
>>616
>>607は無視か?
struct foo *hoge;なら
hoge->a か (*hoge).a だぞ。
hoge.aはダメ。
0619デフォルトの名無しさんNGNG
:ってC++でのコンストラクタ初期化子を真似たのかな。
0620608NGNG
>>614
フォローありがと。

>>617
オレも似たような感想を持ったんで、印象に残ってた。
a = 1だと式になっちゃうから、何かとまずいんでは。
0621598(609)NGNG
>>608=620
>>610
>>614
おおう! 知識人さん情報ありがとうございます from 無知人

ううむ・・・拡張仕様でつか。
それで再度確認してみます。

これで上司に頃されないですむ・・・しかも今日中にヒントが得られたと言って
安心させることができる!




と思ったら、さっきトイレ行ってた間に上司帰ってしまって鬱。。。

0622デフォルトの名無しさんNGNG
正解はこれだ!
struct hoge hoge_data = {
a := 1,
c := 2
};
0623598(609)NGNG
ん?
ioctlやbindってのは、構造体ではなくてlinuxのシステムコール関数のはずなんですが・・・

余計わけわからん(T−T
GCCの解説ページでも探して、解決目指します。
情報どうもでした(引き続き何か情報あればお願いします・・・まだまだ帰れそうにないので)
0624598(609)NGNG
んんん?

てことは、システムコール関数へのポインタとユーザー関数へのポインタを
結びつけて、結果的にシステムコール関数が呼び出されたらユーザー定義の
関数へ流れるよう、ハックしていることになるのかいな???


あーむず。10分ほど休憩しよう。。。
0625デフォルトの名無しさんNGNG
>>622 禿げ導
0626デフォルトの名無しさんNGNG
>>598の質問って以前にあった気がするんだが…。見た時デジャブを感じた。ビットフィールドと主張した奴がいて、その後gccの拡張仕様だと分かって最初に主張してた奴がコケにされてた気がする。
0627デフォルトの名無しさんNGNG
598はstruct hoge の定義を読めば?
hogeのioctlが関数へのポインタか、何かの変数なのか調べる。
0628598(609)NGNG
正直に一部バラします。これで職場バレることが無いことを祈る・・・

拾ったのはGNUとして公開されている某通信系のソースコードで、基本的な概念の説明としてテキストファイルがちょこっと同梱されている以外は
ソースコード内にもコメント一切なし(あっても、 ret = xxx; /* set return code */ 程度)、で泣く泣く解析しているところなんです。

Linux板の某スレで超初心者として質問したこともあり・・・。初Linux・初通信系・初デバイスドライバで頭壊れそうですわ。
んで、その定義部分。

/* Protocol family operations */

struct proto_ops rpf_ops = {
family:PF_AFFIX,
release:rpf_release,
bind:rpf_bind,
connect:rpf_connect,
socketpair:sock_no_socketpair,
accept:rpf_accept,
getname:rpf_getname,
poll:datagram_poll,
ioctl:rpf_ioctl,
listen:rpf_listen,
shutdown:sock_no_shutdown
setsockopt:rpf_setsockopt,
getsockopt:sock_no_getsockopt,
sendmsg:rpf_sendmsg,
recvmsg:rpf_recvmsg,
mmap:sock_no_mmap
};

これ以上の説明なし。 なんとかなるかいな〜
0629デフォルトの名無しさんNGNG
>>628 分からんならマニュアル嫁
ttp://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Designated-Inits.html#Designated%20Inits

struct point p = { .y = yvalue, .x = xvalue };
is equivalent to
struct point p = { xvalue, yvalue };

Another syntax which has the same meaning, obsolete since GCC 2.5,
is fieldname:, as shown here:
struct point p = { y: yvalue, x: xvalue };
0630デフォルトの名無しさんNGNG
>>618
Thax.

> >> 607は無視か?
なんかgcc関連の話題で見過ごしてた。ス
0631デフォルトの名無しさんNGNG
>>628
struct proto_ops は include/linux/net.h にあるみたいやね。
http://rainbow.mimuw.edu.pl/SO/Linux/Kod/include/linux/net.h.html
ほとんど関数だし、こっちでつくった関数をカーネルにわたすんじゃない?
0632デフォルトの名無しさんNGNG
>>628
プロトコル毎に関数のポインタを構造体にしてるだけじゃないのか?
下位部分から rpf_ops->bind(...) みたいにして使うんでしょ。
パッと見ただけでわかるやん…
0633デフォルトの名無しさんNGNG
ソースファイル消したのならここから拾えば良いと思ったが、
該当するのかしないのか??
0634デフォルトの名無しさんNGNG
>>633
何を言ってるの?
0635デフォルトの名無しさんNGNG

(,, ゚д゚) ┳┳┳┳┳
0636デフォルトの名無しさんNGNG
ある配列について、その添字の値の範囲を制限したいとき、どうすればいいですか?
例えば、その配列の添字に使うために特別に用意したtypedef enumを使えば、その
タイプを添字に使う限りはいいと思うのですが、そうではなく、もっと一般的に、汎
整数型の添字を使った場合に、コードの中で検査しなくても自動的になんらかの対策
をとる方法はありますか?
0637デフォルトの名無しさんNGNG
>>636
スマートな回答は無い。
配列を直接扱わず、配列を操作する関数を作る事ぐらいしかできない。
あるいは、C を諦めて C++ に移行する。
0638デフォルトの名無しさんNGNG
>>636
どういう対策をとりたいのかによって
返事は変わってくると思われ。
0639デフォルトの名無しさんNGNG
>>636
operator[]を定義して、添え字の値次第で例外を投げるとかにすれば?
0640デフォルトの名無しさんNGNG
>>636
境界線チェックをきちんとするということ?
なら>>637がいうように関数をつくることしか・・・・

そういえばC++ Primerの配列クラスの作成のところにまさにそんなものがあったような。
0641デフォルトの名無しさんNGNG
>>639
なにを言っているのかわかりませんが? と突っ込んでみるテスト
0642デフォルトの名無しさんNGNG
a[n%N];
0643デフォルトの名無しさんNGNG
正直、642 のコードは役に立たないと思う。
デバッグが難しくなるから、素直に core 吐いて落ちてくれる方がマシだ。
0644デフォルトの名無しさんNGNG
でも、巧いとはオモタな。
>636には理解できたろうか?
0645デフォルトの名無しさんNGNG
if(n<0||n/N>=1)
goto label;
a[n];
label:
0646636NGNG
>>644
Nを要素数にすればn%Nの解が0からN-1になるってことでしょ?
0647デフォルトの名無しさんNGNG
>>646
当たり。でも 643 参照。
実際のところは 645 にして、エラー処理をするべき。
0648デフォルトの名無しさんNGNG
CGIを作ってるんですが、
&を入力されると、
test1=1&test2=2&3 (test2に2&3を入れた)
のようになり、うまく切り分けることができません。
&の時はエラーを出すようにするしかないんでしょうか?
0649デフォルトの名無しさんNGNG
>>648
%2fに変換しろ
0650デフォルトの名無しさんNGNG
>>648
ん、それってブラウザの問題じゃないの。
URLエンコーディングしてないってことでしょ。

そんなブラウザあるの?
0651デフォルトの名無しさんNGNG
char * const srcと
const char *strの違いがよく分からん。
上のは「srcは、キャラ型への読み出し専用のポインタ」で、
下のは「srcは、読み出し専用のキャラ型へのポインタ」?
違いが全然わかんねー。だれか分かりやすく教えてくり。
0652デフォルトの名無しさんNGNG
>>651
上は src = NULL; とするとエラーになる。
下は *src = 'A'; とするとエラーになる。
0653デフォルトの名無しさんNGNG
>>651
const char*はポインタの指す値を変えられない。char* constはポインタの指す
値は変えられるがポインタそのものは変えられない。
0654デフォルトの名無しさんNGNG
>>651
http://member.nifty.ne.jp/maebashi/programmer/pointer.html
0655デフォルトの名無しさんNGNG
擬似的に()でくくってみるとわかるYO

( (char *) const) src; ポインタがconst
( (const char) *) str; charがconst
( (char const) *) str;の方が対比としてはわかりやすいかも。
「後置の*はconstより優先度が低い」と覚えればよい。
0656デフォルトの名無しさんNGNG
ちなみにchar const*とconst char*は同じだYO。
0657デフォルトの名無しさんNGNG
例えばポインタ演算子 **p は右から順に結合する。つまり、(* (*p) ) という事だ。
これと同じように考えればいい。

つまり char * const p; は (* (const p)) であり、p そのものを変更する事はできない。
p が指す先を変更する事はできる。

一方 char const * p; は (const (*p)) であり、p そのものは変更する事ができる。
p が指す先を変更する事はできない。

そして char const * const p; は (const (* (const p) ) ) であり、p も p が指す
ものも変更できない。

なお const char * p; は char const * p; と全く同一である。


654-655 の説明は、かえってわかりにくいと思う。
「ポインタ演算子と同じく右から順に結合する」 と覚えればよい。
0658デフォルトの名無しさんNGNG
練習問題:
char const **p; // 1
char *const*p; // 2
char **const p; // 3
pへの代入がエラーになるのはどれ?
*pへの代入がエラーになるのは?
**pへの代入がエラーになるのは?
0659デフォルトの名無しさんNGNG
>>648
http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1
0660デフォルトの名無しさんNGNG
>>648
俺はとりあえず通常通り切り出して、必要なキーをもつ値が見つからなければエラーにするようにしているよ。
0661デフォルトの名無しさんNGNG
>>648
pへの代入がエラーになるのは3
*pへの代入がエラーになるのは2
**pへの代入がエラーになるのは1
0662デフォルトの名無しさんNGNG
>>657
じゃあ
char const *p1, *p2;
はどう説明するんだYO
0663デフォルトの名無しさんNGNG
リードオンリーのポインターって使うことある?
配列名はリードオンリーのポインタだという意見はなしで。
0664デフォルトの名無しさんNGNG
>>662
それってchar (const *p1), *p2; って意味でしょ。
0665デフォルトの名無しさんNGNG
環境はVC++.netなのですが、
Cのrand関数を使って乱数を取得したときに5桁の整数が最大になってしまうのですがなぜでしょうか?
7桁の乱数を取得したいのですが・・・
0666デフォルトの名無しさんNGNG
2つとって掛け合わせるなど、工夫して見たら?
0667デフォルトの名無しさんNGNG
>>665
> 5桁の整数が最大になってしまうのですがなぜでしょうか?

そういう仕様だからしかたないよ。
0668デフォルトの名無しさんNGNG
>>665
自前でrand()作れ。
0669デフォルトの名無しさんNGNG
>>665
(long)rand() * RAND_MAX + rand()とかすれば?
0670デフォルトの名無しさんNGNG
>>669
それじゃ、出目が偏るでしょ。
0671651NGNG
char const*とconst char*は一緒なんだ。
const考えるときは型名排除して考えるって感じかな。
ところで上の二つの書き方はどっちの方が好ましいの?
0672666げtNGNG
単に掛け合わせると偏りが出るもんな。ゴメン
0673デフォルトの名無しさんNGNG
>>665
rand() が返す値は 0 〜 RAND_MAX です。
RAND_MAX は <stdlib.h> で定義されています。
0674デフォルトの名無しさんNGNG
>>670
そうか?
0675デフォルトの名無しさんNGNG
>>671
どっちでもいい。
ただ漏れの意見としては、const が頭の方が定数である事を強調してていいと思う。
0676デフォルトの名無しさんNGNG
>>664
違うよ。
char const *p1, *p2;
p1もp2もchar const *だよ。
0677デフォルトの名無しさんNGNG
>>676
そしたら
char const *p1, const *p2;
って書いたらエラー?
0678デフォルトの名無しさんNGNG
>>665
(int)(
((double)rand() * (RAND_MAX + 1) + rand())
/ ((RAND_MAX + 1) * (RAND_MAX + 1) - 1)
* 1000000000.0
)
0679デフォルトの名無しさんNGNG
>>675
オレもそう思う。
読むのは慣れれば自然にわかるようになるから
書きやすい方でいいと思うよ。
オレは*const pとか使ったこと全然なかったから、
ずっとconstを先頭にもってきてた
0680デフォルトの名無しさんNGNG
double a[N][N];
double det(const double matrix[][N]); // 書き換えないのでconstつけた
これでdet(a)と呼ぶと警告が出るんだけど、どうするのが正しいの?
0681デフォルトの名無しさんNGNG
>>677
エラーだよ。
だから>>657に納得できないの。
0682デフォルトの名無しさんNGNG
>>680
どんな警告?それでいいんじゃないの?
0683デフォルトの名無しさんNGNG
>>682
良くないらしい。
warning: passing arg 1 of `det' from incompatible pointer type
0684デフォルトの名無しさんNGNG
>>678
それって、RAND_MAXがたとえば0x10000だったら、うまく動かないでしょ。
0685デフォルトの名無しさんNGNG
閑話だが、rand() 関連でこんなページ見つけた。
http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/letsc/6-body.html
これを書いた香具師はアフォか?
0686デフォルトの名無しさんNGNG
>>684
どんなコンパイラ?gcc3.2だとエラー出ないぞ。
0687デフォルトの名無しさんNGNG
>>685
間違いなくアフォです。
0688デフォルトの名無しさんNGNG
>>684 何で?
0689デフォルトの名無しさんNGNG
>>688
出目に偏りがでるよ。
0690デフォルトの名無しさんNGNG
>>684
gcc 2.95.3ではでないぞ(-Wallもつけた)
0691690NGNG
レス先間違えた。
>>683です。
0692デフォルトの名無しさんNGNG
>>686
char const *p1, const *p2;
parse error before `const'
gcc 2.96
0693デフォルトの名無しさんNGNG
>>689
もちろん rand() を 2 回呼ぶ事で偏りは大きくなるけど、それは RAND_MAX が
いくつかどうかは全く関係無いでしょ。
0694665NGNG
仕様だったのですか。
どうすればいいのでしょうか。アドバイスお願いします。

0695デフォルトの名無しさんNGNG
>>694
自分で乱数発生関数をかく。
0696デフォルトの名無しさんNGNG
>>693
つーか、RAND_MAX+1って、たとえば0x7fffみたく+1して、
(2進数で)桁上がりする数値を想定してるでしょ。
たいていの処理系はそうだろうけど、そういう保証はないし。
0697デフォルトの名無しさんNGNG
>>694
乱数の生成ルーチンは検索すれば、いいのが見つかるんじゃないの?
0698デフォルトの名無しさんNGNG
>>690
出るよ。-Wallつけなくても。
それに、出て当然だ。
const T *とT *はcompatibleだが、
const T **とT **や
const T *[N]とT *[N]はcompatibleでないから。
0699デフォルトの名無しさんNGNG
>>698
gcc3.2でも警告でないんですけど・・・・
0700デフォルトの名無しさんNGNG
>>693
RAND_MAX+1が2のべき乗でないと、
2つの一様分布乱数を足し合わせることになって、
一様分布でなくなる。
0701デフォルトの名無しさんNGNG
趣味でC言語やってみたいと思ってるんですが、
一万円程度も出して買う価値ありますか?
0702デフォルトの名無しさんNGNG
>>699
gcc-2.96.1とegcs2.91とVC++6.0とSun Forte 6.0では警告でマシタ。
0703デフォルトの名無しさんNGNG
>>701
ありません。フリーのを使いましょう。
0704デフォルトの名無しさんNGNG
>>702
ということはgcc3.2の-Wallって糞?
0705デフォルトの名無しさんNGNG
>>696
> 桁上がりする数値を想定してるでしょ

してないよ。何で?
範囲が 0 〜 RAND_MAX の場合、発生する乱数の数値の数は常に (RAND_MAX + 1)
でしょうが。
まず手始めに、RAND_MAX == 2 くらいだった時のケースを考えてみなさい。
0706デフォルトの名無しさんNGNG
>>700
2 進数で考えるなよ。
(RAND_MAX + 1) 進数で考えろ。
0707デフォルトの名無しさんNGNG
>>705
「桁上がり」という言葉が悪かったかな。
言いたいのは>>700と同じ。
0708デフォルトの名無しさんNGNG
>範囲が 0 〜 RAND_MAX の場合、発生する乱数の数値の数は常に (RAND_MAX + 1)
>でしょうが。

わけわからん…
0709デフォルトの名無しさんNGNG
678 は - 1 必要無いよ・・・。

>>665
(int)(
((double)rand() * ((double)RAND_MAX + 1) + rand())
/ (((double)RAND_MAX + 1) * ((double)RAND_MAX + 1))
* 1000000000.0
)
0710デフォルトの名無しさんNGNG
>>705
(RAND_MAX+1)が2のべき乗じゃなくて、かつ
RAND_MAX*(RAND_MAX+1)がdoubleの有効桁より大きかったら?
0711デフォルトの名無しさんNGNG
ctimeの戻り値で戻ってくる文字列へのポインタは何者なのでしょうか?
誰が確保して誰が開放しているの?
グローバル変数?
0712デフォルトの名無しさんNGNG
>>710
桁落ちするね。
0713デフォルトの名無しさんNGNG
define N 10
double det(const double matrix[][N]) { return 0.0; }
double a[N][N];

int main()
{
det(a);
return 0;
}
これで本当に警告でないの?
0714デフォルトの名無しさんNGNG
>>710
その場合はそもそも 665 の質問が出てこない。

>>711
グローバル変数。
static で確保されている。
勝手にいじりまわしたりしないように。
0715デフォルトの名無しさんNGNG
>>713
出る。defineの前に#がない。・・・・・
というのは冗談で、-Wallにしても本当にgcc3.2(MinGW)では通ります。
0716デフォルトの名無しさんNGNG
>>711
staticな領域へのポインタを返す。
だからリエントラントでないし、2回呼んだら前の値は壊れる。
0717デフォルトの名無しさんNGNG
713 のソースのどこに問題があるんだ?
(define の # は置いといて)
0718デフォルトの名無しさんNGNG
>>705
>まず手始めに、RAND_MAX == 2 くらいだった時のケースを考えてみなさい。

RAND_MAX が 2 で下記の計算を実行したら、
(rand() * (RAND_MAX + 1) + rand())

出目の確率はそれぞれ下のように偏るよ。

0=50%
1=25%
2=0%
3=25%
0719デフォルトの名無しさんNGNG
>>715 ↓これは?
int main()
{
const char **p;
char **p2;
p = p2;
return 0;
}
0720デフォルトの名無しさんNGNG
>>717
>>698参照
0721デフォルトの名無しさんNGNG
>>719
それは警告出ました。
invalid conversion from 'char**' to 'const char**'だそうです。
0722718NGNG
>>718は間違いだ。ごめん。
0723デフォルトの名無しさんNGNG
>>718
RAND_MAX == 2
↓
(RAND_MAX + 1) == 3
↓
rand(/*1*/) * (RAND_MAX + 1) + rand(/*2*/)
   0   *   3     +   0    = 0
   0   *   3     +   1    = 1
   0   *   3     +   2    = 2
   1   *   3     +   0    = 3
   1   *   3     +   1    = 4
   1   *   3     +   2    = 5
   2   *   3     +   0    = 6
   2   *   3     +   1    = 7
   2   *   3     +   2    = 8

何で結果の範囲が 0 〜 3 なわけ?
0724718NGNG
> 何で結果の範囲が 0 〜 3 なわけ?

すまん。
頭の中で % 2でやってしまった。
0725デフォルトの名無しさんNGNG
>>720
const 値を非 const 仮引数に渡すのはダメだけど、
非 const 値を const 仮引数に渡すのが何故いけない?
0726デフォルトの名無しさんNGNG
>>725
いけなくないと思うが・・・
いけなかったら
char s1[1024],s2[]="abc";
strcpy(s1,s2);
とかできないし。
0727726NGNG
悪い。
いけないと言っているのは>>720か。
0728デフォルトの名無しさんNGNG
>>719
↓ちなみにこれですと警告出ません。
int main()
{
const char *const*p;
char **p2;
p = p2;
return 0;
}
0729723NGNG
で、漏れは結局 >>700 とかが何を訴えたかったのかわからない。
(RAND_MAX + 1) 進数で考えた時、
rand(/*1*/) * (RAND_MAX + 1) は必ず 2 桁目になり、rand(/*2*/) は必ず
1 桁目となって絶対にぶつからず、足し合わされる事は無い。
なのに、そんなに偏りが出たりするわけ?
それと、2 のべき乗か否かは分布に何の関係があるの?
0730デフォルトの名無しさんNGNG
>>725
なぜかは知らんが↓のように決まっているらしいYO

void f(char const **);
void g(char * const *);
int main()
{ char *p;
f(p); // NG
g(p); // OK
return 0;
}
0731デフォルトの名無しさんNGNG
>>719 >>728
>>655
0732デフォルトの名無しさんNGNG
>>723
doubleじゃなくて、長い整数で計算するのかと思ったんだよ。
>rand(/*1*/) * (RAND_MAX + 1) は必ず 2 桁目になり、rand(/*2*/) は必ず
>1 桁目となって絶対にぶつからず、足し合わされる事は無い。
整数なら2桁目の計算が溢れたときぶつかるよね。
0733デフォルトの名無しさんNGNG
INT compare(STRING s1, STRING s2)
BEGIN
 WHILE *s1++ == *s2
 DO IF *s2++ == 0
  THEN return(0);
  FI
 OD
 return (*--s1 - *s2);
END

これは何をやっている処理なのでしょうか?
0734725NGNG
>>730
char* と char** は元々非互換だが?
0735デフォルトの名無しさんNGNG
>>733
1 億光年スレ違い。
0736デフォルトの名無しさんNGNG
#define BEGIN {
#define END }
0737デフォルトの名無しさんNGNG
>>733
何じゃこの言語は?
0738665NGNG
つーか具体的にどうすればいいか教えてちょ
0739デフォルトの名無しさんNGNG
>>734
まちがえた。
char **p;
0740デフォルトの名無しさんNGNG
#define WHILE while(
#define DO ){
#define OD }
#define IF if(
#define THEN ){
#define FI }
0741733NGNG
>>737
Cですが、何か問題がありますか?
0742725NGNG
>>730
もしかして char *p; は char **p; の間違いか?
それでも、いずれにせよ >>725。
いったいその情報はどこから出てきた?
0743デフォルトの名無しさんNGNG
>>733
CをPascalのソースのようにみせかけるマクロ群か?(w
0744デフォルトの名無しさんNGNG
>>733
strcmp() と同じ処理。
でも、そのようなソースを書く香具師は足蹴りにしていい。いや、そうすべきだ。
0745デフォルトの名無しさんNGNG
int compare(char *s1, char *s2)
{
 while (*s1++ == *s2)
  if (*s2++ == 0) return(0);

 return (*--s1 - *s2);
}
0746デフォルトの名無しさんNGNG
>>733
単にstrcmpを少し効率悪くコーディングしただけだと思うが。
0747デフォルトの名無しさんNGNG
>>733
Cだとこうなのかな?

int compare(char *s1, char *s2)
{
while( *s1++ == *s2) {
if(*s2++ == 0) return 0;
}
return *--s1 - *s2;
}
0748デフォルトの名無しさんNGNG
>>738
とりあえず >>709 でしのげ。
乱数の内容に不満があるなら、Web で乱数ライブラリを探せ。
0749723NGNG
>>732
すまん、レス見落としてた。

> 整数なら2桁目の計算が溢れたときぶつかるよね。
了解。
ただし、その場合は >>714。

で、
> 2 のべき乗か否かは分布に何の関係があるの?
これには答えてくれぬのかのう、>>700 の人。気になるんだが。
0750749NGNG
> > 整数なら2桁目の計算が溢れたときぶつかるよね。
> 了解。
> ただし、その場合は >>714。

すまん、見逃してくれ・・・。
0751デフォルトの名無しさんNGNG
>>749
いや、単に2のべき乗なら、(RAND_MAX+1)かけるかわりに
左シフトすれば、下位はぶつからなくなると思っただけです(敬語)
0752751NGNG
あ、というか、2のべき乗なら掛け算してあふれてもぶつからないよね。
0753デフォルトの名無しさんNGNG
つまり、
char random_=rand(20)+rand(20)*20;
とかだったりすると、
取り得る最高値が、399で、mod(256)かかった時に、
399-256=143
143以上(少しずれるのかも)の値が出にくいと言う偏りが出るって事ですよね。
RAND_MAXとchar,int,longのずれが偏りを産むような。
0754749NGNG
>>751
そうか。了解。
700 を見る限り、2 のべき乗じゃないと何か問題があるとしか読めないから。
安心した。
でも敬語はよして (;´Д`)
0755749NGNG
>>753
待った。いつ mod(256) なんかかかる?
>>709 の式をよく見てくれ。
double で割って掛けて割合を出している。
0756デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define RAND_NUM ((double)RAND_MAX + 1)
int main()
{
  unsigned r, i, cnt[10];
  srand(time(NULL));
start:
  memset(cnt, 0, sizeof(cnt));
  for(i = 0; i < 2000000; i++)
  {
    r = (unsigned)( (rand() * RAND_NUM + rand()) / (RAND_NUM * RAND_NUM) * 1000000000.0);
    cnt[r / 100000000]++;

  }
  for(i = 0; i < 10; i++)
    printf("%u ", cnt[i]);
  putchar('\n');
  goto start;
  return 0;
}
0757753NGNG
charで。
例えだよ。
実数型であれば問題無い。と思う。
0758755NGNG
>>757
ああ、732 の解説を入れてたのね。了解。
0759756NGNG
756 は誤爆。
乱数の結果の 1 〜 7 桁目について、0 〜 9 のそれぞれの出現回数をサンプリングする。
試しに実行したけどまあまあなばらつき。各要素が 100000 付近に落ち着く。

#define RAND_NUM ((double)RAND_MAX + 1)
int main()
{
  unsigned r, i, j, cnt[10];
  unsigned div[7] = { 1000000, 100000, 10000, 1000, 100, 10, 1 };
  srand(time(NULL));
start:
  for(i = 0; i < 7; i++)
  {
    memset(cnt, 0, sizeof(cnt));
    for(j = 0; j < 1000000; j++)
    {
      r = (unsigned)( (rand() * RAND_NUM + rand()) / (RAND_NUM * RAND_NUM) * 10000000.0);
      cnt[r / div[i] % 10]++;
    }
    printf("%u: ", i + 1);
    for(j = 0; j < 10; j++)
      printf("%u ", cnt[j]);
    putchar('\n');
  }
  putchar('\n');
  goto start;
  return 0;
}
0760751NGNG
>>742
ポインタの代入やパラメタ渡しの際には、変数と値がcompatibleであるか、
値が変数へconversionできる必要がある。
const TへのポインタとTへのポインタはcompatibleでない。
TへのポインタはT constへのポインタにconversionできる。
なので、char ** 型の値((char*)へのポインタ)は、
char *const *p ((char *)constへのポインタ型変数)には代入できるが、
const char **p ((const char)*へのポインタ型変数)に
代入することは出来ない。
同様に、double (*)[N] ((大きさNのdouble配列)へのポインタ)は、
double const (*)[N] ((大きさNのdouble constの配列)へのポインタ)
に代入できない。
ISO-C99規格の6.3.2.3と6.7.3を参照。
0761デフォルトの名無しさんNGNG
>>760 もし本当なら、なぜ↓で警告が出るんで塚?
#define N 10

typedef double T[N];

double det(T const * matrix) { return 0.0; }

T a[N];

int main()
{
det(a);
return 0;
}
0762デフォルトの名無しさんNGNG
>>760
「なので」 の前と後ろが全然繋がっていない。
FDIS 1999 の 6.3.2.3 と 6.7.3 のどこを見ればそんな解釈ができるんだ?
「なので」 の後ろの部分のように判断した文を引用してくれ。

>>761
まず、コンパイラは何を使っているか晒してくれ。
0763デフォルトの名無しさんNGNG
>>761
漏れの使っているどのコンパイラでも警告出ないよ。
コンパイラは何を使ってるの?
0764デフォルトの名無しさんNGNG
>>760
1 つ減らして考えてみようか。
typedef char* LPSTR;

> char ** 型の値((char*)へのポインタ)は、
> const char **p ((const char)*へのポインタ型変数)に
> 代入することは出来ない。

LPSTR* 型の値(LPSTR へのポインタ)は、
const LPSTR *p (const LPSTR へのポインタ型変数)に
代入することは出来ない。

・・・何でだよ。
↓はどうなった?

> TへのポインタはT constへのポインタにconversionできる。
0765デフォルトの名無しさんNGNG
>>764
おいおい。const LPSTR *はLPSTR const *と同じなんだから、
char * const *だろう。
0766デフォルトの名無しさんNGNG
>>764
LPSTRへのポインタはLPSTR constへのポインタにconversionできるよ。
>const LPSTR *p (const LPSTR へのポインタ型変数)に
これはLPSTRへのconstポインタ型変数であって
(const LPSTR)へのポインタ型じゃない。
0767764NGNG
>>765
そーだ、逝ってくる・・・。
ところで、760 にはどう思うの?
0768デフォルトの名無しさんNGNG
>なので、char ** 型の値((char*)へのポインタ)は、
>char *const *p ((char *)constへのポインタ型変数)には代入できるが、
>const char **p ((const char)*へのポインタ型変数)に
>代入することは出来ない。
typedef char *T; としよう。
T*はT const *へconversionできるが、const char **へはconversionできないし
compatibleでもない。Tとconst char *は別の型だから。
わかった?
0769760NGNG
あ、>>768も俺ね。
ポインタの代入ができるのは、
6.5.16.1 (1) both operands are pointers to qualified or unqualified
versions of compatible types, and the type pointed to
by the left has all the qualifiers of the type pointed
to by the right;
のとき。だからcompatibleでない型へのポインタは(他で許されてない限り)
代入しちゃいかんのよ。
0770デフォルトの名無しさんNGNG
>> 768-769
> Tとconst char *は別の型だから。

const 値と非 const 値は、確かに別の型だ。
しかし、別の型だからというだけの理由で変換ができないなら、

> T*はT const *へconversionできる

のは何故だ?

> T*はT const *へconversionできるが、const char **へはconversionできないし
> compatibleでもない。Tとconst char *は別の型だから。

T*はT const *へconversionできるが、const char **へはconversionできないし
compatibleでもない。

> Tとconst char *は別の型だから。

char* が const char* に変換できないなら、char は const char に変換できないのか?
いいや違う。

char* は const char* に変換できる。
でなければ strcmp() 等はプロトタイプが間違っている事になるが、実際はそうではない。

従って char** は const char** に変換できる。

> だからcompatibleでない型へのポインタは(他で許されてない限り)代入しちゃいかん

それは了解。
だが、char* が const char* に変換できないとはどこに書いてある?
0771770NGNG
追記。
char** は、const char** の役割を充分に果たす。
なのに compatible でないと言いきるのか?
(逆は成り立たないが)
0772デフォルトの名無しさんNGNG
どうでもいいけど 769 は 760 で示したのとは違う場所を引用してるな。
自分の論に都合のよさそうな場所をみつくろってるだけか?
726 も無視してるみたいだし。
0773デフォルトの名無しさんNGNG
>>768
(char) * と (char) const * が別と言うなら、
(char *) * と (char *) const * も別だろう。
0774デフォルトの名無しさんNGNG
>> T*はT const *へconversionできる
>のは何故だ?
規格にそう書いてあるから。
6.3.2.3 (2) For any qualifier q, a pointer to a non-q-qualified
type may be converted to a pointer to the q-qualified
version of the type; the values stored in the original and
converted pointers shall compare equal.

>> Tとconst char *は別の型だから。
>char* が const char* に変換できないなら、char は const char に変換でき
>ないのか?
>いいや違う。
>
>char* は const char* に変換できる。
>でなければ strcmp() 等はプロトタイプが間違っている事になるが、実際はそ
>うではない。
T * → T const *はOKなので、
char * → char const *はOKだよ。(T=char)
char ** → char *const *もOK。(T=char*)
char ** → char const **はダメ。(Tをどう置いてもうまくいかない。)

>だが、char* が const char* に変換できないとはどこに書いてある?
どこにも書いてないよ。

>char** は、const char** の役割を充分に果たす。
>なのに compatible でないと言いきるのか?
規格は言いきってるね。
6.7.6.1 (2) For two pointer types to be compatible, both shall be
identically qualified and both shall be pointers to
compatible types.
0775760NGNG
>>772
760で書いたのは「conversionできる」「compatibleである」ことを定義した箇所。
768で書いたのは「compatibleでないと代入しちゃいかん」と判断した根拠。
0776760NGNG
あ、ただし>>760で6.7.3と書いたのは6.7.6.1の間違い。
>>760で書いた
>ISO-C99規格の6.3.2.3と6.7.3を参照。
の重要な部分は>>774に示したから、>>762にも答えたことになると思う。
0777760NGNG
>(char) * と (char) const * が別と言うなら、
>(char *) * と (char *) const * も別だろう。

compatibleではない。
しかしconversionできる。>>774の通り。
0778770NGNG
らじゃ。
個人的には、char * → char const * の時点で valid で、それ以上いくつ
ポインタがネストしても OK のような気はするんだが・・・。
規格書じっくり読んでみる。
0779760NGNG
俺もそう思ってたけど、1段しかダメなんだよー。
実際、const char **にchar **を代入すると警告出るだろ?
0780デフォルトの名無しさんNGNG
これはエキスパートCプログラミングの48ページからの話題ですか?
0781デフォルトの名無しさんNGNG
>>780
そうなの?
なんて書いてあるの?
0782770NGNG
>>779
ところが、VC6 ではそのままスルー。

今 gcc で試したら警告出た。
あれと思って VC6 の方で拡張子を c から cpp に変えたら、警告じゃなくて
エラーになった。
もしかして、ANCI C では OK だったんじゃないか?
だとしたら、漏れらが OK だと思い込んでいたのも頷ける。
0783デフォルトの名無しさんNGNG
バリバリの明示型キャスト!!
これ最強!!これ最強!!
0784デフォルトの名無しさんNGNG
>>783
ま、警告を抑制するためだけとかのキャストは最強にクソだわな。
0785デフォルトの名無しさんNGNG
>>784
でもしかたない場合もあるよ。
例えばstrchrの中でreturnする時。
あれはキャストするしかないよ。第一引数の型はconst char *と決まっているんだから。
0786デフォルトの名無しさんNGNG
最近のコンパイラは、明示的であっても危険なキャストは警告出すんじゃないか?
0787デフォルトの名無しさんNGNG
>>786
んなわきゃない
786みたいなド素人は #define {static,const,reinterpret}_cast(type,expr) ((type)(expr)) とでもしてなさいってこった。
078860cm浮き上がるストレートNGNG
>>665 遅レス∧クソコードでごめんチャイ。
VC++.netのことはよくわかりませんが、Cのを使ってもいいならこんな感じ?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long land(long);
int main(void)
{
 printf("7桁の乱数は %ld です\n",land(7));
 return 0;
}
long land(long keta)
{
 long a,b,c,r/*,d,e*/;
 srand(time(0));
 for(a=1,b=1,r=0;a<=keta;a++,b*=10)
 {
  /*e=rand()%10;
  for(d=0;d<=e;d++)
   rand();*/
  c=rand()%10;
  r+=b*c;
 }
 return r;
}
0789こういう考え方は?NGNG
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long land(long);
int main(void)
{
  printf("7桁の乱数は %ld です\n",land(7));
  return 0;
}
long land(long keta)
{
  long a,b,c,r/*,d,e*/;
  randomize();
r=floor(((double)random(RAND_MAX/*+1?*/)/RAND_MAX)*10000000l);/**/
  return r;
}
0790789NGNG
<math.h> 入れといて
<time.h> 要るっけ?
0791ダメっぽいなNGNG
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

long lrand(long keta)
{
long r;

r=floor(((double)random(RAND_MAX)/RAND_MAX)*10000000l);

return r;
}

int main(void)
{
long r1;

randomize();
printf("7桁の乱数は %ld です\n",r1=lrand(7));
printf("7桁の乱数は %ld です\n",r1=lrand(7));
printf("7桁の乱数は %ld です\n",r1=lrand(7));

return 0;
}
0792デフォルトの名無しさんNGNG
>>788
rand()%10 を使ってる時点で DQN。
理由は Web に転がっている。

>>789-791
未定義の randomize() や random() を使うな。


いいから >>759 を試せ。
0793デフォルトの名無しさんNGNG
いきなりエラーが8個もでますが。
0794デフォルトの名無しさんNGNG
>>793
適切なヘッダはインクルードした?
0795デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
0796628NGNG
>>629
>>631
ほか

ヒントどうもっす!
火曜に現場で確認してみます。
0797デフォルトの名無しさんNGNG
if( aaa && bbb && ccc )
if( aaa | bbb | ccc )

の、aaa~cccの評価の順番はどうなりますか?
0798デフォルトの名無しさんNGNG
if( aaa || bbb || ccc )およびif( aaa + bbb + ccc )と、if( aaa * bbb * ccc )もおながいします。
0799デフォルトの名無しさんNGNG
>>797
ttp://www-ccs.ucsd.edu/c/express.html#sequence%20point
0800デフォルトの名無しさんNGNG
C言語を用いた回路合成システムBach
http://www.sharp.co.jp/corporate/rd/journal-78/13-5-3a.htm

こういうハードウェア設計システムでつかわれる拡張(?)C言語では
C言語に演算のビット幅指定やローテート命令が拡張されているのですが、
普通にCでプログラムを組んでいてもそういうビットがらみの演算って必要なことがありますよね?

俺はインラインアセンブラでやっているのですが、正直、エレガントでないと思うこのごろ。
ポータブルに書くためにはどうしたらいいのでしょうか?
0801デフォルトの名無しさんNGNG
>>797-798
それぞれ何か適当なメッセージを表示する aaa() bbb() ccc() 関数を作れば
一目瞭然です。
0802デフォルトの名無しさんNGNG
>>800
ビットにそれぞれ意味を持たせるなら構造体のビットフィールド。
そうでなく単にシフト等を行う場合はむしろインラインアセンブラの方が
スマートです。
C にはローテイトがありませんし。
0803デフォルトの名無しさんNGNG
>>802
やっぱインラインアセンブラですか。
いままで Z80, 6809, 680x0, x86系 しかやったこと無くて、
最近(なぜか) Power4 (OSは IBM AIX5L) でやれと・・・

制御やさんなどのために、ANSI なんかで関数群が決められているのなら、
まずそっちを実装してしまおうかと考えてたんですが。

これって俺的には Z80 使って Small C 使ってたときからの永遠の課題なんです。
0804デフォルトの名無しさんNGNG
そんなことより、MMX でローテートができないのは酷い。
0805デフォルトの名無しさんNGNG
>>801
馬鹿?
0806デフォルトの名無しさんNGNG
標準関数のエラーチェックはどの程度行っていますか?
0807デフォルトの名無しさんNGNG
>>806
私は行った覚えがありません。
0808806NGNG
>>807
fopenでもですか?
勇者ですね。
0809デフォルトの名無しさんNGNG
fopenは、ファイルが無ければ作るように指定するのが俺のデフォ。
0810デフォルトの名無しさんNGNG
ディスク容量不足、ライトプロテクト等によりエラー。
0811806NGNG
読み込みに行きたいときパスが間違っていたらどうするんだろ。
エラー判定せずに空のファイルを作成して見に行くのか?
まさに選ばれし者
0812デフォルトの名無しさんNGNG
オレが新人のとき先輩から「エラーチェックはしっかりしろよ」と
言われていて「fclose()がエラーの時はどうするんですか?」と
聞いたら「それはエラーにならないからチェックしないでいいよ」と
言われた……
0813デフォルトの名無しさんNGNG
例外使えよ。
0814デフォルトの名無しさんNGNG
この場合にはfcloseが例外出してくれないと。
0815デフォルトの名無しさんNGNG
Cでも例外使えるようになったのか?
0816(;´Д`)NGNG
ファイル長を調べる方法をおしえてください
0817デフォルトの名無しさんNGNG
>>816
fseek(fp, 0, SEEK_END);
length = ftell(fp);
0818(;´Д`)NGNG
>>816
サンクスコ(;´Д`)
0819デフォルトの名無しさんNGNG
>>818
DOS/Windowsの上で、テキストモードでfopenしてるときは
817の方法だと、予想外の結果が返ってくることがあるので要注意。
0820デフォルトの名無しさんNGNG
>>812
fcloseでもディスクへの書き込みが発生するから
エラーの可能性は大いにあり。
その前にfflushしてるなら別だけど。

ネタの意味で書いたんだったらごめんよ。
0821デフォルトの名無しさんNGNG
つい最近Cを始めたのですが(プログラミング自体始めて)
CってDOS上でしか動かせないのですか?

あと、Cで作られたアプリケーションを見てみたいのですが
どこにあるのでしょうか?
0822緑茶。(ZAPONEZE) p0225-ip01kagawa.kagawa.ocn.ne.jpNGNG
>>821
0823緑茶。(ZAPONEZE) p0225-ip01kagawa.kagawa.ocn.ne.jpNGNG
>>821
失礼。Cでもwindowsアプリは作れますよ。
http://www.kumei.ne.jp/c_lang/
0824821NGNG
>>823ありがとうございます。
最近「Cはダメダメ」とか聞きますけどそれでもCを一生懸命
勉強したいと思います。

いずれはアプリケーションを作りたいです。
0825デフォルトの名無しさんNGNG
Cをだめだめって言っているやつがだめなんだよ。
2000もXPもCで作られてるのに。
0826デフォルトの名無しさんNGNG
>>825
あー、だからダメなんだ(藁
0827デフォルトの名無しさんNGNG
ANSI-C
これ何て読むんですか?
アンシ?アンジ?
0828デフォルトの名無しさんNGNG
アンシ
0829デフォルトの名無しさんNGNG
>>827
アンジーですが何か?
0830デフォルトの名無しさんNGNG
今までJava野郎でしたが、その内部にも踏み込みたいのでC(not C++)はじめました。
しかし慣れないメモリ管理などは怖いので、とりあえず何事も練習だし
JavaのStringみたいなの作ってみるかな〜と思ったのですが、
メソッドに対して自分自身のポインタを渡す方法が分かりません。
これでは、せっかく自分自身を適切に扱う関数へのポインタをメンバとして持ってても、
(strをインスタンスとして)
str.strcpy( &str , "This is Test!!");
~~~     ~~~~~
になってしまい、ダサさ&バグ100倍です。
プリプロセスでまとめて……なんての以外で、なにかうまい方法はないものでしょうか?
0831デフォルトの名無しさんNGNG
>>830
Cだとプリプロセスでごちゃごちゃやる以外にうまくやる方法はないと思うよ。
昔そのあたり追及してみたけど、おれには無理でした。

あるのなら教えて欲しい。

自分自身のインスタンスを渡す必要があるならC++使っといたほうがいいと思う。
0832デフォルトの名無しさんNGNG
安西
0833デフォルトの名無しさんNGNG
>>830
#define invokevirtual(obj,method,...) ((obj)->vtbl->(method)(obj,...))
0834太田NGNG
C言語とはあまり関係ないことですが、
makeすると以下のエラーが出てしまいます。

make: Fatal error in reader: Makefile, line 317: Unexpected end of line seen

Makefileの間違いは見つけにくくてよく困ります。
Makefileを書く際のコツ(間違いやすいポイント)がありましたら教えてください。

0835デフォルトの名無しさんNGNG
>>830
ネタだろ?
str.の.ってなんだよ。
str.いらねーじゃん。
0836デフォルトの名無しさんNGNG
>>835
char* mystrcpy (char* dst, const char* src) { 〜 }
struct { char* (*strcpy) (char*, const char*); } str = { mystrcpy };
# 書き方あってるかちょっと自信ないけど。
0837830NGNG
>831 >833
う〜む、やはりプリプロセスでやるのですか。
そこまでやってしまうと、"Cの味わい"を超えてC++になってしまいますね……
ちょっと前、本質的に安全なコンテナについて思考したときもそんな感じでした……。

>835

名前空間に関するまつわる問題の解決や、
再コンパイルなしのポリモルフィズム実現のために必要と思うのですが……
もっと他によい方法をご存知でしたらぜひ御師事ください。
0838デフォルトの名無しさんNGNG
> しかし慣れないメモリ管理などは怖いので、とりあえず何事も練習だし

> プリプロセスでまとめて……なんての以外で、なにかうまい方法はないものでしょうか?

> 名前空間に関するまつわる問題の解決や、
> 再コンパイルなしのポリモルフィズム実現のために必要と思うのですが……

どう見てもネタだな。言ってることが矛盾だらけだ。
OOから入った甘チャンにはCは無理だ。一生Java使っとけ。
0839デフォルトの名無しさんNGNG
>>837
まずは落ち着いてから書き込め
読みづらい
0840デフォルトの名無しさんNGNG
>>837
なぜJavaの考え方でわざわざCを使うことに拘る?
C++にした方がいいんじゃないか?
0841830NGNG
>838
う〜む、ネタを出せるほどの能力もありません。
顔を洗って出直してきます。

>839
すみません、Cはまだ慣れてないので、これ以上整理できないのです。

>840
まず、
>今までJava野郎でしたが、その内部にも踏み込みたいのでC(not C++)はじめました。
のとおり、CでJavaっぽくするためにはどうすればいいかを理解する、のは目的です。

さらに、仕事でフレームワークを担当しているので、
「どうせならよりよく部品化・共通化してしまおう」という意思が働き、
Cの本質に反しない範囲でライブラリ的なものを整備してみようかと思ったのです。

しかし、やはり >840 さんの言うとおり、Java -> C よりも、
C++を一段挟んだほうがよさそうですね……
明日から、C++について勉強してみます。

それでは、失礼しました。
0842デフォルトの名無しさんNGNG
CでSQLServerに繋ぐサンプルなんか公開してる所、誰か知ってたら
教えてもらえませんか?
0843デフォルトの名無しさんNGNG
SQL教えて〜!!
http://pc3.2ch.net/test/read.cgi/tech/1028653822/l50
の方がヒット率高いんじゃない?
0844 NGNG
ファイルの途中行を編集したいのですが、どのように実現したら良いでしょうか?

イメージとしては
 1日
 2日
 3日
というファイルを
 1日(金)
 2日(土)
 3日(日)
というように編集したいのですが、、
0845デフォルトの名無しさんNGNG
>>844
while (一行読んでEOFじゃない) {
 if (目的の行か?) {
  行を編集する
  それを出力
 }
 else {
  そのまんま出力
 }
}

テンポラリファイルに書いて、
成功したときのみrenameすればよろし。
元のファイルをとっとくかどうかは適宜判断してくれ。
0846デフォルトの名無しさんNGNG
>>844
awkでやったほうが早いと思われ。
0847デフォルトの名無しさんNGNG
>>837
send(obj, message, ...)と書くなら
それほど抵抗はないんじゃないか。
0848 NGNG
>>845
それでは汎用性に欠けるので、

if(目的の行か?)

の部分を

if(読み込んだ行が日付であるかどうかを自動解析して、日付であるか?) {
曜日を自動取得して出力
}

と出来るソースを書いてみてください。
0849デフォルトの名無しさんNGNG
プログラム初心者なので間違った質問をしたら、すいません。C++言語を使って
乱数を一万個発生させるプログラムを作りました。それで、発生させた一万個の乱数のうち
ランダムに10個出力させたいのですが、「アドレス」、「番地」という考えが
分かりません。色々と本を調べましたが、よく分かりません。
どなたか教えてください。
0850デフォルトの名無しさんNGNG
>>849
http://www.amazon.co.jp/exec/obidos/ASIN/4774111422/
嫁!
0851デフォルトの名無しさんNGNG
すみませんこれはどう解釈したらいいですか?
const char const *(*foo[10])(int **P);
0852デフォルトの名無しさんNGNG
>>851
ネタとしか思えんほどの複雑さだ。
0853デフォルトの名無しさんNGNG
二つめのconstは最初のconstと被るから余計。

intへのポインタのポインタを引数にとり、変更できないcharへのポインタを返す、
要素数10の関数ポインタの配列fooを宣言している。
0854851NGNG
連休中でも2ちゃんみるんだね
0855デフォルトの名無しさんNGNG
日本の数学界はなんでコンピュータを嫌うの?
http://science.2ch.net/test/read.cgi/math/987602293/

1
0856デフォルトの名無しさんNGNG
>>855
まず、そこに書かれている英字が読めません意味もわかりません。
0857デフォルトの名無しさんNGNG
質問があります。
cの上でosのコマンドを使う方法を教えてください。
ちなみにsolarisです。
system()ですか?
馬鹿全開ですいません。
0858デフォルトの名無しさんNGNG
>>857
shine(const char *)だよ。
0859sageNGNG
>858
ありがとうございます。
早速明日にでも試してみます。
0860デフォルトの名無しさんNGNG
>>859
sageの使い方間違ってるし・・・
嘘でも仕様です、とかいうなよ。
0861デフォルトの名無しさんNGNG
>860
ごめんなさい初心者なんです。
sageの使い方はこれでいいんですか?
>嘘でも仕様です、とかいうなよ。
意味わかりません。板違いなのは分かってますがさらっと教えてくださると嬉しいです。
0862860NGNG
http://www.wdic.org/?word=%BB%C5%CD%CD+%3ATECH
0863デフォルトの名無しさんNGNG
>860
いや、仕様の意味は知ってますけど・・・
つまり、この場合は『sageの使い方がわかんなかったことを、自分以外のせいにするな』ってこと?
あってたら無視してください、間違ってたら再教授お願いします。
0864860NGNG
つまり、漏れがいいたかったのは、
>sageの使い方間違ってるし・・・
と言われたことに腹を立てて、(本当は知らないのに)
「知ってるよボケ」とか書き込んでくんなよという意味
ワカタカイ?
0865860NGNG
>>863
あとリンクは>じゃなくて>>
0866デフォルトの名無しさんNGNG
>>860
んなこと誰が決めたんだよ!!!
0867デフォルトの名無しさんNGNG
>>866
2chができた時から決まってんだよ???
0868863NGNG
>>864
ありがとうございます。
あと866は僕じゃないですからね。
なんか2chで初めて親切な人に会ったかのような・・・(笑)
0869860NGNG
>>868
どういたしましてモルァ。
0870875NGNG
どう致しまして。
08711NGNG
どう致まして。
0872おながいしますNGNG
c言語勉強し始めたばかりのもんです。現在自宅のWINDOWSで
「はじめてのc言語」という本の付録についていたコンパイラ
(LSI C−86VER3.30試食版)というのを使用しています。
プログラム自体はMS−DOSを立ち上げてノートパッドで書き込み
しているのですが最近エデイターの存在を知りました。
それでお聞きしたいのは使いやすいエデイターはないでしょうか?
しかも出来ればフリーのもので。
 以前「1週間でマスターするPERL」という本を購入したのですが
付録のエデイターが色が何色も出ていて字の大きさも適当で使いやすいので
C言語でもこういったエデイターがあれば助かるのですが・・。
本に載っていたTeraPadというのを試してみたんですがちょっと
使いにくいです。秀丸エデイタというのが使いやすそうな感じなんですが
正直シェアウェアっていうのを使ったことが無くて。出来ればフリー
のものが良いのですが。長くなってすみません。
0873デフォルトの名無しさんNGNG
フリーならTeraPad
Shareなら秀丸。
・・・て言うか秀丸のPASSならみんな知ってるんじゃ・・・
(教えてあげないよ)
0874デフォルトの名無しさんNGNG
っていうか秀丸はPASSなくてもずっとつかえるし・・・
0875ぽりんきー=872NGNG
>>873
そのPASSがあればただで使えるんですか?
秀丸以外でフリーでいいものないんでしょうか。
教えてください。
0876デフォルトの名無しさんNGNG
>>872
学生だったら、秀丸は無料で使えるよ。
オレは秀丸使ってるし。
あとオレはbccとCPadっていう組み合わせでやってる。
ドス窓立ち上げなくてもすぐにコンパイルとかできるから
便利だ。VC++っぽくて(・∀・)イイ!w
金ないから、フリーで固めてます
0877デフォルトの名無しさんNGNG
>>874
マジすか。期限とか機能に制限ないんすか?
0878manko_chinko ◆GLc2rpKRNM NGNG
ボクはお金がないのでラインエディタを使ってます
0879デフォルトの名無しさんNGNG
>>877
Nothing!!
ほとんどボランティアだよね。
0880デフォルトの名無しさんNGNG
可変長の引数をもつ関数で
void tiny_printf(char *format, ...)
{
  int i;
  va_list ap;
  va_start(ap,format);
  for(i=0;i!='\0';i++)
  {
    switch(format[i])
    {
     case 's':
      printf("%s",va_arg(ap,char*));break;
     case 'd':
      printf("%d",va_arg(ap,int));break;
     default:
      assert(0);
     }
     }

   va_end();
   putchar('\n');
}
va_endの引数が間違ってるってエラーが出るんだけど
どういうこと?

int main(void)
{
tiny_printf("sdd","結果・・・",3,5);

return(0);
}
0881デフォルトの名無しさんNGNG
秀丸はフリーソフトを公開すれば社会人でも無料になるはず。
0882デフォルトの名無しさんNGNG
TeraPad使いずらいと思う時点で房だな。

おれはずっとTeraPad使ってますけど何か?
0883デフォルトの名無しさんNGNG
>>879
うげー、今までプログラミングでよく使われてると聞いてたけど
シェアウェアだから全然眼中になかった。
乗り換えるかな・・・
つーか板違いだからこれで終わりにすます。教えてくれてありがと。
0884デフォルトの名無しさんNGNG
>>880
va_end(ap);
と書き直せ。
0885872NGNG
今秀丸さんのHP見てきたんですがフリーで使えるのって
ありますか?あったら一応学生なので使いたいです。

↓秀丸さんのHP
ttp://hidemaru.xaxon.co.jp/index.html
0886デフォルトの名無しさんNGNG
>>882
そりゃよかったね。はいはい。
0887デフォルトの名無しさんNGNG
>>875
いや、多分違法(秀丸)
けど、まわりの奴はそれで秀丸使ってる奴多い。
俺はTeraPadだけど。
TeraPadって拡張ファイルがフリーで出てたりするから探してみたら?
俺はCとJAVAだし、あれで充分だけど。
0888デフォルトの名無しさんNGNG
>>885=初心者
ブラクラじゃないんだから直リンすれよ。
あとsageろ。
0889872NGNG
リンクつながんない。すみません(恥)
TeraPadでもいいですかね。もうちょっと調べます。
ありがとうございました。
0890デフォルトの名無しさんNGNG
>>886
自作自演だからage
0891デフォルトの名無しさんNGNG
どういうことって、引数が足りてないんだろ。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/va_end.3.html
>void va_end(va_list ap);
0892デフォルトの名無しさんNGNG
>>891
でも本にあったソースをそのまま打っただけなのに・・・
なんなんだこの著者は!!
( ゚Д゚)ゴルァ!
0893デフォルトの名無しさんNGNG
>>892
著者名と書名さらしageろ!
0894デフォルトの名無しさんNGNG
>>882
TeraPadってコード書くのはいいんだけど、置換とか文字列操作が遅すぎ!
でも、愛用してるけど。
0895デフォルトの名無しさんNGNG
va_endに引数が無くてもとおる処理系が
どっかにあったのかな・・・?
まあ大体マクロやから、通るヤツもあるやろうけど。
0896デフォルトの名無しさんNGNG
ヘルプより
---------
●秀丸フリー制度について
 秀丸エディタは、以下の方々には送金無しで使っていただけます。秀まるおのホ
ームページの「サポート」ページで必要事項を入力して申し込んでください。
 秀まるおのホームページはhttp://hide.maruo.co.jp/ です。

  − WINDOWS関係を扱う本や雑誌の著者の方(著書をお知らせください)

  − フリーソフトウェア作者の方(ソフトを公開していることが条件)
  − 学生の方で難儀している方、または学校内PCでの学生による利用の場合
    (アカデミックフリー制度)

 学生の方の場合で卒業後も継続して秀丸エディタを使用する場合は、そのときに
送金をお願いします。
----------
0897872NGNG
>>896さん ありがとうございました。
0898デフォルトの名無しさんNGNG
つぅかメモ帳も立派なエディタだぞと。
0899892NGNG
技術評論社
前橋和弥 著
C言語ポインタ完全制覇
104ページ

ほんとそのまま載せるんで、チェックきぼんぬ
0900892NGNG
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>

void tiny_printf(char *format,...)
{
int i;
va_list ap;

va_start(ap,format);
for(i=0;i!='\0';i++)
{
switch(format[i])
{
case 's':
printf("%s",va_arg(ap,char*));
break;
case 'd':
printf("%d",va_arg(ap,int));
break;
default:
assert(0);
}
}
0901892NGNG

va_end(ap);
putchar('\n');
}

int main(void)
{
tiny_printf("sdd","結果・・・",3,5);

return(0);
}
0902デフォルトの名無しさんNGNG
>>899
通報しました。
0903デフォルトの名無しさんNGNG
>>892
こっちは合ってるじゃねーか。
お前が写し間違えたんだろ(w
0904デフォルトの名無しさんNGNG
>>902
あふぉだね。
ちゃんとこういう風に書いたら、法律的には「引用」に当たるんだよ?
覚えとけ房が
0905デフォルトの名無しさんNGNG
正誤表ぐらいちゃんとチェックしろよ、、、

http://member.nifty.ne.jp/maebashi/seiha/seigo.html
p.104 List2-5の23行目
誤
va_end();
正
va_end(ap);
0906デフォルトの名無しさんNGNG
>904
引用は、引用に対する評論が主でないといかんかった気がする。
0907892NGNG
>>903
えー!!
したっけ、これコンパイルして実行してみて
本には「結果・・・3 5」ってなってるから
オレはできない・・・
0908デフォルトの名無しさんNGNG
>>903
禿同。
いるよな自分の未熟を本とかのせいにする奴・・・
0909デフォルトの名無しさんNGNG
>>904
お前がな。
引用はあくまで「主文」に対する補足的な「副文」でなければならない。
お前が引用と呼ぶ他人の著作物を丸々貼り付ける行為は引用とは認められない。

0910デフォルトの名無しさんNGNG
引用するなら許可取れよ。
0911デフォルトの名無しさんNGNG
>>909
同意。「今から宇多田の新曲全部張るぞ!」と声高らかに宣言しているに等しい。

>>910
許可を取らなくても他人の文章を載せてもよい。(>>909他いろいろ制約はある)のが「引用」の目的。
0912デフォルトの名無しさんNGNG
計算中心のプログラムを打ってるんですが、
計算でよく使う変数をグローバルで宣言、main関数内でmallocにて領域確保
すると計算が速くなる・・・ってことになりますか?
それともコンパイラの速度重視っていうオプションで指定した方が良いでしょうか?
0913デフォルトの名無しさんNGNG
そのくらい自分でベンチマークとれよ。
0914デフォルトの名無しさんNGNG
>>912
今のギガヘルツマシンとかだと下手な小細工したところであまり効率は上がらないと思われ。
0915892NGNG
間違い発見しますた。
死んできます。
0916デフォルトの名無しさんNGNG
引用と複製の違い
http://www.melonpan.net/aboutcopyright.html
これから考えると、微妙に901は複製にあたる。
まあ、でもどっちでもいーや。
0917デフォルトの名無しさんNGNG
>>913
あ、そうっすね。ボケてました。

>>914
クラシックPentiumでも軽く・・・っていうのが目標なんで・・・。

ベンチ取りに逝ってきます。
0918デフォルトの名無しさんNGNG
関数をポインタで扱うっていうのを教えてください。例文付きでお願いします。
0919デフォルトの名無しさんNGNG
先生教えて下さい!
なぜこれはちゃんと出力されないんでしょうか!!!
#include<stdio.h>

main()
{
char* color_name[]=
{
"hoge",
"piyo",
"hoge_p"
};

printf("%s\n",&color_name);
printf("%s\n",&color_name+1);
printf("%s",&color_name+2);
}
0920デフォルトの名無しさんNGNG
>>918
int main(int argc,char argv[][])
{
int (*shine)() = main;

printf("無限ループ\n");

shine(argc,argv);
}
0921デフォルトの名無しさんNGNG
>>919
出力は

hoge
oge
ge

でいいの?
0922>>921NGNG
hoge
piyo
hoge_p
と出力されると思うんですが文字化け起こしてます。
0923デフォルトの名無しさんNGNG
>>922
取りあえず配列に対してアドレス操作するのやめなさいな。

文字列ポインタと配列は仕様が似ているだけで別の概念ですわ。
0924>NGNG
>>923
今Cを勉強していて、実用性の無いプログラムを大量に
作っている毎日ですので・・・
良かったら、なぜちゃんと出力されないのか教えて下さい。
0925デフォルトの名無しさんNGNG
colornameの中身:&"hoge",&"piyo","hoge_p"

&coloename -> colorname[0] -> &"hoge" != "hoge"

0926デフォルトの名無しさんNGNG
#include<stdio.h>

main()
{
char* color_name[]=
{
"hoge",
"piyo",
"hoge_p"
};

printf("%s\n",*(&color_name));
printf("%s\n",*(&color_name+1));
printf("%s",*(&color_name+2));
}
0927デフォルトの名無しさんNGNG
>>923
アフォですか?
0928デフォルトの名無しさんNGNG
>>925忘れて。
0929デフォルトの名無しさんNGNG
>>927
確実にアフォですね。
アドレス演算しないんでしょうか?
K&Rは読め無そうですね。(プッ
0930デフォルトの名無しさんNGNG
┌─────┬─┬─┬─┬─┬─┐        
│ *char   │h │o │g │e  │\n│        
└─────┴─┴─┴─┴─┴─┘        
                         
┌─────┬─┐     ┌─┬─┬─┬─┬─┐
│ char[]   │* ├──→ │h │o  │g │e │\n│
└─────┴─┘     └─┴─┴─┴─┴─┘

                         
0931930NGNG
ずれた上に反対でした。さようならわが人生。逝ってきます。
0932930NGNG
遺言です。
┌─────┬─┬─┬─┬─┬─┐        
│ char[]   │h │o │g │e  │\n│        
└─────┴─┴─┴─┴─┴─┘        
                         
┌─────┬─┐     ┌─┬─┬─┬─┬─┐
│ *char   │* ├──→ │h │o  │g │e │\n│
└─────┴─┘     └─┴─┴─┴─┴─┘
0933デフォルトの名無しさんNGNG
>>926
コンパイルしたんですが、文字化け起こしてます。
0934デフォルトの名無しさんNGNG
>>932
文字列の終端って\0じゃないの?
0935デフォルトの名無しさんNGNG
>>930指す元の所に格納されるのはchar *じゃなくて変数名では?
0936デフォルトの名無しさんNGNG
>>916
俺もそう思った。
しかしニュー速+なんか引用だらけだが。
0937デフォルトの名無しさんNGNG
>>935
>変数名では

と、言うことはJavaで言うリフレクションのようなことも可能になるのですか?
0938デフォルトの名無しさんNGNG
>>933
てか素直に配列で書けと
printf("%s\n", color_name[0]);
printf("%s\n", color_name[1]);
printf("%s", color_name[2]);
0939デフォルトの名無しさんNGNG
>>930
文字列終端は'\0'。凡ミスか?
急ごしらえで作るとそーゆー目にあう。
下の奴も935の言うとおりだろう。
0940デフォルトの名無しさんNGNG
頼むし >1 にあるC FAQ日本語訳は読んでくんさい。
0941デフォルトの名無しさんNGNG
>>929
>K&Rは読め無そうですね。(プッ

時代遅れですと。
0942デフォルトの名無しさんNGNG
>>941
禿同
ANSICの規格読め
K&Rは規格化される以前に書かれてるから(当たり前だけど)
間違いっつーか、規格と違うとこがある
くそ本です
0943デフォルトの名無しさんNGNG
>>942
今時初版ですか?

>>941の言う時代遅れはきっと意味が違うと思うぞ。
0944デフォルトの名無しさんNGNG
>>943
ええ、ただの負け惜しみです。
0945デフォルトの名無しさんNGNG
このスレもラベルが落ちたな。
0946デフォルトの名無しさんNGNG
goto このスレ;
0947デフォルトの名無しさんNGNG
このスレ:;
0948デフォルトの名無しさんNGNG
>>947セミコロンいらない。
0949デフォルトの名無しさんNGNG
>>950
次スレよろ
0950949NGNG
そうそう、>>950が次スレ立てるのは伝統で俺が決めたことじゃないから。
0951デフォルトの名無しさんNGNG
>>949>>950
つまらん。とっとと立てれ。
0952デフォルトの名無しさんNGNG
>>949
次スレよろ
0953949NGNG
>>951-952
>>950は漏れじゃないんだけどな
0954デフォルトの名無しさんNGNG
次スレはちゃんと「俺(私)に聞け」スレでよろ
0955デフォルトの名無しさんNGNG
スレタイは
C言語のことは漏れらに聞けモルァ!!<39刷>
でどう?
0956デフォルトの名無しさんNGNG
敢えて、

C言語だけは俺に聞くな!【サンキュー】
0957デフォルトの名無しさんNGNG
>>956
それじゃスレ内容と全然違うだろ?

i--; /* increment i */
って書くか?
0958949NGNG
次スレ立てマスタ
http://pc3.2ch.net/test/read.cgi/tech/1036409391/
0959デフォルトの名無しさんNGNG
サンキューが採用されたのでまぁ、引き分けってとこか。良い勝負だったよ。>>957
0960デフォルトの名無しさんNGNG
>>957は>>955じゃない
>>955は漏れ 引き分けだな。
0961955NGNG
よくみたら8対2で漏れの勝ちじゃないかモルァ。
0962デフォルトの名無しさんNGNG
>>948
ラベルの後にはなにかしら文が必要だからセミコロンが必要。
0963デフォルトの名無しさんNGNG
>>962
そうだったな。スマソ
0964デフォルトの名無しさんNGNG
>>882,>>894
TeraPadっていいよな。HTML書くときも使ってる。
でもSakuraEditも捨てがたい。
いやEmEditorのインデント機能は最高だ。

TeraPadではインデントがちょっと。。。
ちょっとあさってこよう。

0965デフォルトの名無しさんNGNG
>>964
やっぱりTpadはいいよな。
SakuraEditor,Emeditorってのは初めて聞いたな。
ダウソして見る。
あと秀丸は個人的には機能がありすぎて苦手かな。
あとVC++のエディタってどうなの?
0966デフォルトの名無しさんNGNG
>>880 >>900
> va_end();

va_end(ap);
その本、本当に引数何も書いてない?

あと、va_end の説明は読んでない?
それとも書いてない?
前者だったらあなたが DQN、後者だったら本が DQN。
0967966NGNG
済まん、表示が 801-900 のままだった・・・
逝ってくる・・・
0968デフォルトの名無しさんNGNG
>>966
マジで書いてないよ。どう見ても書いてない。
va_endの説明は、「たいていの処理系ではただのお飾り」
って書いてある。
ああ、この本失敗かーー。評判よかったのに・・・
0969966NGNG
>>968
でも、その後に続くレスを見る限りでは、訂正が出ているようだが。
それは見なかったの?
実物が手元に無いから、その本については何とも言えない。
0970デフォルトの名無しさんNGNG
>>894
> TeraPadってコード書くのはいいんだけど、置換とか文字列操作が遅すぎ!

はっきり言って、外部ツール作って置換させた方が速いよ。
外部ツールは DLL プラグインじゃなくて単なる EXE だから難しいことは無い。
作るなら ↓ の cTeraPad.h がユーティリティーライブラリ。
http://www.egroups.co.jp/files/team-terapad/C%2B%2B/cTeraPad_20020206.lzh
C++ だけど better C としてしか使ってないから C には簡単にダウングレードできる。
0971よっちゃんNGNG
どうしたらC言語がよくわかるようになりますか?
教えて下さい。
0972デフォルトの名無しさんNGNG
>>970
・・・要はクソエディタってことか。
0973デフォルトの名無しさんNGNG
高機能だからといって高性能だとは限らない。
0974デフォルトの名無しさんNGNG
>>971
C言語の本を10冊詠んでください。
0975よっちゃんNGNG
そんないいかげんな事言わないで下さい。
0976デフォルトの名無しさんNGNG
>>973
そして、わざわざ低機能低性能のエディタを選択する理由もない。
0977デフォルトの名無しさんNGNG
>>975
どうしたら自転車が乗れるようになるか説明できますか?
同じことです。
0978デフォルトの名無しさんNGNG
C言語の本を10冊泳いでください。

・・・に見えた。


>>975
試しもしないでいい加減と言う訳かい。
あんた一生 「C言語がよくわかる」 ようにならないよ。
漏れも C の本なら 5 冊は読んだし、C で〜〜プログラミング系の本だと
数え切れない。
Web にある解説ページも見て回った。
あんたは何もしないのかい。

つーか次スレ立ってるんだからそっち・・・いや逝くな。
0979デフォルトの名無しさんNGNG
>>971,>>975
旧すれあげるな
0980デフォルトの名無しさんNGNG
>>976
「低機能低性能エディタ」 も作れない DQN
0981デフォルトの名無しさんNGNG
>>975
確かにいい加減だ。本なんぞいくら読んでも書けるようには成らん。
一冊でいい。読みつぶせ。それだけで問題ない。
書いて書いて書きまくれ。基本がわかれば後はもう己の頭の程度の問題だ。
本ばかり読んで言語仕様には詳しいがプログラムは書けない馬鹿が多いのも事実だ。
そうならないようにがんばれ!
0982よっちゃんNGNG
>981
ありがとうございます。
0983>>844NGNG
>>845さん >>848さん
亀レスでごめんなさい。

数千行のうち1行しか編集しない場合、非効率に感じるのですが
Cで実現するにはこの方法しか無いようですね。
取りあえず、845さんの方法でやってみます!!

>>846さん
awk()という関数があるのかと思ったら、awkって言語だったのか、、(^_^;
短いプログラムでいろいろ出来そうみたいですが、
今回はCで作ってみます(というかCしか知らないのです)。
0984デフォルトの名無しさんNGNG
>>983
可変長のファイルシステムを使っており、
行の長さが可変長であれば、
その行がディスクのどの位置にあるか
ファイルの頭から読んでみないと分からないので、
どの言語でもその方法しかない(あったりして)。

例えば一行が 256 byte 固定であれば
n 行目はファイルの先頭より 256 * (n-1) byte 目から始まることが
計算できるのでそこまで fseek(3) すればいい。
0985デフォルトの名無しさんNGNG
>>984
どちらにしろ、その行がどの行なのかは比較してみないとしょうがないかと。
0986 NGNG
fseek(3)の3は何ですか?
引数は3固定でいいんですか?
0987デフォルトの名無しさんNGNG
>>986
ファイルを先頭からシークすると言うことです。
固定で構いません。

リファレンスくらい引こうな。
0988デフォルトの名無しさんNGNG
>>987
ボケにボケで返してどうする。
0989デフォルトの名無しさんNGNG
ファイルのコード変換で、'\n' → '\r\n' とか '\r' → \'r\n' に変換する
いい方法ってないでしょうか?

ファイルを1バイトずつ覗いて、おきかえって言う方法しかないんでしょうか・・・
0990デフォルトの名無しさんNGNG
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

http://big.freett.com/scheme_a/num1000.swf
0991デフォルトの名無しさんNGNG
置換してくれるソフトとか使えば?
エディタであるでしょ。
0992989NGNG
>991

処理の中のバッファファイルなんです。

既存のソフトから標準出力で受け取ると、改行コードがCRLFがLFになってしまって・・・
当方の環境は Linux + gcc です
0993デフォルトの名無しさんNGNG
>>992
ライブラリを探してきたところで結局やってることは同じだと思われ。
一回は読まないとそこに改行コードがあるか否かなんて判定できないわけで。
0994デフォルトの名無しさんNGNG
perlで変換かましたら?
0995989NGNG
> 994

perl -pe 's/\n/\r\n/' wk > wk

とやってみたんですが、

Substitution replacement not terminated at -e line 1.

と返ってきてしまいます。

後、シェルスクリプトって、system()でコールできるんでしょうか?

> 993

それしかないんでしょうか・・・(鬱
0996デフォルトの名無しさんNGNG
>>995
セミコロンがない。
0997デフォルトの名無しさんNGNG
つづきはこっちで。
C言語のことは漏れらに聞け!!<サンキュー>
http://pc3.2ch.net/test/read.cgi/tech/1036409391/l50
0998デフォルトの名無しさんNGNG
そんな面倒なもんでもないと思うが
while ((c = getchar()) != EOF) {
if (c == '\n') putchar('\r');
putchar(c);
if (c == '\r') putchar('\n');
}
\r\n が \r\n\r\n になってしまうが。
0999デフォルトの名無しさんNGNG
>>995
> perl -pe 's/\n/\r\n/' wk > wk
perl -pe 's/\n/\r\n/' wk > temp; mv -f temp mk
入力ファイルにリダイレクトはできない。

> 後、シェルスクリプトって、system()でコールできるんでしょうか?
yes, でもセキュリティホールには気をつけろよ。
1000デフォルトの名無しさんNGNG
perl -pe 's/\n/\r\n/' wk > wk
だと読み込んでる途中の wk を上書きしてエラーになるぞ。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。