[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 15:17 / Filesize : 213 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131



1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ]
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
nssearch.hp.infoseek.co.jp/clang/
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
pc10.2ch.net/test/read.cgi/tech/1159613789/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.34【環境依存OK】
pc10.2ch.net/test/read.cgi/tech/1169039760/
C/C++の宿題を片付けます 82代目
pc10.2ch.net/test/read.cgi/tech/1169575464/

102 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 20:00:45 ]
ちょっとスレタイから離れすぎですよ、藻前等。

103 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 00:31:48 ]
;;;;(;・・)ゞウーン・・・むずかしぃですね

104 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 03:25:55 ]
>>103
初心者向けのスレで揉まれて来ることをお勧めします。

105 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 09:58:30 ]
遠慮します(o*。_。)oペコッ

106 名前:デフォルトの名無しさん [2007/02/07(水) 11:41:37 ]
[1] 授業単元:数値計算法
[2] 問題文(含コード&リンク):以下の常微分方程式をホイン法で解くためのプログラムを作成しなさい。また
0<=t<=10におけるx(t)およびy(t)のグラフをエクセルで作成しなさい。
dx/dt=2x(t)-0.01x(t)y(t)
初期条件にx(0)=300,y(0)=150
dy/dt=-y(t)+0.01x(t)y(t)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:c言語
[4] 期限:2007年2月9日まで
#include <stdio.h>
double func(double x, double y);
void heun(double x, double y, double a,double b, int n,double (*f)(double,double));
int main(void)
{ int n;
print("分割数を入力してください--->")
scanf("%d",&n);
heun(0.0,1.0,0.0,1.0,n ,func);
return 0;}
void heun(double x, double y, double a, double b, int n, double (*f)(double,double))
{ double k1,k2,h;
int i;
h = (b-x)/n;
for (i = 0 ; i<n ; i++)
{ k1=f(x,y); k2 = f(x+h,y+h*k1);
y = y+h/2.0 * (k1 +k2);
x = x+h;
print("x=%f \t y=%f \n" , x,y);}}
ここからどういじるのでしょうか?

107 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:44:33 ]
宿題は宿題スレ逝け

108 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 12:00:03 ]
分からないんですね~(=^‥^A アセアセ

109 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:18:43 ]
分かる分からない以前の問題だな

110 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:20:23 ]
分かる分からない以前の問題なんですねw~(=^‥^A アセアセ



111 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:23:22 ]
分かる分からない以前の問題だと分かってないのはお前だぜ

112 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:33:04 ]
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    
    |      |r┬-|    |      分かる分からない以前の問題だと分かってないのはお前だぜ
     \     `ー'´   /     
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwwwwwwwww~(=^‥^A アセアセ
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


113 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 15:18:00 ]
次の患者さんどうぞ

114 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 15:56:36 ]
16歳独身

最近、朝起きるとき、非常に気持ち良い快感で目覚めると
パンツがカピカピになってます。
何か尿道あたりに細菌が混入し、病気になっているのでしょうか。
心配で夜もねむれません。まぁ寝れますが。
これはどういった症状なのでしょう。

追伸:
最近SEXという言葉をしりましたが、意味はまだ理解してません。

115 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:51:18 ]
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    
    |      |r┬-|    |      分かる分からない以前の問題だと分かってないのはお前だぜだっておwwwwwwwwwwwww~(=^‥^A アセアセ
     \     `ー'´   /     
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwwwwwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


116 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:52:57 ]
ははは・・・~(=^‥^A アセアセ

117 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 22:29:42 ]
次の患者さんどうぞ

118 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 15:42:29 ]
クラミジアにかかってしまいました
痒いです

119 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 16:04:10 ]
剃毛した後に消毒用エタノールで綺麗にした後
この抗生剤を飲み、下着を適度に履き替え局部を清潔に保つようにしてください
一週間ほどで良いでしょう

120 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:41:05 ]
>>118
つテトラサイクリン



121 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 04:26:29 ]
>>118
残念だが、もうチンコは諦めてくれ。

122 名前:デフォルトの名無しさん [2007/02/11(日) 23:46:18 ]
ここ数年、仕事でC言語使って開発しています。

動くものは作れるのですが、
設計?構造でいつも悩んでいます。(状態遷移とか。。)

1つのイベントと複数のトリガを管理する定石とか、
状態遷移を管理するときの定石とか
まとまった書籍/HPないでしょうか?

デザインパターンのように拡張性を考慮した設計が知りたいです。

123 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 08:21:44 ]
正直、スレ違い。

124 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 13:06:15 ]
int a[42] = {}, b[42] = {0}

配列を0で初期化するのにこの二通りを目にするんだけど、
規格上はどちらも等価ですか?

125 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 14:13:00 ]
規格上は、{}の中には一つ以上の初期値を書かなければならないことになっている

126 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 14:26:14 ]
なるほど。ありがとうございます

127 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 23:27:37 ]
>125
便乗だけど、その理由が何なのか知りたいのだが。

128 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 00:03:24 ]
>>127
つ【規格でそう決まっているから】

まあマジレスすると、配列(構造体とかもだが)の宣言時の{}は、
複合文のくくりである{}とは違うもので、「初期化子となる式のリスト」を意味する。
(もちろん、中のカンマもカンマ区切りであってカンマ演算子ではない)
つまり、「=」が暗示するように、そこには何らかの式が少なくとも1つなければいけない。
ということ。構文上の問題だから、a[42]={}; でもOKなコンパイラもあるだろうけどね。

129 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 04:40:04 ]
= {} だったら、何も代入しないのか、空を代入するのか、よく分かんないんだよな。

130 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:51:56 ]
char str[SIZE] = "";

は全部ヌル文字になる?それとも

char str[SIZE] = {'\0'};

と書かなきゃダメ?



131 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:06:56 ]
>>130
前者後者ともローカル変数であるならば、関数突入時に毎回毎回、0のコピーか代入が発生する。
恐らく前者は、SIZEbyte分""のためのスペースが確保されることになる。

まぁ、全部ナル文字になることを当てにするロジックは推奨できないが。

132 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 16:57:45 ]
memset

133 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:44:28 ]
>>130
どっちも同じ。
char配列の文字列リテラルでの初期化は、
下のように1つずつ文字定数を指定したかのように扱われる。

134 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 21:38:40 ]
C++のstring.substr()のようなことがやりたいのですが、Cで文字列を抜き出す関数は何ですか?

135 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 21:49:18 ]
>>134
無いと思っていい。強いて言えば memcpy() ?

136 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:25:41 ]
ないんですか。道理で検索しても出てこなかったんですね。
memcpyから自作してみます。ありがとうございました。

137 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:35:04 ]
っていうかいつからsubstrはC++の標準になった?

138 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:40:41 ]
最初にISOで規格化されたときから
クラステンプレートstd::basic_stringの非静的メンバ関数になっている。

139 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:43:01 ]
>137
(゚д゚)

140 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:27:58 ]
>>134
memcpy()なんぞ使わずに、こんな関数でも用意しろ。
char * substr(char * buf, const char * str, int pos, int n)
{
sprintf(buf, "%.*s", n, str + pos);
return buf;
}



141 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 01:37:12 ]
>>140
関数用意するのはいいとして、こんな処理に sprintf() は高すぎる。
ここは memcpy() の出番だろ。

142 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 06:40:40 ]
|  |                                       人|  |
|  |                                        (_ .|  |
|  |                           strncpy → .(・∀|_|
|_|ω・`)  ←strncat                        (⊃ |糞|
|質|と )                                |∧.| ̄|
| ̄|u'

143 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 06:47:18 ]
>>142
いいの、おまえらはカスだから。

144 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 23:38:34 ]
strncpyはともかく、strncatをカスと言うな

145 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:25:42 ]
質問です
4バイト(32bit)で1が立っているかどうかを、1ビットずつ判定していきたいのですが、

for( i=0 ; i<32 ; i++ )
{
  if( (unsigned long)abc & (1<<i) == 1<<i )
  {
  }
}

こんな感じでいいでしょうか?
全然違うぞとかアドバイスありましたらよろしくお願いします。

146 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:41:51 ]
間違ってはないけど

if (abc & (1<<i))
{
}

で十分じゃね

147 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:42:55 ]
>>145
キャスト要らない。
1 だと int なので、符号ビットなど移植性を考えると 14 回までしか左シフトできない。
マスクした結果は 0 と比較したほうが効率がいいし、ソースが簡単にできる。

ってことで
  if( (abc & (1UL<<i)) != 0 )
または
  if(abc & (1UL<<i))
あたりがお勧め。

148 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:49:55 ]
あれ << って算術シフトだっけ?
1 << i だったら最上位ビットは動かないのか

149 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 00:10:41 ]
>>148
この場合は負の数が関係なので符号ビットとか言ったのは混乱の元だった。
ごめん。

どの環境でも保証されている INT_MAX の最小値は 32767 なので、
16384 になる 1 << 14 までしか移植性のある動作は保証されない。
それ以上シフトすると未定義動作になる。

1UL だと型が unsigned long になり、 ULONG_MAX の最小値の定義は
4294967295 なので 2147483648 になる 1UL << 31 まで大丈夫。

150 名前:145 [2007/02/18(日) 00:27:04 ]
みなさんありがとうございます
言われてifの使い方調べて勉強になりました。
if(a) a≠0:真 a=0:偽 なので
!=0や==0を省略できるのですね

あとULですが、どの環境でも使えるものなのでしょうか?



151 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 00:33:45 ]
>>150
整数リテラルのサフィックス UL は標準。どこでも使える。

152 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 02:09:52 ]
あと>149が言い忘れてるけど、移植性考えるならabcもintではなくunsigned longで定義すること

153 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 03:36:36 ]
abc のコピーを順次右シフトして 1 と and を取れば 1 の型を気にする必要なんかないのにな

154 名前:145 mailto:sage [2007/02/18(日) 06:11:09 ]
多くのアドバイスありがとうございます。

int i ;
unsigned long abc ;
if( (abc & (1UL<<i)) != 0 )
または
unsigned long saveabc ;
saveabc = abc ;
if( ((saveabc>>i) & 1) != 0 )

こんな感じでどうでしょうか?

155 名前:145 mailto:sage [2007/02/18(日) 06:18:55 ]
下のsaveabcは意味ないですね・・・コピーを順次右シフトどうやるんでしょう

156 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 06:30:43 ]
>>=1

157 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 06:33:17 ]
saveabc=abc;
for (i+......) {
 if (saveabc & 1) { ... } /* 最下位ビットのみチェック */

 /* チェック対象自身を右シフトしてしまえー */
 saveabc >>= 1; /* saveabc = saveabc >> 1; */
}

順次右シフトは、上記を示唆してるんだと思うよ

158 名前:145 mailto:sage [2007/02/18(日) 13:16:34 ]
なるほど、どうもありがとうございました

159 名前:145 mailto:sage [2007/02/18(日) 13:30:49 ]
すみません今思いついたのですが、

int i ;
unsigned long abc ;

for( i=0 ; i<32 ; i++ ){
  if( (abc>>i & 1) !=0 ){...}
}

これだとabcはunsigned longだし右に31シフトもできますでしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 13:33:40 ]
>>159 問題ない。



161 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 15:07:39 ]
・ abc>>i & 1
・ abc & 1<<i
・ copyabc & 1 ... copyabc>>=1
・ mask=1 ... abc & mask ... mask<<=1

abcの値がその後必要ないなら

・ abc & 1 ... abc>>=1

も使える

162 名前:145 mailto:sage [2007/02/18(日) 15:46:30 ]
大変勉強になりましたm(__)m
ありがとうございました

163 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 20:56:53 ]
free()でメモリ領域を解放する時、何故解放するメモリ領域へのポインタだけで解放できるんでしょうか?
解放するメモリ領域のサイズも必要な気がするのですが。

164 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 21:25:58 ]
>>163
その情報をポインタだけで引き出せるように管理しているから。
malloc/freeの実装の一例はK&Rに載ってる。
もちろんこれは一例で他にも実装方法はある。

165 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 21:51:42 ]
回答ありがとうございます。

malloc()したときに割り当てた領域へのポインタとサイズを一緒に記録しておいて
free()するときに引数として渡されたポインタを元に割り当てた領域のサイズを計算して解放するというような感じですかね?

K&R持ってないので買って読んでみます。

166 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:03:57 ]
>>165
そういう実装もあると思う。
K&Rのやり方は、

・mallocするときに管理用ヘッダ+要求されたサイズのメモリを確保
・mallocは管理用ヘッダのサイズ分アドレスを進めたポインタを返す
・freeは渡されてきたポインタから管理用ヘッダのサイズだけ戻して管理情報を得る
・各メモリ領域はリンクポインタで辿れるようになっている

という感じの実装だった(はず。今手元に本がない)。

167 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:07:11 ]
>>166
空き領域の線形リストで、渡されたポインタで挟まれる部分を探す方式でなかったっけ?

K&R 探すか

168 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:15:24 ]
>>167
うーん、そうだったかもしれない。ごめん。

169 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:18:11 ]
>>168
いやいや。 俺も記憶だけで書いてるから…

>>165 とまあ、なんとかしてポインタから領域情報をひねりだしてるですよ

170 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 17:55:41 ]
ちょっとK&R引っ張ってくる



171 名前:デフォルトの名無しさん [2007/02/24(土) 17:08:02 ]
標準化される前(つまりC89以前)の文字列リテラルの型はなんでしょうか?
現行規格では static char[] 型 です。

172 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 17:13:48 ]
staticはautoなんかと同じ記憶クラス指定子だから、変数を修飾していて、型を修飾してるわけじゃないよ

173 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 17:18:06 ]
まあでも静的記憶期間だと言いたいことはわかる

174 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 17:24:15 ]
標準化される前は処理系依存なんだからその質問は無意味な気がするが

175 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 17:29:41 ]
sizeof("ab") == sizeof("cde") が真ならchar*で、偽ならchar[]なんじゃね?
*"" = '\0'; でソレっぽいコンパイルエラーが出るならconstなんじゃね?

176 名前:171 [2007/02/24(土) 17:34:48 ]
標準化される前だから >>174 の言う通りですね、、、

177 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 18:03:14 ]
>>175
真っ赤な嘘書くなや。

178 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:33:02 ]
ところで、文字列リテラルの型がなんであるのかを知りたい理由が聞きたいんだが

179 名前:171 [2007/02/25(日) 20:06:13 ]
>>178
sizeof("1234567890") は char[11] のサイズか char* のサイズかを知る為
現行規格では char[11] のサイズ 11 になる

標準化前については、処理系依存で納得です。

180 名前:171 [2007/02/25(日) 20:09:09 ]
>>179
補足
標準化される前は 文字列リテラルの型は char* だと某所で見た。



181 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:17:40 ]
>>179
いやそうじゃなくて、文字列リテラルの型を知って
それを何に応用出来るの?って話だと思うぞ。
豆知識?

182 名前:171 [2007/02/25(日) 20:20:32 ]
>181
だから
標準化前の sizeof("1234567890") の値を知る為。
その為に文字列リテラルの型が必要

でも処理系依存で納得した。

183 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:21:50 ]
>>182
無限ループになりそうだからもうやめとく。

184 名前:171 [2007/02/25(日) 20:24:12 ]
>>183
>>178 には「知りたい理由」 とありますが?
「何に応用出来るか?」とは書いてません。

185 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:30:16 ]
くだらね

186 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 21:46:09 ]
変なのにからまれて、171 の中の人も大変だな。

187 名前:178 mailto:sage [2007/02/25(日) 22:20:33 ]
わかったわかった言い直すよ

どうして sizeof("1234567890") の値を知りたいのか教えてくれ

188 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:02:42 ]
>>182
逆ではないのか?
文字列リテラルの型を間接的に測る手段としてsizeofを使うんだろうが。

189 名前:デフォルトの名無しさん [2007/02/25(日) 23:13:57 ]
ファイル操作に関して質問です。

GB単位のファイルを処理しているんですが
ファイルの一部を上書きする標準関数てあるのでしょうか?
あと指定した位置から後ろ全てを削除するような関数も探してます。


190 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:15:27 ]
fseekして書き込めばいいんじゃないかな



191 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:17:05 ]
ググればサンプルも見付かるよ。

192 名前:189 [2007/02/25(日) 23:27:21 ]
fseek して fwrite ということですね!
ありがとうございます。

ファイルの後半を削るというのはやっぱり無理なんでしょうか?

193 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:31:32 ]
Cの標準ライブラリではそういうことするのはないな。
Windows限定だったらSetEndOfFileなんてものもあるけど。

194 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:39:19 ]
UNIXならtruncateか。

195 名前:189 mailto:sage [2007/02/25(日) 23:41:21 ]
ありがとうございます。

fseek で調べたら上書きができるということはわかりました。
ただ挿入というようなことはできないと考えてよいのかな?

後半削除はないのですね。
ということは実現するには必要な部分だけファイルコピーということですね。
Windows 限定のコードではないので残念です。
差分とメタデータ使って実現するしかなさそうだな・・・。

196 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:41:47 ]
0バイトをwriteするとそこから先が削れる場合もあるけど
処理系依存(そもそもwrite自体が処理系依存だが)

197 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:13:07 ]
stdioでできることは、
ファイルを作ること
ファイルをリネームすること
ファイルの任意の位置から読むこと
ファイルの任意の位置に書くこと
だけで、ファイルのサイズやレコードのオフセットを変更することはできない。
というかそれらはファイルの中身ではなく、ファイルの管理方法に関わることなので、
必然的に処理系のファイルシステムに依存する。

ありとあらゆる環境で動作することを保証したいなら、
それはファイルをまるごと読んで必要な構成で別ファイルに書き出し
元ファイルを消してから元の名前にリネームするしかない。
ある程度ターゲットの環境が決まっていて、それぞれに有効な環境依存の技があるなら、
それぞれの環境のためのコードを書いて、プリプロセッサで処理系に適合させるのが有効。

198 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 04:57:47 ]
そういうファイル処理するプロセスを環境ごとに作り、主プログラムからはそれを呼び出すというのも一つの手。

199 名前:171 [2007/02/26(月) 19:52:50 ]
>>187
某所で、その話題を見たから気になっただけ。

>>188
確かにそうですね。



200 名前:デフォルトの名無しさん [2007/02/28(水) 15:50:13 ]
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?



201 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:11:58 ]
>>200
楽しいか?

202 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:55:09 ]
>>201
C++相談室の「STLを使うと」から始まるコピペみたいに
テンプレ化せんとダメなんかなぁ?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef