掲示板

掲示板を置いてみました。ご自由に書き込んで下さい。
ただし、私は根性なしなので、閑古鳥が鳴いたり、荒れてきたと
思ったらとっとと閉鎖する可能性があります。


より新しい記事へ ← 500 件の投稿中 200件目〜151件目を表示 → より前の記事へ
表示件数: 件/頁 


200 Re: エディタやCUI(Dos窓、UNIX)を使うべき? コメント数:  1件
  のぐー   | BXM06466@nifty.ne.jp 2001/11/08 (木) 04:11
 http://homepage1.nifty.com/nogue/
その環境で、本に載っているソースをそのまま入力して、コンパイル
して実行確認できるなら、特に問題はないでしょう。
ただしそこで作ったプログラムのコンパイルしたバイナリ(実行ファイル)
を他のMacに持っていっても、おそらく動かないとは思いますが。

nifty:FC (C言語フォーラム)に、GTさんという方がおられます。
彼は、あなたと同じ環境のようですが、MacのGUIを使わずに、
ANSI Cコンパチなソースを書いてます。(どうやら開発環境には
CUI環境(コンソール)がついているらしい。)

もっとも、リダイレクトやパイプが使えるかどうかまでは聞いてない
ので、もしそういった機能が付いてないならば、(そしてそれをあなた
が必要と感じるなら)中古でも何でも良いので安いPCを一台入手したほう
が良いかもしれません。DOSさえ動けばLSI C86が使えますし、Windows95
以降が動くならBorland C++ 5.5が使えます。(どちらもコンパイラは無料)
LINUXやFreeBSD等を使うならOS自体も無料になります。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


199 Re: ありがとうございました。 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/11/07 (水) 19:35
 http://member.nifty.ne.jp/maebashi/
>  リプライくださってありがとうございました。
>  しかし、いろいろ試してみましたが、動きません……。

普段使っていないのですが、Windows Meの環境変数の設定方法は、
Windows9x系とは違ってたような。

http://www.nifty.ne.jp/forum/fprint/ftex/install/win/dviout.htm#winme

このあたりに情報があります。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


198 ありがとうございました。 コメント数:  1件
  とーや 2001/11/07 (水) 01:36
 リプライくださってありがとうございました。
 しかし、いろいろ試してみましたが、動きません……。

 もっと初心者向けのものをさがして、見てみようと思います。
 おさわがせいたしました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


197 Re^6: ファイル名について コメント数:  0件
  森   | kenpacafe@hotmail.com 2001/11/05 (月) 23:39
> ええと、昔のDOSのファイルシステムでは 8+3のファイル名しか
> 使えなかったのは事実で、でも、現在はVFATにより(汚い手とは
> 言え)長いファイル名が使えるようになっているわけです。
>
> 問題は、アプリケーション(コンパイラなど)が対応していない
> 場合なのですが、LSI-Cがどうであるかは私の方では確証が取れて
> いません。
>
> 検索すると以下のようなパッチがあるようですが、
>
> http://www.vector.co.jp/soft/win95/prog/se100168.html
>
> これはコンパイラがロングファイルネームに対応するんじゃなくて
> 吐いたプログラムの話のような...
>
> 吐いたプログラムがダメなようでは、コンパイラもダメなような
> 気もしますが。
>
> どこかにはっきりした情報があるでしょうか。

前橋様
レス有難うございます。

リンク辿って
早速パッチ当ててみます。

感謝いたします。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


196 エディタやCUI(Dos窓、UNIX)を使うべき? コメント数:  3件
  ひろあき   | feytan@infoseek.jp 2001/11/05 (月) 19:19
 初めまして、私は先日「C言語体当たり学習」を購入してCを勉強しはじめた
者です。で、その環境がMac+CodeWarriorなんですけど、Cの入門本ではたいてい「UNIXかWin+エディタ+コンパイラを使いましょう」と書いてありますよね?そこでふと思ったんですけど、この環境でCを学ぶ上で他の環境にはない注意点とかあるいは「さっさとUNIXに乗り換えるべき」とかそういうことがあったら教えて下さい。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


195 Re^5: ファイル名について コメント数:  1件
  (ぱ)   | maebashi@cse.co.jp 2001/11/03 (土) 15:59
 http://member.nifty.ne.jp/maebashi/
ええと、昔のDOSのファイルシステムでは 8+3のファイル名しか
使えなかったのは事実で、でも、現在はVFATにより(汚い手とは
言え)長いファイル名が使えるようになっているわけです。

問題は、アプリケーション(コンパイラなど)が対応していない
場合なのですが、LSI-Cがどうであるかは私の方では確証が取れて
いません。

検索すると以下のようなパッチがあるようですが、

http://www.vector.co.jp/soft/win95/prog/se100168.html

これはコンパイラがロングファイルネームに対応するんじゃなくて
吐いたプログラムの話のような...

吐いたプログラムがダメなようでは、コンパイラもダメなような
気もしますが。

どこかにはっきりした情報があるでしょうか。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


194 Re^4: ファイル名について コメント数:  2件
  森   | kenpacafe@hotmail.com 2001/11/03 (土) 03:10
> この件、実際に最初に作成された8.3形式外のファイルをDOSプロンプトから指定する方法など、説明をしていくと結構きりがないのですが、以下のURLなど参考になるのではないかと思います。
>
> http://www.asahi-net.or.jp/~FV6N-TNSK/gates/fat1.html
D.Matsu 様
レス有難うございます。

リンクたどります。
なんかモヤモヤしていたのが
スッキリした感じです
感謝です。



【新規投稿】 【この投稿にリプライ】 【投稿者削除】


193 Re: Windows9xのDOS窓、というページ コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/11/02 (金) 18:45
 http://member.nifty.ne.jp/maebashi/
> だけ文字化けしてしまうのですが、
> 自分の環境の問題でしょうか?

すみません、こちらの文字コード指定の問題です。

HTML中のcharset指定がISO-2022-JPになっているのに、
文書自体がS-JISになっているのが原因です。

今夜にも直します。

# エンコードをシフトJISにしたら読めないでしょうか。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


192 Windows9xの DOS窓、 という ページ コメント数:  1件
  costa 2001/11/02 (金) 12:55
だけ文字化けしてしまうのですが、
自分の環境の問題でしょうか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


191 Re^3: ファイル名について コメント数:  3件
  D.Matsu   | dmatsu@gld.mmtr.or.jp 2001/11/02 (金) 10:08
この件、実際に最初に作成された8.3形式外のファイルをDOSプロンプトから指定する方法など、説明をしていくと結構きりがないのですが、以下のURLなど参考になるのではないかと思います。

http://www.asahi-net.or.jp/~FV6N-TNSK/gates/fat1.html
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


190 Re^2: ファイル名について コメント数:  4件
  森   | kenpacafe@hotmail.com 2001/11/02 (金) 03:45
> > 前橋様
> 前橋さんを直接ご指名なので私が書き込むのはご迷惑かもしれませんが。
>
> > MS-DODS
> > このようなファイル名で保存する
> > yalist1-1.c
> たしかMS-DOSではファイル名は8文字+拡張子3文字までという
> 制限があったはずです。
>
> > ファイル名は int 型のような
> > 文字制限があるのでしょうか?
> と、いうわけでC言語の制限ではなく、OSの制限でしょう。
>
> ...私も大まかに分類するならいわゆる「DOSを知らない子供たち」なので、
> 勘違いしているかもしれませんが。
> http://www.amy.hi-ho.ne.jp/~lepton/program/p1/prog102.html
> # 正しくは「MSを知らないおっさん」か
本多様
どうも有難うございます
8文字制限、
短い感じですが
助かりました。

再度、有難うございます
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


189 Re: ファイル名について コメント数:  5件
  本多   | manybook@msc.biglobe.ne.jp 2001/11/01 (木) 23:05
> 前橋様
前橋さんを直接ご指名なので私が書き込むのはご迷惑かもしれませんが。

> MS-DODS
> このようなファイル名で保存する
> yalist1-1.c
たしかMS-DOSではファイル名は8文字+拡張子3文字までという
制限があったはずです。

> ファイル名は int 型のような
> 文字制限があるのでしょうか?
と、いうわけでC言語の制限ではなく、OSの制限でしょう。

...私も大まかに分類するならいわゆる「DOSを知らない子供たち」なので、
勘違いしているかもしれませんが。
http://www.amy.hi-ho.ne.jp/~lepton/program/p1/prog102.html
# 正しくは「MSを知らないおっさん」か
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


188 Re^4: reallocで質問 コメント数:  0件
  レプラコーン   | sailis@annie.ne.jp 2001/11/01 (木) 21:06
 http://www.annie.ne.jp/~sailis/pvon/
> realloc()が失敗してそのまま死んでしまうプログラムなら、
> 私は差し支えないと思うのですが。

なるほど・・・。参考になります。
どうもです。

> http://queen.heart.ne.jp/cgi-bin/queen4?word=&;ng=fj%2Ecomp
> %2Elang%2Ec&ym0=200002&ym1=200002&begin=1
>
> # 長すぎるので改行しています。

ありがとうございます。早速行ってみました。
はやく環境になれて、自分なりに検索できるようになります。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


187 Re^10: 先ほどのことで コメント数:  0件
  吉沢   | yoss@parkcity.ne.jp 2001/11/01 (木) 10:27
> これが間違っています。変数を char *line; と宣言して、
> read_line(fp, &line) で呼び出さないと正しい動作になりません。

たびたびすみません、
なるほど、納得できます。それで、オリジナルのまま、read_file関数
を、おっしゃる様に変更し、実行させました。
デバッカーで追ってみたところ、
read_file関数を呼び出すと、確かにread_line関数
で*line にデータが入りますが今度はadd_line関数
が呼ばれると、*line のデータが無くなってしまいます。?
ポインタ良く分かってないです。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


186 Re^2: ダイナミック リンク ライブラリのありか コメント数:  0件
  本多   | manybook@msc.biglobe.ne.jp 2001/10/31 (水) 21:20
> もうちょっと詳しい人が降臨してくださることを期待してましたが(^^;
もしかして誰にも相手にされず無視されちゃうのかと心配しましたが...(^^)

> まさにこういう時のためのLD_LIBRARY_PATHだと思ってましたが。
やっぱりそうですよね。
やはりユーザにLD_LIBRARY_PATHを指定もらうしかないか。
別の環境変数にライブラリのパスが入っているのは知っているんですがね。

ちなみに、同名の関数で機能が若干異なるものが入ったライブラリを
複数作って状況によっては動的にリンクするライブラリを変えたり...
というのをプログラム側から変えたりとかって、あんまりやるべきじゃない
設計なのでしょうかね。

> ただ、LD_LIBRARY_PATHにも問題はあるようで、GoogleでWEB全体を
> 対象に検索をかけると最初にかかってくるページにいろいろ書いて
> あるような。
"Why LD_LIBRARY_PATH is..."って奴ですね。
えーごかぁ。誰か日本語訳作ってくれないかなぁ...
しょうがない時間をかけて読むかな
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


185 ファイル名について コメント数:  6件
  森   | kenpacafe@hotmail.com 2001/10/31 (水) 02:31
前橋様
初めてカキコいたします。
以下の環境で C の勉強はじめました。
98/ME 
エディタ− 秀丸
コンパイラ--LSI(Lsic86-試食版)C にインスト-ル
ファイルはLSI->Lsic86->Mysrcに保存
MS-DODS
時間 深夜が多い

ファイル名について
例えば体当たり学習 p-39のソ−スを
自分なりにあとで解りやすくするため
このようなファイル名で保存する
yalist1-1.c
コンパイラにかけると
C:\Lsic86\MySrc>lcc yalist1-1.c
can't open: yalist1-1.c: No such file or directory

ファイル名を短くして
コンパイラにかけると

yali1-1.c

C:\Lsic86\MySrc>lcc yali1-1.c
lld @link.i

C:\Lsic86\MySrc>yali1-1
hoge..10

ファイル名は int 型のような
文字制限があるのでしょうか?

今月号の日経ソフトウェア−のDOSコマンドライン
等を読んでもこの様な超初心者は論外なのか
よく解りません



おしえてください おねがいします。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


184 Re^10: 先ほどのことで コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/10/30 (火) 19:42
 http://member.nifty.ne.jp/maebashi/
> 前橋さんへ
> List 4-8 read_file.c の 9行目は不要です。7行目は何のため?

ご指摘ありがとうございます。

# 正誤表に載せるにしても、行番号がずれるから、
# どう対応したものか...

> それから、「体当たり」の正誤表の日付順インデックスで、2000/9/16
> p.77 が seigo.html#p277 になっていて飛べません。

こちらもありがとうございます。うちに帰ったら直しておきます。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


183 Re^3: reallocで質問 コメント数:  1件
  (ぱ)   | maebashi@cse.co.jp 2001/10/30 (火) 19:35
 http://member.nifty.ne.jp/maebashi/
> ソース精査をしてるのですが、
> 揚げ足取りみたいに思われるかと考えると、
> いまいち自信がなかったもので・・・。

realloc()が失敗してそのまま死んでしまうプログラムなら、
私は差し支えないと思うのですが。

> > そういうことなら、fj.comp.lang.c の長〜いスレッドを...
> すいません。fj.comp.lang.cってアドレスを知らなかったりします。

NetNewsです。Webで見るならこの辺ですか。

http://queen.heart.ne.jp/cgi-bin/queen4?word=&;ng=fj%2Ecomp
%2Elang%2Ec&ym0=200002&ym1=200002&begin=1

# 長すぎるので改行しています。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


182 Re^9: 先ほどのことで コメント数:  2件
  かずま   | sakamoto@mc.catv.ne.jp 2001/10/30 (火) 19:05
> ReadLineStatus read_line(FILE *fp, char **line); 関数を
> read_file 関数からは
> char **line; と宣言されていて
>  While((status = read_line(fp,line) != READ_LINE_EOF)
> と呼んでいると思います。

これが間違っています。変数を char *line; と宣言して、
read_line(fp, &line) で呼び出さないと正しい動作になりません。
関数宣言の引数の char **line の意味を誤解していませんか。
List 4-1 で void func(int *a, double *b) に対して、
呼び出し元の main で、int *a; という変数宣言はしていませんよね。
int a; と宣言し、func(&a, &b) で呼び出しています。

前橋さんへ
List 4-8 read_file.c の 9行目は不要です。7行目は何のため?

それから、「体当たり」の正誤表の日付順インデックスで、2000/9/16
p.77 が seigo.html#p277 になっていて飛べません。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


181 Re^8: 先ほどのことで コメント数:  3件
  吉沢   | yoss@parkcity.ne.jp 2001/10/30 (火) 18:00
何度もすみません。説明が良く出来ませんが、どうも納得できないもので。

> mainから呼ぼうが、read_fileから呼ぼうが、使い方が変わるという
> ことはありません。

と思うのですが、やって見た結果で申しますと
ReadLineStatus read_line(FILE *fp, char **line); 関数を
read_file 関数からは
char **line; と宣言されていて
 While((status = read_line(fp,line) != READ_LINE_EOF)
と呼んでいると思います。これをmain関数で全く同じ様にやるとread_line
関数内の *line = malloc(sizeof(char..... のところでストップしてしまい
ます。一方これをmain関数で
 char *line; と宣言し
 While((status = read_line(fp,&line) != .....
とすると、うまくいってくれます。
なぜこうなるか良く分からないものですから?
lineがメモリに確保されるかされないかの問題だとは思うのですが、、、
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


180 Re: 超初心者の質問ふたたび コメント数:  2件
  D.Matsu   | dmatsu@gld.mmtr.or.jp 2001/10/30 (火) 08:56
>  ところで、使用しているのはwindous meなのですが、マイコンピュータを右クリックしても「環境変数」が見つかりません。
>  ヘルプで探してみたのですけれど、出てきません(涙)
>  どこにあるのでしょう。
>  再び、よろしくお願いします(ぺこり)

Meでの設定法は95/98の場合と同じはずです。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


179 超初心者の質問ふたたび コメント数:  3件
  とーや 2001/10/29 (月) 23:30
 costa様、リプライありがとうございます。

 ところで、使用しているのはwindous meなのですが、マイコンピュータを右クリックしても「環境変数」が見つかりません。
 ヘルプで探してみたのですけれど、出てきません(涙)
 どこにあるのでしょう。
 再び、よろしくお願いします(ぺこり)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


178 Re^2: reallocで質問 コメント数:  2件
  レプラコーン   | sailis@annie.ne.jp 2001/10/29 (月) 22:57
 http://www.annie.ne.jp/~sailis/pvon/
> それが危険であること、およびその理由(失敗時に前回ポインタを
> 開放できなくなる)までわかっていて、何を迷っているんでしょ、
> という気になりますが...

そうですね。ありがとうございます。
ソース精査をしてるのですが、
揚げ足取りみたいに思われるかと考えると、
いまいち自信がなかったもので・・・。

> ひょっとして解放しないままプログラムが終了した場合のことを
> 心配されてます?
>
> そういうことなら、fj.comp.lang.c の長〜いスレッドを...
すいません。fj.comp.lang.cってアドレスを知らなかったりします。
# こんな私はCプログラマ失格ですか・・・?

でもまさか、malloc〜free論争に帰結しますか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


177 Re: 前橋さんに コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/10/29 (月) 21:54
 http://member.nifty.ne.jp/maebashi/
>例えばmainのreturnの返り値を書く時に、
>(0)
>のように括弧を付けている本とかありますが、
>この本では(ほぼ)付けていないのって、何か
>特別な意味はありますか?

何も名指しにしなくても (^^;

・K&Rでは、第2版からは括弧をつけていない。
・retrun(0); のようにミスタイプしたとき、コンパイルで引っかかる。

ぐらいでしょうか。

結局はスタイルの問題でしかないですけど。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


176 Re: よかったです。 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/10/29 (月) 21:53
 http://member.nifty.ne.jp/maebashi/
>「C言語ポインタ完全制覇」を読みました。
>今まで知らなかったことや、間違って覚えていたことが多数あり、
>この本を読んでよかったと思います。

どうもです。はげみになります (_o_)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


175 Re^7: 先ほどのことで コメント数:  4件
  (ぱ)   | maebashi@cse.co.jp 2001/10/29 (月) 21:52
 http://member.nifty.ne.jp/maebashi/
>引数経由でのread_line関数の場合には、なぜmain関数から呼んだのと、
>read_file関数から呼んだのとでは使い方が違ってしまうのでしょうか?

mainから呼ぼうが、read_fileから呼ぼうが、使い方が変わるという
ことはありません。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


174 Re: reallocで質問 コメント数:  3件
  (ぱ)   | maebashi@cse.co.jp 2001/10/29 (月) 21:52
 http://member.nifty.ne.jp/maebashi/
>reallocを使うときに、mallocと同じ変数で戻り値を受け取る
>(下記参照)のは危険だと思っていたのですが、実際はどうですか?

それが危険であること、およびその理由(失敗時に前回ポインタを
開放できなくなる)までわかっていて、何を迷っているんでしょ、
という気になりますが...

>クリーンアップ処理に期待しても全然平気でしょうか?

ひょっとして解放しないままプログラムが終了した場合のことを
心配されてます?

そういうことなら、fj.comp.lang.c の長〜いスレッドを...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


173 Re: ダイナミック リンク ライブラリのありか コメント数:  1件
  (ぱ)   | maebashi@cse.co.jp 2001/10/29 (月) 21:50
 http://member.nifty.ne.jp/maebashi/
もうちょっと詳しい人が降臨してくださることを期待してましたが(^^;

>UNIXでバイナリで配布したいプログラムで、
>ユーザがどのディレクトリにインストールしてるか
>わからないライブラリをダイナミック リンクさせたい場合、
>どのようにするのが標準的な方法なのでしょう?
...
>ユーザにhogeのあるディレクトリを
>環境変数LD_LIBRARY_PATH or LD_RUN_PATHに追加してもらうのが
>一般的なのでしょうか?

まさにこういう時のためのLD_LIBRARY_PATHだと思ってましたが。

ただ、LD_LIBRARY_PATHにも問題はあるようで、GoogleでWEB全体を
対象に検索をかけると最初にかかってくるページにいろいろ書いて
あるような。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


172 前橋さんに 大したことない 質問 コメント数:  1件
  costa 2001/10/29 (月) 16:42
例えばmainのreturnの返り値を書く時に、
(0)
のように括弧を付けている本とかありますが、
この本では(ほぼ)付けていないのって、何か
特別な意味はありますか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


171 Re: 超初心者の質問なのですが コメント数:  4件
  costa 2001/10/29 (月) 16:34
> c:\ctest>bbc32 hello.c
> コマンドまたはファイル名が正しくありません.
> 上記のように出てしまいます。

これだけではよくわかりませんが、
とりあえずパスをチェックしてみましょう。
"http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html"
この話題は多少触れてあったような気がします。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


170 超初心者の質問なのですが コメント数:  5件
  とーや 2001/10/29 (月) 00:58
つい3日前にC言語を志し「体当たり学習」を購入した者です。
borland C++の無料版をダウンロードしてみたのですが

c:\ctest>bbc32 hello.c
コマンドまたはファイル名が正しくありません.

 上記のように出てしまいます。
 何が悪くてどうすればいいのかが、さっぱり分かりません。
 何がしかのアドバイスを、よろしくお願いします。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


169 よかったです。 コメント数:  1件
  はちみつガール 2001/10/24 (水) 20:41
「C言語ポインタ完全制覇」を読みました。
 今まで知らなかったことや、間違って覚えていたことが多数あり、この本を
読んでよかったと思います。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


168 Re^6: 先ほどのことで コメント数:  5件
  吉沢   | yoss@parkcity.ne.jp 2001/10/24 (水) 18:25
お世話になっております。 
> たまたま変数の型が「charへのポインタ」であるだけで、全く同じですよ。
すみません、色々考えたのですが、、良く分からないのでお教え下さい。

read_line関数の事なのですが関数の戻り値として返す場合のものは、read_file関数
から呼ぶのとmain関数から呼ぶのと全く同じで良いかったのに
引数経由でのread_line関数の場合には、なぜmain関数から呼んだのと、
read_file関数から呼んだのとでは使い方が違ってしまうのでしょうか?
(read_file関数と同じ様になぜmain関数から呼べないのか?)
 よろしくお願い致します。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


167 reallocで質問 コメント数:  4件
  レプラコーン   | sailis@annie.ne.jp 2001/10/23 (火) 21:49
 http://www.annie.ne.jp/~sailis/pvon/
reallocを使うときに、mallocと同じ変数で戻り値を受け取る(下記参照)のは危険だと思っていたのですが、実際はどうですか?
クリーンアップ処理に期待しても全然平気でしょうか?

-------------------------------------------------------
char *mp;

mp = malloc(10000);

/* ... 中略 ... */

mp = realloc(mp, 20000);  /* 失敗時に前回ポインタを開放できなくなる */
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


166 Re^6: 先ほどのことで コメント数:  0件
  吉沢   | yoss@parkcity.ne.jp 2001/10/19 (金) 15:30
> 引数経由で変数に値を返してもらう方法としては、
> 「1-2-6 実践---swap関数」
> 「4-1-1 戻り値以外の方法で値を返してもらう」
> で扱っています。
>
> たまたま変数の型が「charへのポインタ」であるだけで、全く同じですよ。

たびたびありがとうございます。
swap関数のところを読んだ時は、分かったと思ったのですが、、、
4-1-1の項目のところも、あわせもう一度よく読んで理解したいと思います。
ありがとうございました。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


165 ダイナミック リンク ライブラリのありか コメント数:  2件
  本多   | manybook@msc.biglobe.ne.jp 2001/10/19 (金) 15:06
かなり環境に依存した質問です。申し訳ない。

UNIXでバイナリで配布したいプログラムで、
ユーザがどのディレクトリにインストールしてるか
わからないライブラリをダイナミック リンクさせたい場合、
どのようにするのが標準的な方法なのでしょう?

コンパイル時に-R指定というわけには、いかないですよね?

ユーザにhogeのあるディレクトリを
環境変数LD_LIBRARY_PATH or LD_RUN_PATHに追加してもらうのが
一般的なのでしょうか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


164 Re^5: 先ほどのことで コメント数:  7件
  (ぱ)   | maebashi@cse.co.jp 2001/10/18 (木) 23:57
 http://member.nifty.ne.jp/maebashi/
> と言うことは、read_line のような文字列を引数でなく返してもらう
> 関数を使うにはこの様に書けば良のかと思いますが、これが正しいとする
> となぜこうなるのかは良く分かりません...

引数経由で変数に値を返してもらう方法としては、
「1-2-6 実践---swap関数」
「4-1-1 戻り値以外の方法で値を返してもらう」
で扱っています。

たまたま変数の型が「charへのポインタ」であるだけで、全く同じですよ。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


163 Re^4: 先ほどのことで コメント数:  8件
  吉沢   | yoss@parkcity.ne.jp 2001/10/16 (火) 13:30
お世話になります。
あれから色々やった結果、良く意味わかっておりませんが、実行できました。

> read_lineの仕様がリスト4-11の通りなら、
>
> >char **line ;
> ...
> >while((status = read_line(fp,line)) != READ_LINE_EOF){
>
> これではいけないはずです。
>

char *line;
...
while((status = read_line(fp, &line)) != READ_LINE_EOF){

でうまく行きました。
と言うことは、read_line のような文字列を引数でなく返してもらう
関数を使うにはこの様に書けば良のかと思いますが、これが正しいとする
となぜこうなるのかは良く分かりません...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


162 Re^3: 先ほどのことで コメント数:  9件
  (ぱ)   | maebashi@cse.co.jp 2001/10/15 (月) 18:31
 http://member.nifty.ne.jp/maebashi/
read_lineの仕様がリスト4-11の通りなら、

>char **line ;
...
>while((status = read_line(fp,line)) != READ_LINE_EOF){

これではいけないはずです。

>*line = malloc(size(char) * st_current_used_size);

ここで死んでいるとなるとそれくさいですね。

add_line()は無関係でしょう。もし、add_line()を書けば
死ななかったとしてもそれは偶然です。
# でも、確かに偶然で起こり得ないケースではないですが、
# 確率的には低そうな気が...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


161 Re^2: 先ほどのことで コメント数:  10件
  吉沢   | yoss@parkcity.ne.jp 2001/10/15 (月) 13:07
すみません、ご迷惑おかけします。

> の + と * の違いのせいだと思いますが。
text_data = realloc(text_data, (line_alloc_num * ALLOC_SIZE) ...
としてみましたがだめでした。

> 展開せずにadd_line関数を作ればその現象は起きないのですか?

はい、実行できます。
>
> >ここで実行時のエラーになってしまいます。
>
> どこで?
>
> 「実行時のエラー」とは?

Windows98 の DOS窓で、
このプログラムは不正な処理をしたので強制終了されます。
となります。 またBorlandC++ のデバッグでやって見ました。
こちらでは、access violation at 0x4011 のスレッド停止になりました。
停止したところは、 read_Line 関数内の
*line = malloc(size(char) * st_current_used_size);
です。

> 人に聞くなら、せめて原因を絞り込んでからにしませんか?

すみません、良く考えず質問してしまいました。
考えてみますとadd_Line関数がよく分かっておりません。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


160 Re: 先ほどのことで コメント数:  11件
  (ぱ)   | maebashi@cse.co.jp 2001/10/12 (金) 21:07
 http://member.nifty.ne.jp/maebashi/
ソースをそのままcut&pasteしたのなら、

>text_data = realloc(text_data, (line_alloc_num + ALLOC_SIZE) ...

の + と * の違いのせいだと思いますが。

いずれにせよ、

>add_line関数を呼ばないでこの関数を展開すると、

展開せずにadd_line関数を作ればその現象は起きないのですか?

>ここで実行時のエラーになってしまいます。

どこで?

「実行時のエラー」とは?

人に聞くなら、せめて原因を絞り込んでからにしませんか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


159 先ほどのことで コメント数:  12件
  吉沢   | yoss@parkcity.ne.jp 2001/10/11 (木) 15:06
たびたびすみません。 吉沢ともうします。
先ほどの事で以下の様にやってみました。
read_line関数の改訂版はうまく動作しました。

int main(void)
{
   :
ReadLineStatus status = READ_LINE_EOF;
char **line ;
int line_alloc_num = 0;

if((fp = fopen("ABC.TXT","rt")) == NULL){;}

while((status = read_line(fp,line)) != READ_LINE_EOF){

// text_data = add_line(text_data, line, &line_alloc_num, &line_num);

/********************************************************************/
assert(line_alloc_num >= line_num);
if(line_alloc_num == line_num){
text_data = realloc(text_data, (line_alloc_num + ALLOC_SIZE) * sizeof(char*));
line_alloc_num += ALLOC_SIZE;
}
text_data[line_num] = *line;
line_num++;

/********************************************************************/
read_lineはうまく行ってるみたいなのですが、add_line関数を呼ばないで
この関数を展開すると、ここで実行時のエラーになってしまいます。
何がいけないのでしょうか?

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


158 read_line.c 改訂版の使い方 コメント数:  0件
  吉沢   | yoss@parkcity.ne.jp 2001/10/11 (木) 12:06
はじめまして、
C言語ポインタの完全制覇 を読ませて頂いております。
それで、List4-11の改訂版の read_Line を使いたいのですが
add_character, *read_line 関数の変更が良く分かりません。
どの様にすれはよいのでしょうか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


157 Re^2: 関数へのポインタを返す関数 コメント数:  0件
  tos 2001/10/10 (水) 09:27
> void (*get_func(void))(void)
> {
> return func;
> }

そうですよね。こう書くんですよね。
どこかで見たことあるような気がします。

> get_func()();

これを最初に見たとき、ミスタイプかなと思ってしまいましたが、
get_funcは、関数のポインタを返すからこういう書き方もできるんですね。

> こんな感じで質問に対する回答になってますか?

はい、どうもありがとうございました。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


156 Re: 関数へのポインタを返す関数 コメント数:  1件
  本多   | manybook@msc.biglobe.ne.jp 2001/10/09 (火) 14:32
> K&Rに、「関数は、関数へのポインタを返すことができる」
> みたいな記述があったかと思うのですが、
> そのような関数は、どのように書けばいいのでしょうか?
void func(void)
{
printf("func() called\n");
}
void (*get_func(void))(void)
{
return func;
}
int main(void)
{
void (*func_ptr)(void);
printf("%p %p\n",func,get_func());
func_ptr=get_func();
func_ptr();
get_func()();
return 0;
}
こんな感じで質問に対する回答になってますか?
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


155 関数へのポインタを返す関数 コメント数:  2件
  tos 2001/10/09 (火) 09:04

すみません。
また、どなたか教えてください。

K&Rに、「関数は、関数へのポインタを返すことができる」
みたいな記述があったかと思うのですが、
そのような関数は、どのように書けばいいのでしょうか?

だめもとで、下記のようにしたのですが、やっぱりコンパイルが
とおらないので・・・。

void (*)(void) hoge(void)
{
}

もしかしたら、void * で返すということでしょうか?


【新規投稿】 【この投稿にリプライ】 【投稿者削除】


154 Re^3: コマンドラインのオプション引数 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/10/05 (金) 02:11
 http://member.nifty.ne.jp/maebashi/
> ちなみに内容はfor()で引数ぶん回してstrcmp()で
> 一致したら処理関数に渡すって感じですか?

です。copy&pasteする価値もないぐらいのものです。

> 私XtAppInitialize()を最初に見たとき(初心者時代)は
> 「おぉ、すげぇ〜。これ考えた奴って頭いいなぁ〜」って素直に
> 感動しました(^^)

私も感動しました。

でも、これに直接argcを渡すのは、「引数を変更するな」
という原則に抵触してしまうのでした。まあ、私は何につけ
ガチガチの教条主義者は嫌いですので、テキトーにやってますが。

【新規投稿】 【この投稿にリプライ】 【投稿者削除】


153 Re^2: sprintf()、単に知らないではなく、意味があります。 コメント数:  0件
  (ぱ)   | maebashi@cse.co.jp 2001/10/05 (金) 01:21
 http://member.nifty.ne.jp/maebashi/
> などと書くと、書式「"%s%s%s"」の部分で静的データ領域を
> 食いつぶしてしまうので、strcat() を使いますよ。

あ、「単に知らない」に一票入れはしましたが、「strcat()を使う
ことに意味があるケースもある」ことは承知しておりますです (^^;

ええと、このケースだと、文字列リテラルが7バイト、strcat()の
3連発でも実行コードでそれぐらい食いそうだから、
・文字列リテラルを静的データ領域(書き換え可能領域)に置き、
・ROMはともかくRAMの制限がきつい
という環境だと意味がある、ということでしょうか。確かに、
メモリがないとみみっちい節約のために文字列リテラルを書き換え可能
領域に置きそうな気もします。組み込みはやったことないので
詳しいことは知りませんが。

あとは、printf()を全く使わなければリンクしなくて済むとか...
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


152 Re: sprintf()、単に知らないではなく、意味があります。 コメント数:  1件
  nerd 2001/10/04 (木) 18:25
> strcat()派については何度か考えたことがあるのですが、
> どうも文字列を全体的に見れないで、

私は古いプログラマなのですが。

sprintf( sbuf, "%s%s%s", s1, s2, s3);

などと書くと、書式「"%s%s%s"」の部分で静的データ領域を
食いつぶしてしまうので、strcat() を使いますよ。

現在でも、メモリの制約のあるターゲットでは、(ゲーム機など)
こんな数バイトでも節約したいですから。
「メモリが少ないならアセンブラを・・・」という指摘は趣旨が
違うのでご勘弁を。
まあ、現在のPCみたいにメモリが豊富なら関係ないんですけどね。
【新規投稿】 【この投稿にリプライ】 【投稿者削除】


151 Re^2: コマンドラインのオプション引数 コメント数:  1件
  本多   | manybook@msc.biglobe.ne.jp 2001/10/04 (木) 07:57
> > 引数チェックなんて、どうやったってたいして難しくはならないんですけど、
> > そういえば、こういう引数のための標準的な仕組み(getopt()みたいなの)って
> > あるんでしたっけ?
> GNUにはgetopt_longというのがあるようではありますが。
GNUじゃ〜、ちょっと使える環境じゃないなぁ。

> > それともこういう引数チェックルーチンははみんな毎回作ってるんですか?
> 私は自前のものをcopy&pasteです。これぐらいならいいと思う。
ライブラリ風にしないでcopy&pasteして...ってことは
関数の中身の処理をコマンドの仕様にあわせて毎回編集しているってことですね?
引数専用ライブラリみたいなのはおおげさかな?

ちなみに内容はfor()で引数ぶん回してstrcmp()で
一致したら処理関数に渡すって感じですか?

> 引数を除去してargcを減らす、XtAppInitializeみたいな奴です。
私XtAppInitialize()を最初に見たとき(初心者時代)は
「おぉ、すげぇ〜。これ考えた奴って頭いいなぁ〜」って素直に感動しました(^^)
【新規投稿】 【この投稿にリプライ】 【投稿者削除】

Copyright(C) 1999 NIFTY Corporation
All Rights Reserved.