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


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

C言語なら俺に聞け(入門篇) Part 18



1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 17
pc11.2ch.net/test/read.cgi/tech/1185286631/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 94代目
pc11.2ch.net/test/read.cgi/tech/1185452895/

357 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:58:03 ]
struct hoge
{
char name[1024];
int mark;
}

358 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:24:47 ]
生のデータを持つために、
struct {
char name[1024];
int mark[3];
}

359 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:58:54 ]
a = (struct A *)buf;
b = (struct B *)buf+20;

Bの構造体にbufの20バイト後から取り出したいんだけど
この記述はできない?

360 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:07:15 ]
>>359 の記述のままでもおk
でも、>>359 は何か根本的なことが分かっていない気がする

361 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:07:53 ]
>>359
bufがchar *などであるなら、
struct B b=*(struct B*)(buf+20)

362 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:09:37 ]
>>360
すっとこどっこい。

363 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:17:56 ]
offsetとか使いたいのではないのかなあ

364 名前:359 mailto:sage [2007/08/25(土) 22:23:25 ]
一応できた.
でもあんまり理解してないorz

365 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 00:57:24 ]
システムコールってC言語ですか?



366 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 07:15:28 ]
共用体(union)の中で構造体使うと
うまく領域を確保できなくてデータが変になる現象が起きてます。

今は使わない文字配列を共用体の中に書いて
無理やり余裕を持たせて領域確保してるんですが
共用体で使うメモリ領域をうまく確保する方法はありますか?

ちなみに環境はVineLinux4.1でgcc3.3.6コンパイラ使ってます。

367 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 07:24:22 ]
うまくいかないソースと現象の詳細を示せ

368 名前:366 mailto:sage [2007/08/26(日) 08:00:38 ]
説明しにくいんですけど
2Dのrobocup用ライブラリlibsclientをいじってて
http://www.koders.com/c/fidD6E7EBDD071F6F9579D1CAF12EF2FC434F5F7074.aspx
292~295行目
typedef struct _Ppos {
        WhichTeam team ;  // enum(WhichTeam=int)
        int unum ;
} PlayerInfo ;
に「int type;」というのを追加してライブラリとプレイヤーを再コンパイルして
実際にサーバーに接続してみたら動作が明らかに変になるんです。
312~317行目
        union {
        PlayerInfo player ;// 292~295行目の構造体
                Side side ;          // enum(Side=int)
                FlagPos fpos ;     // enum(FlagPos=int)
                LinePos lpos ;     // enum(LinePos=int)
        } id ;
ここに「char hoge[30];」を追加すると問題なく動作するようになるんで
共用体で構造体の大きさの領域が確保できてないという結論に至ったわけです。

369 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:14:49 ]
結論に至る前に sizeof で大きさを調べてみろ

370 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:08:10 ]
make cleanしてないんじゃねーの?

371 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:27:06 ]
>>365
システムコールはC言語でもサポートされていますが
システムコールはC言語ではありません

372 名前:366 mailto:sage [2007/08/26(日) 13:49:54 ]
>>370
それでしたorz
ライブラリとプレイヤ自体はmake cleanしてたんですが
ライブラリを読み込んでるプレイヤ共通の関数をまとめたやつをし忘れてました。

>>367,>>369,>>370こんな僕にレスしてくれてありがと

373 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:34:06 ]
相談なんですが,ファイルに以下のように保存されていて,
a[1]=AAA
a[2]=BBB
a[4]=DDD
これを以下のように新規で追加,削除,変更などしたい場合,
a[1]=AAA
a[2]=ABC
a[3]=DEF
一回全部読み込んでbufなどに保存し,それから一気に全部ファイルへ書き込む方法が
あると思いますが,それ以外に方法ありますか?


374 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:43:43 ]
>>373
固定長レコードもファイルならfseekで該当レコードのところにファイルポインタを
位置決めしてfwriteでレコードを上書き。

375 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:53:28 ]
>>373
データをファイルの最後尾に書き込みして
読み込み時、重複する場合は「もっとも後ろにあるデータ」を有効とするとか

たとえば

a[1]=AAA
a[2]=BBB
a[4]=DDD
  ↓
a[1]=AAA
a[2]=BBB
a[4]=DDD
a[3]=DEF
a[2]=ABC
a[4]=

読み込み時にデータ(a[2]=BBB)をデータ(a[2]=ABC)で上書きする感じ
a[3] は新規追加、a[2]は変更、a[4]は値なしなので削除



376 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 22:01:50 ]
>>374
その標準関数を使ったことないんで調べてみます

>>375
その方法も考えたんですが,何回も書き込みを行うとデータが多くなり
読み込むのに時間がかかりそうなんで,有効データだけ残す方法をとりたいですね

お二人様サンクスです!検討してみます

377 名前:デフォルトの名無しさん [2007/08/27(月) 17:11:43 ]
超初心者ですみません。
2の0乗+2の1乗+2の2乗+2の3乗+2の4乗+・・・
というプログラムはどのようにしたらよいのでしょうか?
いろいろ調べてかいてみたのですができませんでした><
どなたかアドバイスお願いしますm(__)m

378 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:19:53 ]
1 + 2 + 2 * 2 + 2 * 2 * 2 + 2 * 2 * 2 * 2 + ...

379 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:40:04 ]
for(n=1, sum=0;;n*=2) sum+=n;

380 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:47:15 ]
>>377
しょぼくて申し訳ないが、
int hoge(int count){
 int result = 1; 
 if(count <= 0)
  return 1;
 for(int i=1;i<count;i++){
  result += 2*i;
 }
 return result + hoge(count-1);
}

381 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:12:29 ]
二進法で結果を出力するプログラムならこれでいいよ。

#include <stdio.h>

int main(void)
{
  for (;;)
    putchar('1');
}

382 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:14:02 ]
// ウンコード
int func(size_t n) {
int ret = 1;
size_t i;
for (i = 1; i < n+1; ++i)
ret += 1<<i;
return ret;
}

383 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:15:40 ]
ウンコードなんて、クソースのパクリみたいだな、¢50徴収するぞ?

384 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 19:00:13 ]
>>377
pow(2, n+1) - 1

385 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 19:40:33 ]
>>377
~(~0<<n)



386 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:01:40 ]
ビット演算凄いです^o^

387 名前:デフォルトの名無しさん [2007/08/27(月) 21:15:03 ]
Javaで言うところの「equals」ってC言語だと何ですか?

388 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:17:00 ]
Javaの何のクラスのequals?

389 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:17:59 ]
>>387
==

390 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:18:36 ]
>>387
C言語には対応するものはないかな?
C++なら、状況応じて==をequals風に定義しなおすことになる。文字列とか。
Javaのように==とequalsを明確に区別することはできない。

391 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:25:34 ]
Stringクラスのequalsならstrcmp関数だろ
あくまで、文字列比較という意味でね

もっとも、equalsメソッドはオブジェクトのデータの比較だから
そういう意味なら、オブジェクト指向でないCにはそれに該当するものはない

392 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:31:41 ]
memcmp (^^;

393 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:11:53 ]
Cの場合、
構造体だと、専用の比較関数作らなきゃならんね。

394 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:18:11 ]
Object.equalsだったら、ポインタに対する==演算子が最も当てはまる存在だな。

395 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:27:05 ]
387です
失礼しました、説明が足りなかったようで・・・
Javaでは、([変数].equals("○○○")) と書くところを
C言語だとどのように書くのかという意味です



396 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:31:16 ]
>>395
何も読んでないのか?
クラスによってequalsの挙動は違うだろうが。

397 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:31:47 ]
>>395
[変数]の型は何?
派生クラスでオーバーライドできるから、
クラスによって挙動が違い、Cで対応するものも異なる。

なお、Stringなら>>391

398 名前:デフォルトの名無しさん [2007/08/27(月) 22:48:56 ]
ファイルのプロパティの概要で表示されるタイトルに
そのファイルの拡張子を除いたファイル名を設定するプログラムを作成したいのですが
どのようにすればタイトルに書き込めるのでしょうか?

399 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:53:24 ]
>>395
if (strcmp(変数, "○○○”) == 0) ・・・

400 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:55:30 ]
>>398
プロパティ窓を取得、拡張子まで削ってSetWindowText

401 名前:398 [2007/08/27(月) 23:11:00 ]
>>400
プロパティ窓はどのようにして取得するのでしょうか?

402 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:17:33 ]
>>398
IPropertyStorageでググればいろいろ見付かる。
ただし、Cでやるのは面倒。少なくともC++は欲しい。

なお、この情報は、NTFSの副次ストリームに保管される。
あるいは、OLE構造化ストレージ(2003までWord/Excelファイルなど)なら
ファイル自身に保管される(このため構造化ストレージならNTFSでなくても可能)。


403 名前:398 mailto:sage [2007/08/27(月) 23:20:09 ]
>>402
Cでは厳しいですか・・
調べてみます
ありがとうございました

404 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:01:37 ]
t

405 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 03:30:57 ]
>>404
ありがとうございました



406 名前:デフォルトの名無しさん [2007/08/29(水) 11:41:07 ]
377です。
みなさんありがとうございます><

407 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:34:19 ]
* 引数 :char *data : 追加したい文字列
* : int index : 追加したい位置
* : element *new_data : 新しく追加するリスト
* 戻り値:成功1,失敗-1
*/
int add_data(char *data, int index, ELEMENT *new_data){
ELEMENT *tmp;
int cnt = 0;

if(data == NULL || index < 0 || index > element_cnt || new_data == NULL){
return -1;
}
new_data->data = data;
/* インデックスの位置の直前に移動 */

for(tmp = head;cnt != index;cnt++,tmp = tmp->next);
new_data->next = tmp->next;
tmp->next = new_data;
printf("help\n");
return 1;
}
こんな感じでリスト構造にデータを入れる関数を作ったんですが、
Borlandでは正しく動くのにVisual Studioでは呼び出しもとに返らず終了してしまいます
helpというプリント文は表示されます。どなたか、解決策を教えてもらえませんか?
↓がリストの構造体です
typedef struct element {
char *data;
struct element *next;
} ELEMENT;


408 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:11:45 ]
>>407
そのソースだけだとわかんないなぁ
引数の「char *data」はその都度領域確保されているの?
それから「element_cnt」って要素数だよね?いつインクリメントしてる?

409 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:14:25 ]
>>407
デバッガでも使って確かめろ位しか

410 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:20:40 ]
>>408
そうですよね。>>409さんのデバッガを調べてみます
「char *data」はただダブルコーテーションで文字列を渡すだけしてます
「element_cnt」については処理を書き込み忘れました

411 名前:408 mailto:sage [2007/08/29(水) 21:31:46 ]
>>407
それから追加するインデックスを0にした場合は
実際に追加されるのはインデックス1の場所にならない?
0の場合headを書き換えないとおかしくなるんじゃない?

まぁあと/* インデックスの位置の直前に移動 */ といっているけど
cnt!=index ってことはindex の位置で止まる

>new_data->next = tmp->next;
index+1の要素を新要素の次の要素にする
>tmp->next = new_data;
indexの次の要素を新要素にする

結局追加される場所はindex+1の場所にならない?

412 名前:407 mailto:sage [2007/08/29(水) 21:50:13 ]
>>411
すいません!書き忘れてましたけど、headはstatic変数で今回ダミーとして扱います
ちなみにheadはhead->next = NULLで初期化してあります。

for文の初期化でtmp = head;とあるので、head->nextでダミーではない値をもつリストに入るときにはcntは1になっています
なのでcnt == indexはひとつ前になるんじゃないかな〜と考えてます。間違えてたらすいません




413 名前:408 mailto:sage [2007/08/29(水) 21:54:23 ]
>>412
つまり head->next が最初の要素ってことですね
なら納得です

だとすると、やはりこのソースからだと分かりませんね
私はここまでです

414 名前:407 mailto:sage [2007/08/29(水) 22:11:13 ]
>>413
そうですか、ありがとうございました。
原因はこれだけのソースではわからないと思うので、ななし.orgに全部のソースをアップしました
見てくれるなら見てほしいです。んでVisualStudioで実行してほしいです

まだ途中なんでできたらツッコミとかよろしくおねがいします



415 名前:408 mailto:sage [2007/08/29(水) 22:33:26 ]
>>414
そういうときはURLも貼ってくれないと
ななし.orgってどこですか?



416 名前:407 mailto:sage [2007/08/29(水) 22:43:24 ]
すいません。。ここです
77c.org/upload.php?fn=off&page=1

417 名前:408 mailto:sage [2007/08/29(水) 23:02:01 ]
>>416
まずここかな

void init_list(void){
ELEMENT top;
head = ⊤

element_cnt = 0;
head->next = NULL;printf("\(^o^)/");
}

ELEMENT top; は関数のローカル変数
head = ⊤
top の実体は関数抜けたら無効になる
にも関わらず 関数外でhead(top) にアクセスしてる

418 名前:407 mailto:sage [2007/08/29(水) 23:12:46 ]
>>417
ああ〜!そうですねw普通におかしいですね

419 名前:408 mailto:sage [2007/08/29(水) 23:16:02 ]
>>418
一応こちらの環境(BCC5.5)では>>417を改善することで動作はします
(もう少し動作チェックしてみますが)

それから余談ですが、ポインタ配列使うなら ELEMENT next いらないんじゃないですか?
せっかくポインタ繋ぎしてるんですから add_data() 内で new_data=(ELEMENT *)malloc(sizeof(ELEMENT)) してみては?
いまは動作チェックが目的でこうしているというならゴメンナサイね

それから最後にfree()も忘れずに

420 名前:407 mailto:sage [2007/08/29(水) 23:24:18 ]
改善しました!>>408さん、ありがとうございました!

関数内でmallocはしなくて良い、と言う問題だったので、main側で確保したんです。
自分も関数内で確保した方がいいと思うのですが・・・

421 名前:408 mailto:sage [2007/08/29(水) 23:52:07 ]
>>420
そういうことですか
分かりました
それらが題意であるならしょうがないですね

余計なことかもしれませんが、
remove_element() は要素を削除するんですよね?
この方法(配列上で行う連結リスト)だと要素を削除した後、その後追加する際に、
空いている要素と空いていない(使われている)要素の区別がつかないので
その点も考慮していく方がよろしいかと思います

422 名前:421 [2007/08/29(水) 23:53:29 ]
#include <stdio.h>
main()
{
static int a[5]={15,8,48,50,27}
int sum,heikin,i;
sum=0;
for(i=0;i<5;i++){
sum=sum+a[i];
}
heikin=sum/5;
printf("goukei=%d\n",sum);
printf("heikin=%d\n",heikin);


}

これにあと配列中の奇数と偶数の数を出力するのを追加したいんですが
どうすればいいんでしょうか?

423 名前:407 mailto:sage [2007/08/30(木) 00:02:53 ]
>>421
確かにそうですね。mainの考慮をしてみます!

424 名前:408 mailto:sage [2007/08/30(木) 00:05:50 ]
>>422
こんなんでどうですか?
配列中の値を2で割ってあまりが出るかでないかで奇数、偶数を判断

#include <stdio.h>
main()
{
static int a[5]={15,8,48,50,27}
int sum,heikin,i;
int kisu=0,gusu=0;
sum=0;
for(i=0;i<5;i++){
sum=sum+a[i];
if(a[i]%2) kisu++;
else gusu+++
}
heikin=sum/5;
printf("goukei=%d\n",sum);
printf("heikin=%d\n",heikin);
printf("奇数 %d個 / 偶数 %d個",kisu,gusu);

}

425 名前:408 mailto:sage [2007/08/30(木) 00:08:32 ]
>>422
ところでなんで 421 なんですかね?

>printf("奇数 %d個 / 偶数 %d個",kisu,gusu);
改行忘れたので入れといてください

printf("奇数 %d個 / 偶数 %d個\n",kisu,gusu);



426 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:09:46 ]
おまえも、関係ないなら名前の所の番号外せ

427 名前:422 [2007/08/30(木) 00:15:18 ]
>>425
ありがとうございます。

名前はミスして書いてしまったようです。すいません^^;

428 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:26:43 ]
怒られちった

429 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:19:36 ]
質問です。
例えば、データの処理(検索など)を行いながら、
同時に秒単位で経過時間を標準出力するといったようなことってできますか?
できるのであれば教えていただきたいのですが。

430 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:44:54 ]
>>429
検索のループ中に時間表示機能入れるなり、スレッド作るなり、signal使うなり
まぁ状況次第でなんなりとどーぞ。

431 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:14:55 ]
奇数偶数なら

if(a[i] & 1)
//奇数
else
//偶数

では?

432 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:18:54 ]
>>431
% 2 でなにか不都合なことがあるの?

433 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:22:31 ]
>>431
負数が2の補数表現で無い環境の場合はうまくいかないんじゃない?
(そんな環境があるかどうかは知らないが…)

434 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:38:35 ]
問題の中に負数がないからどっちでもいいよ

435 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:58:46 ]
>>432
もちろん論理的な不都合はないです。
ただ除算は一般に非効率なので、高速化を狙った提案。ですが、、
>>433
たしかに、そうですね。
使用可能かどうかの確認は必要だと思います。



436 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:46:43 ]
>>435
大丈夫、まともなコンパイラなら%2を割り算では実装しないから。

437 名前:435 mailto:sage [2007/08/31(金) 02:43:21 ]
>>436
gcc -S で試したら、確かに論理命令が生成されてました。
しかもunsigned だと n % 1 と n & 1 は完全に同じコードに。
勉強になりました。流れ止めて失礼しました。

438 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:54:01 ]
> n % 1 と n & 1 は完全に同じコードに
バグじゃね?

439 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:57:08 ]
バグだな

440 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 10:08:56 ]
n%2の間違いだろ、突っ込んでやるなよw

441 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:31:29 ]
実数で計算した結果の小数点以下を切り捨ててて
整数のところだけを別の計算に使いたいのです。

どのようにすればできるのかでしょうか。

442 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:37:22 ]
>>441
一度 int にキャストする (正数のときのみ)、あるいは floor()。
入門以前のレベル。本くらい買え。

443 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:40:06 ]
472 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/31(金) 14:55:28
浮動小数点の小数点以下を簡単に取る方法ってないですか?

473 名前:デフォルトの名無しさん[sage] 投稿日:2007/08/31(金) 15:13:39
f - floor(f)

444 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:40:31 ]
文字列とfor文についての質問です。
--出力結果--
sample01.txt
sample02.txt
sample03.txt
sample04.txt
sample05.txt
------------
上のように出力し、かつそれぞれを格納したいのですが、
数字の部分に繰り返し文を使ってうまくやる方法がわかりません。

おしえてくらはい><

445 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:52:51 ]
sprintf(fname, "sample%02d.txt", i);



446 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:08:26 ]
あまりの入門レベルにワロタwww

447 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:17:16 ]
入門篇だからいいんじゃね?

448 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:00:31 ]
でも入門書くらい読めよ、てのが少なくない。

449 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:41:01 ]
>>445
うまくいきそうです!ありがとうございました!!

450 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:38:58 ]
>>429
できなくはないが、C言語入門の範疇じゃないな。
OS関連のプログラミングを勉強しないと無理。

451 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:05:03 ]
>>444
char filename[5][100];

for (i = 0; i < 5; i++) {
  sprintf(filename[i], "sample%02d.txt", i + 1);
  printf("%s\n", filename[i]);
}

452 名前:デフォルトの名無しさん [2007/09/01(土) 23:22:05 ]
uintptr_t とかsize_t型ってなんなんですか
これもwindowsプログラミング特有の、#defineした型なんでしょうか?

453 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:23:29 ]
#defineはしてないと思うよ^^

454 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:35:05 ]
>>452
size_tは標準の型。
unsigned intとかunsigned longあたりのtypedef。
strlen()のリターン値とかで使われてる。

uintptr_tは知らんけど、
docs.sun.com/source/806-4836/conv_v9.html
これを見ると、導入が予定されてるのかな?

455 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:12:21 ]
size_tは標準Cに入っている記憶域の大きさを表す型、
sizeof演算子の結果の型と定められている。

uintptr_tはC99から導入された<stdint.h>で宣言されている型の1つで、
ポインタをキャストしても表現を失わないと規定されている符号無し整数型。
VC++でも最近はuintptr_t/intptr_tだけ<stdlib.h>で宣言されている。
<stdint.h>ごと入れればいいものを。

Windowsプログラムなら、uintptr_tよりUINT_PTRのほうが良く見かけるな。
こっちはWindows APIの型とされているし、
VC++にuintptr_tが入るよりも前から存在していたから。



456 名前:デフォルトの名無しさん [2007/09/02(日) 00:43:43 ]
一週間ほど前にプログラミングをCから始めまして現在、
ttp://homepage3.nifty.com/mmgames/c_guide/05-02.html
まで勉強しました。そこで、もっといいサイトがあるよ〜
っていうのがあれば教えてくださいm(_ _)m
できれば書籍等も・・・・

教えて君で失礼しますた(´・ω・`)

457 名前:452 [2007/09/02(日) 00:48:08 ]
>>453-455
ありがとうございます。
なるほど、typedefでしたか・・・・。








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

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

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