C言語なら俺に聞け(入門篇) Part 55 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
09/10/29 21:10:18 BE:227211146-DIA(352353)
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 131代目
スレリンク(tech板)

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 54
スレリンク(tech板)

過去スレ
URLリンク(makimo.to:8000)

2:デフォルトの名無しさん
09/10/29 21:25:05
ぬるぽ

3:デフォルトの名無しさん
09/10/29 21:51:20
NULL pointer exeption

4:デフォルトの名無しさん
09/10/29 22:41:25
C++がスレ違いというのは言い過ぎ

5:デフォルトの名無しさん
09/10/29 23:04:44
いいえスレ違いです


6:デフォルトの名無しさん
09/10/29 23:05:22
気に入らないならC/C++室スレにでも行ってください

7:>1乙
09/10/29 23:26:00
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること、サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
【初心者歓迎】C/C++室 Ver.69【環境依存OK】スレリンク(tech板)
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 131代目 スレリンク(tech板)

[ 前スレ ]
C言語なら俺に聞け(入門篇) Part 54 スレリンク(tech板)

[ 過去スレ ]
URLリンク(makimo.to:8000)

[ 関連スレ ]
【初心者お断り】ガチ規格準拠C専用スレ Part134 スレリンク(tech板)
C/C++小心者スレッドPart1 スレリンク(tech板)
[ 雑談スレは雑談スレで ]
malloc スレリンク(tech板)
break文の是非について スレリンク(tech板)
ポインタ死ねよ。 スレリンク(tech板)
Cでプログラム言語は完成した スレリンク(tech板)
C言語を始めるのに良いサイトってありますか? スレリンク(tech板)
C/C++ Coding Style Thread スレリンク(tech板)
C言語は関数ができなくても、理解可能か? スレリンク(tech板)
cとc++どっちがいいの? スレリンク(tech板)
Vim vs Emacs Part2 スレリンク(tech板)

8:デフォルトの名無しさん
09/10/29 23:45:35
テンプレ追加キボンヌ

ここではC++言語は別言語と考えますので、スレ違いになります。
ただしC++言語のコード(拡張子=.cpp)をリネームしてC言語の
コードとしてコンパイルできる場合はC言語のコードとみなします。

9:デフォルトの名無しさん
09/10/30 00:19:07
.cpp
.C
.cc


10:デフォルトの名無しさん
09/10/30 01:09:53
Linuxで作成した拡張子.cのファイルをウィンドウズで開くと
文字化けして見れないんですがウィンドウズ上で見る方法ないですか?

11:デフォルトの名無しさん
09/10/30 01:12:32
>>10
ブラウザにドロップしてみる

12:デフォルトの名無しさん
09/10/30 01:18:52
>>11
できました!こんな簡単な方法があったとは・・・

13:デフォルトの名無しさん
09/10/30 01:20:08
偽の条件式ってのは整数の0と同等に扱っていいんでしょうか?
それと、真の場合は1とは限らないんでしょうか

int x = ( 1+2 == 2 ); これはint x = 0と同じでいいのか、
int x = ( 1+2 == 3 ); これだと常にx = 1になるのか、教えてください

14:デフォルトの名無しさん
09/10/30 01:21:28
>int x = ( 1+2 == 2 ); これはint x = 0と同じでいいのか、
いい
>int x = ( 1+2 == 3 ); これだと常にx = 1になるのか、教えてください
なる

15:13
09/10/30 01:25:30
どうもありがとうございました
だとすると、今まで簡単に書ける式をわざわざif文とか必要ない変数とか宣言して書いてました

16:デフォルトの名無しさん
09/10/30 09:53:57
自信がない場合は条件演算子を使うのも一つの手です。
曰く、
int x = (1 + 2 == 2) ? 1 : 0;
int y = (1 + 2 == 3) ? 1 : 0;
尤も、boolean型を作ってしまう手もありますが。
そもそもc99では標準で使えることですし。
stdbool.hが見つからないならこんな感じで作れます。
typedef enum {false, true} bool;
bool x = 1 + 2 == 2;
bool y = 1 + 2 == 3;

17:デフォルトの名無しさん
09/10/30 12:18:21
>>16
下のほうはものすごく気持ち悪い

18:デフォルトの名無しさん
09/10/30 13:00:11
そもそもそんなの使う場面が無い。


19:デフォルトの名無しさん
09/10/30 21:21:24
double **dSData = NULL;

dSData = new double*[100];
for(int i=0; i<100; i++){
dSData[i] = new double[100];
}

という感じで動的な二次元配列を作ったのですが、

sizeof(dSmokeData[0]);

とやるのと

double dTest[100];
sizeof(dTest);

とやるのとでは、sizeofの結果が違うのですが、なぜでしょうか?

20:デフォルトの名無しさん
09/10/30 21:23:41
括弧つけんなボケ

21:19
09/10/30 21:27:03
訂正

sizeof(dSmokeData[0]);

sizeof(dSData[0]);


22:デフォルトの名無しさん
09/10/30 21:31:25
>>19
dSData の型をみるよろし

23:19
09/10/30 21:36:18
>>22
確かに型は違っています。

dSDataを使って

double dTest[100];
sizeof(dTest);
とした状態と同じ結果を表すにはどうしたらよいでしょうか?

24:デフォルトの名無しさん
09/10/30 21:39:29
>>23
double (*dSData)[100] = NULL;

25:19
09/10/30 21:43:34
>>24
double **dSData = NULL;
ではできないんでしょうか?

dSDataはグローバル変数で、要素の数はソースの途中で決まるため、宣言時には指定できないのです。。

26:デフォルトの名無しさん
09/10/30 21:48:19
>>25
new とか使うってことは C++ でしょ?
STL の vector 使えばいいよ

27:19
09/10/30 21:57:04
>>26
vector<int> v(100);
sizeof(v);

double dTest[100];
sizeof(dTest);

sizeof(v);とsizeof(dTest);の結果がやはり違います。

28:19
09/10/30 21:58:28
訂正

vector<int> v(100);

vector<double> v(100);

29:デフォルトの名無しさん
09/10/30 21:59:54
括弧つけるなアホ

30:デフォルトの名無しさん
09/10/30 22:01:57
int i;
i = sizeof (int);
i = sizeof i;

だっけか?

31:デフォルトの名無しさん
09/10/30 22:03:51
>>27
なんで sizeof に拘るのさ?

32:19
09/10/30 22:06:10
>>31
memcpyを使っているので、、、

33:デフォルトの名無しさん
09/10/30 22:12:35
>>32
.size() で大きさは分かる
が、古いコンパイラだと vector の中身が連続領域じゃない可能性もある

34:デフォルトの名無しさん
09/10/30 22:16:09
え?ベクターって実装上連続であること保障されてないの?

35:デフォルトの名無しさん
09/10/30 22:18:31
プゲラ

36:デフォルトの名無しさん
09/10/30 22:20:59
>>34
古い仕様書には明記されていなかったから
実装がどうなっているかはコンパイラ次第とかなんとか

37:デフォルトの名無しさん
09/10/30 22:36:28
C++厨は巣に帰れ

38:デフォルトの名無しさん
09/10/30 22:51:59
自己参照構造体使って自作するのがC使い

39:19
09/10/30 23:05:41
double dTest1[100][100];
sizeof(dTest1[0]);



double dTest2[100];
sizeof(dTest2);

とやっても
sizeofの結果が異なります。。

40:19
09/10/30 23:30:45

誤爆です。間違ってました。合ってます。

41:デフォルトの名無しさん
09/10/31 03:42:45
それは誤爆といわない

42:デフォルトの名無しさん
09/10/31 07:06:03
要素数はわかってるんだから変数に保存しておけばいいだけだろ
sizeofにこだわる必要はない

43:デフォルトの名無しさん
09/10/31 07:10:58
sizeofの値はコンパイル時に決まってないとだめだから実行時にしか決まらない値を得られるはずがない
関数じゃないんだからね


44:デフォルトの名無しさん
09/10/31 11:32:35
strcpy(a, (char)crypt("hogehoge", "EV"));
これって何かおかしい?

45:デフォルトの名無しさん
09/10/31 11:36:43
なんでcharにキャストしてるの?

46:デフォルトの名無しさん
09/10/31 11:47:54
>>45
キャストされてないってコンパイラに怒られたから

test.c:11: warning: passing arg 2 of `strcpy' makes pointer from integer without a cast

47:デフォルトの名無しさん
09/10/31 12:14:27
>>46
crypt.hをインクルードしてないだろ。

48:デフォルトの名無しさん
09/10/31 12:23:03
>>47
#define _XOPEN_SOURCE

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
char a[100];

strcpy(a, (char)crypt("hogehoge", "EV"));

printf("%s", a);

return 0;
}
これで問題ないはずなんだけど一応全文を

49:デフォルトの名無しさん
09/10/31 13:20:14
キャストは(const char *)でしょ

50:デフォルトの名無しさん
09/10/31 13:53:01
>>49
ありがとうございます

とりあえず生成できるようになったのはいいけど結果が2chと食い違ってて泣いた
でもURLリンク(age.s22.xrea.com)の例どうりにやったらあってたんだよなぁ

51:デフォルトの名無しさん
09/10/31 14:01:18
tripkeyの文字コードが違うんじゃないの?

52:デフォルトの名無しさん
09/10/31 14:12:58
abcdではあってなくてkamiではあってるってのもどうなのかなぁ・・・

53: ◆jG/Re6aTC.
09/10/31 14:22:50
test

54:デフォルトの名無しさん
09/10/31 14:52:17
>>46 見てなんでcharにキャストしたんだろうな

55:デフォルトの名無しさん
09/10/31 15:07:23
馬○だから

56:デフォルトの名無しさん
09/10/31 15:10:42
泣いて馬○を斬る。

57:デフォルトの名無しさん
09/11/01 01:33:45
eclipseみたいにコードの誤りが表示されて、'{'に対応する'}'が
自動で生成されるシンプルなテキストエディタって何かないですか?

IDEじゃなくて、コマンドプロンプトから実行できる、あと軽いやつで
なにかおすすめはないですか?自分よくコードを打ち間違えるんすよ。

58:デフォルトの名無しさん
09/11/01 01:49:34
間違えるな

59:デフォルトの名無しさん
09/11/01 01:55:57
emacs

60:デフォルトの名無しさん
09/11/01 02:11:05
IDE だってコマンドプロンプトから実行できるだろ。

61:デフォルトの名無しさん
09/11/01 02:46:48
vim

62:デフォルトの名無しさん
09/11/01 03:21:28
vim以外使ってる奴は糞。特に日本人しか使ってない秀丸とかいう糞エディタ使ってる奴はking of 糞。

63:デフォルトの名無しさん
09/11/01 03:46:14
vim(笑)

64:デフォルトの名無しさん
09/11/01 03:54:47
さすがにVi(中身はViMだろう)で開発はきつい
makeしたときのコンパイルエラーをちょろっと直す程度ならいいんだけどね
ctagsですね、わかります

65:デフォルトの名無しさん
09/11/01 08:15:22
gedit最強

66:デフォルトの名無しさん
09/11/01 09:12:45
個人的な好き嫌いだけで糞とか決めつけてる奴って協調性低そう
客先から縛りをつけられたことがなくコードは常に1人で書いてるんだろうな

67:デフォルトの名無しさん
09/11/01 09:36:58
>>65
なかなか高機能だよな。

68:デフォルトの名無しさん
09/11/01 13:18:33
EDLIN 使えボケ

69:デフォルトの名無しさん
09/11/01 13:22:57
Cならvimが最強。

70:デフォルトの名無しさん
09/11/01 13:27:18
vimを使ってない奴は人生の貴重な時間を無駄に浪費している

71:デフォルトの名無しさん
09/11/01 13:28:24
1バイト言語圏の人ならな。


72:デフォルトの名無しさん
09/11/01 13:28:41
Emacs じゃダメなの?

73:デフォルトの名無しさん
09/11/01 13:29:16
うわあ、かなり頭の悪いレスが続いてるなあ
いくら道具にこだわっても、そんな脳ミソじゃその人生自体無駄だろうね

74:デフォルトの名無しさん
09/11/01 13:51:32
あらゆるエディタを使い倒してきたエディタ神の俺だが、攻守最強形態vimだと悟りを得た。異論は認めないからそのつもりで。

75:デフォルトの名無しさん
09/11/01 14:07:04
これだから信者は。頭のネジが数えきれないくい抜けてるんだもん
こんなキチガイが回答者の質問スレとか始まる前から終わってるわ

76:デフォルトの名無しさん
09/11/01 14:16:43
自分の頭の悪さを棚にあげて、人をキチガイとか煽ってるやつも消えてほしい。

77:デフォルトの名無しさん
09/11/01 14:18:44
そして、誰もいなくなった……

78:デフォルトの名無しさん
09/11/01 14:21:31
棚上げって、俺の頭の良し悪しは今問題じゃないし。信者がうざいってだけ。
俺はどのエディタ以外は屑とか思ってないから。

79:デフォルトの名無しさん
09/11/01 14:34:05
日本語でおk。

80:デフォルトの名無しさん
09/11/01 14:37:54
読解力0なら2ちゃん見るなよ

81:デフォルトの名無しさん
09/11/01 14:42:11
emacsはctrl-N, ctrl-P, ctrl-F, ctrl-Bの時点で糞。カスタマイズ前提の思想は受け入れられない。矢印キー移動のエディタも糞。ホームポジションから矢印キーに移動した時点で負け組みの証明をしている。

82:デフォルトの名無しさん
09/11/01 14:44:38
>>81
お前がそう思うんならそうなんだろう、お前ん中ではな

83:デフォルトの名無しさん
09/11/01 15:16:35
統合環境でそれなりに満足してるおいらにはわかんねぇべぇ

84:デフォルトの名無しさん
09/11/01 15:31:25
統合環境ってemacsのことだよね

85:デフォルトの名無しさん
09/11/01 16:21:18
テキストエディタ使ってコマンドプロンプトからプログラム実行しようと
思ったけど、やっぱり果てしなく面倒くさい。

テキストエディタってどれも安っぽくて、萎えるし。
シンプルで高級感があるソフトないんですかー><1日で挫折しましたよー。

誰かIDEのおすすめを教えてください。ちなみにC言語を勉強してます。
無駄な機能を省いた使いやすいやつないですか?

86:デフォルトの名無しさん
09/11/01 16:24:44
IDEとテキストエディタは別物なんだけどな。そして大抵IDE付属のエディタは糞。

87:デフォルトの名無しさん
09/11/01 16:34:11
>>85
Turbo C++ 1.01

88:デフォルトの名無しさん
09/11/01 16:37:02
>>85
VisualStudio2008ExpressEdition

89:デフォルトの名無しさん
09/11/01 16:45:37
すいません他のスレにも質問したのですがブックマークしわすれてて、探したんですけど見つからないのでこのスレで質問させていただきます。

「14歳からはじめるC++」という本で勉強しているんですが、エラーでコンパイルできなくてこまっています。
BCC DeveloperでDXライブラリをインクルードする設定をしました。

#include"DXLib.h"

int WINAPI WhnMain(HINSTANCE hi, HHNSTANCE hp, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE);
if (DXLib_lnit() == -1)return(-1);
WaitKey();
DXLib_End();
return(0);
}

以上のソースをコンパイルすると
エラー E2268 〜 6:未定議の関数'DXLIb_lnit' 〜
エラー E2268 〜 8:未定議の関数'DXLIb_End' 〜
とエラーになります。かなりググッたんですがまったくわからず...
どなたかアドバイスいただけませんか。
よろしくお願いします。

90:デフォルトの名無しさん
09/11/01 16:54:21
>>85
シンプルで高級感があるソフトを作れるようになるまでがんばれ!
いい目標ができたじゃないか

91:デフォルトの名無しさん
09/11/01 16:55:22
>>89
あいとえるの区別をつけよう

92:デフォルトの名無しさん
09/11/01 16:59:44
本当にエラーがその二つだけなら、
大文字と小文字間違えてるんだろ。
そも、誤字がひどいから明言は出来ない。

93:デフォルトの名無しさん
09/11/01 17:23:48
>>89
ソースとコンパイラの出力を全部そのままコピペして

94:デフォルトの名無しさん
09/11/01 17:31:15
>>89
コピペで聞きなおせつったの俺だ。どこだっけか。
URLリンク(homepage2.nifty.com)
ここみると、DXLib_Init → DxLib_Init だなXとxの違い。

95:デフォルトの名無しさん
09/11/01 17:32:53
って l と I もか、、、

96:デフォルトの名無しさん
09/11/01 17:33:54
i と I もだな

97:デフォルトの名無しさん
09/11/01 17:43:10
>>89
みなさんのおかげで解決できました。誤字でエラーだったんですね。xも小文字で。
丁重にみなさん教えていただき本当に本当にありがとうございました。
助かりました。

98:デフォルトの名無しさん
09/11/01 20:51:02
じゃんけんプログラムの次て、何作ったらいいんでしょうか?
初めてなので、なんていうか度合いがわかりません。簡単な計算プログラムしか作れない。。

99:デフォルトの名無しさん
09/11/01 20:58:24
>>98
ヒットアンドブロー(マスターマインド)とか呼ばれる数当てゲーム

100:デフォルトの名無しさん
09/11/01 21:25:29
頭こんがらがってきたのですが

例えば
int i = 8;で
char型のポインタにint型のiを代入したいんですが
上手くいきません
どうすればいいでしょうか?



101:デフォルトの名無しさん
09/11/01 21:29:16
やりたいことは
int i = 8;
char* p = (char*)i;
でいいの?

102:デフォルトの名無しさん
09/11/01 21:33:11
なぜそのようなことをしたいと思ったのか不思議だ

103:デフォルトの名無しさん
09/11/01 21:42:54
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB
unsgined char buf[500];

こういった変数があったとして、
struct BBの全12バイト、配列buf[300]-[500]の値を2バイトずつ加算して足して行き
最終的に足したものの2の補数を計算したいとおもうのですが

引数を一つとしてうまく渡す方法はないでしょうか?
struct BBを足したあと、配列[300]からまた順次足していくみたいな
structBBの終わりのアドレスの次が、配列buf[300]の先頭になるとかどうすればよいのでしょうか?

104:デフォルトの名無しさん
09/11/01 21:48:38
まず日本語の勉強をすると良いよ。

105:デフォルトの名無しさん
09/11/01 21:52:34
> structBBの終わりのアドレスの次が、配列buf[300]の先頭になるとかどうすればよいのでしょうか?
多分、期待してるようなのは無理。

106:100
09/11/01 22:00:44
ありがとうございます
>>101
たぶんそうなんですが、うまくいきません
>>102
学校の宿題で自分なりに書いてみたんですが、うまくいきません
16行目です
URLリンク(kansai2channeler.hp.infoseek.co.jp)
何か根本的なところを間違えているかもしれません

実行結果
URLリンク(codepad.org)


107:デフォルトの名無しさん
09/11/01 22:04:11
>>105
ではstructBBあるいは配列[300]以降のデータを書き換えると、それらのコピーが書き換えられるというのは
どうすればよいのでしょうか?
コピーstructBBの次が、コピーの配列[300]以降で、コピー元をかえると、自動的にコピー先も書き換えられるという

108:デフォルトの名無しさん
09/11/01 22:06:52
>106
制御文字

109:デフォルトの名無しさん
09/11/01 22:07:31
>>107
C言語の範疇では無理。

110:デフォルトの名無しさん
09/11/01 22:09:30
>>111
>>110

111:110
09/11/01 22:20:10
間違えた
>>103
>>102

112:デフォルトの名無しさん
09/11/01 22:35:28
コピー先と元を間違えてるんじゃね。
とりあえず、日本語の勉強をすると良いよ。


113:デフォルトの名無しさん
09/11/01 22:37:42
これは冗談でも煽りでも何でもない。
コードの目的を明確に言葉で表せないなら
それをロジックで組むのも不可能だよ。


114:デフォルトの名無しさん
09/11/01 22:47:07
なんで引数ふたつにしたらまずいの?

115:デフォルトの名無しさん
09/11/01 23:07:58
>>98
じゃんけんが作れたなら次は格ゲーでもどうかな?
ほとんど同じ論理でグーチョキパーの数を増やしていくだけだぞ

116:デフォルトの名無しさん
09/11/01 23:08:45
>>106
こういうこと?
違ったらごめん
URLリンク(0x72.net)

117:デフォルトの名無しさん
09/11/01 23:09:16
>103

もしかしてこうゆうことがしたい?

struct {
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB;
unsgined char buf[500];
} wholeParam;

こうやって関数の仮引数としてwholeParamを渡す。

118:デフォルトの名無しさん
09/11/01 23:26:13
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB;
unsgined char buf[500];
short int f(int x)
{
return x>=0 && x<6 ? ((short *)&BB)[x]:((short *)(buf+300))[x];
}

buf[300]〜[500] だと突き抜けるから、
多分 [299]〜[499]のつもりなんだろうけど、
一応、書いてある通りに。

119:デフォルトの名無しさん
09/11/01 23:30:09
加算の仕方が判らんよ。
数字としてなのか値としてなのか。
関数通せば整数一つから擬似的に不連続を繋げられるけど、
その後どうしたいのか不明確すぎる。

120:デフォルトの名無しさん
09/11/01 23:33:42
>>118
sizeof(struct BB)が12byteである保証は無いんで、運が悪ければハマるかもね。

121:デフォルトの名無しさん
09/11/01 23:34:54
それ以前に shor 型とやらが何バイトかなんて知らないんで。

122:100
09/11/01 23:41:06
>>108
>>116
ありがとうございます!
そういうことです!
自分のレス見返したら問題文書いてなくて
すいませんでした。

もう一度勉強してきます



123:デフォルトの名無しさん
09/11/01 23:41:39
#define shor short
#define unsigend unsigned
#define unsgined ;unsigned
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB
unsgined char buf[500];
unsigned short int f(int x)
{
return x>=0 && x<5 ? ((short *)BB.AAA)[x]:x==6?(BB.aa:(short *)(buf+300))[x];
}


124:デフォルトの名無しさん
09/11/02 07:44:03
_beginthreadexってBCCだと使えないの?

125:デフォルトの名無しさん
09/11/02 08:34:00
>>124
BCCでも使えるよ

126:デフォルトの名無しさん
09/11/02 10:04:53
どうやって

127:デフォルトの名無しさん
09/11/02 11:22:04
_ではじまるのはMS独自。

128:デフォルトの名無しさん
09/11/02 11:27:20
>>127
Wintelの場合、ライブラリファイルフォーマットは事実上共通
だろ?だからリンカで繋げられれば動く筈だが...ダメなのか?

129:デフォルトの名無しさん
09/11/02 12:20:53
つーか、そもそも_beginthreadex()がWinAPIのそれかどうか疑いもしない辺りが間抜け。

130:デフォルトの名無しさん
09/11/02 13:28:09
_ で始まってたり、すべて小文字だったりする関数名からして
明らかに API ではなく CRT なわけだが、それが何の関係が?

131:質問!
09/11/02 13:30:23
CRTって何ですか?

132:デフォルトの名無しさん
09/11/02 13:41:12
CathodRayTube:陰極管

133:デフォルトの名無しさん
09/11/02 13:54:31
Cランタイム(ライブラリ)
C実行時ライブラリ

134:デフォルトの名無しさん
09/11/02 14:03:14
>>128
条件付でYES。 VCのランタイムのソース見ればわかる。

_beginthread(ex) は、
VCで提供している標準関数をスレッドセーフにするために、 TLSを作ったり
浮動小数点関連や 構造化例外(API)→C++例外配送機構 の初期化を行った後
CreateThread を呼び出してる。 (callback 関数も内部のものを利用)
thread が死んだ時、上記の後始末もやってる。

つまり、標準関数周辺のランタイムも VC のを使うなら動くわけだが…

なお、BCC は同じ名前で似たような機能の _beginthread(ex) を自前で用意しているんじゃなかったかな

135:デフォルトの名無しさん
09/11/02 15:29:56
プログラム実習の授業に ついていけないんですが、素人にお勧めの入門書はないですか? 大学一年です

136:デフォルトの名無しさん
09/11/02 15:34:41
新版 明解C言語 入門編

137:デフォルトの名無しさん
09/11/02 15:55:20
関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになるって聞いたんだけど
本当なの?

138:デフォルトの名無しさん
09/11/02 16:06:36
>>137
うそだよ

・・・って一気に切り捨てるのもなんだから問おう。
> 関数内で定義した変数
ってなんだ?



139:デフォルトの名無しさん
09/11/02 16:14:27
ローカル自動変数のことだろ。
スタック上に確保される実装が多いから、
ネスト深くしすぎるとスタック溢れするからってことだろ。
まあ、普通に使う分には気にしなくていいよ。
ただし、ローカル自動変数にあまり巨大な領域を使うなってことは言える。

void func(){
int a[1000][1000][1000]; // こういうのは止めろってこと。
return;
}


140:デフォルトの名無しさん
09/11/02 16:17:23
>>139
ヒープでもありえねーよw

141:138
09/11/02 16:17:39
あー、そういいたいわけか。
まあ入門編スレだしな。

>>137
しかしローカル自動変数を削除っていったい何をどうしたいんだ?
そういう間違ったことを教えてきたクソに
聞くべきじゃないか?

142:デフォルトの名無しさん
09/11/02 16:19:10
便乗質問で申し訳ございませんが、
int a[1000][1000][1000]
が欲しい場合どうすればいいんでしょうか?
newでヒープに確保しようにも無茶ですよね。



143:デフォルトの名無しさん
09/11/02 16:20:54
>>142
mmap 使うべし

144:デフォルトの名無しさん
09/11/02 16:27:27
>>143
UNIX系OS独自のものですか?
クロスプラットフォームに使える
mmapみたいなものはありませんでしょうか?

C++ライブラリでもいいんで。

145:デフォルトの名無しさん
09/11/02 16:36:32
>>135
K&R とコンパイラのマニュアル、& スペシャルボーナスで Google
これでダメなら、せっかく頑張っても先はないから、他の科目で優をとるために力を回すべき

ちなみに C++ の禿本は K&R の3倍くらい難しい

146:デフォルトの名無しさん
09/11/02 16:46:51
>>144
ヒープに取れない→2次記憶としてファイルを使う→ファイル操作に縛りがでるかも?
で、汎用性の高いものは作りにくいんでないかな?

147:デフォルトの名無しさん
09/11/02 16:55:03
>>142
CでなくなってしまうがC++でプロキシクラスでoperator[]を
オーバーロードすればディスク上に巨大な配列が取れる

ただし激遅なのはもちろん

148:デフォルトの名無しさん
09/11/02 16:56:28
>>142
32bit 空間に 1GB なら基本的に無理はない
そういうオーダーでいくつも取る気なら 64bit を選択しれ

149:デフォルトの名無しさん
09/11/02 16:56:53
>>146
なるほど、確かに。

>>147
あー擬似的にクラスで実現するってことですか。


150:デフォルトの名無しさん
09/11/02 16:56:56
たった4GiB弱くらい、ヒープに確保しちゃえばいいじゃん。

151:デフォルトの名無しさん
09/11/02 16:58:25
>>148
型が int なんで… 微妙にアウト? (べき指数のベースが 1000 vs 1024 で違うけど)

152:デフォルトの名無しさん
09/11/02 16:58:52
>>149
Windows と Linux で関数名が違うから
自分でラッパー書けばいいよ

153:デフォルトの名無しさん
09/11/02 17:06:24
>>142
あとその巨大な配列の全部に要素を入れるのではなく
ガラガラな使い方をするのなら、疎行列(sparse matrix)という技法がある

154:142
09/11/02 17:09:20
みなさんありがとうございます。
なんか私の知識をずっと超えたレベルになって来たようで、
勉強不足を痛感する限りです。


155:デフォルトの名無しさん
09/11/02 17:13:36
>>141
ローカルスコープでも使わせたいのかしらん

void func () {
int foo; /* 関数全域で使う変数 */
{ int a; /* a を使うコード */ }
}

C++ なら コンストラクタ/デストラクタの都合があるので意味ありそうだけど(それでも PODはあやしいが…)
C でローカルスコープ脱出後に戻されるという保証はないよね?

156:デフォルトの名無しさん
09/11/02 17:21:52
>>155
というか
int a[1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000];
でもC/C++の仕様上は問題はないんだよね。
単に現実を見ろよって話なだけで。

157:デフォルトの名無しさん
09/11/02 17:25:49
int *************************i; とかでもいいよ

コンパイルされたコードを見ると笑えてくるけど

158:デフォルトの名無しさん
09/11/02 17:27:36
>>155
賢いコンパイラなら、以下のiとjは同じ領域を使いまわすかもしレナ。
void func(int para)
{
{
int i = para;
}
{
int j = para;
}
}

159:デフォルトの名無しさん
09/11/02 17:32:32
>>158
言えてる。
とくにそれが配列だったりしたらそうするかもしれないね。


160:デフォルトの名無しさん
09/11/02 17:39:12
>>158-159
領域の使いまわしが発生しているとすると、削除には該当しないんだよねー
(スコープ脱出後もメモリ上は存在している という意で)

なおさら
「関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになる」
の意図が見えないな

161:デフォルトの名無しさん
09/11/02 18:00:11
そんな意味不明なフレーズには、本人に聞けとしか言えんだろう

162:デフォルトの名無しさん
09/11/02 18:01:39
前にもそんなこと言って人の言うこと聞かなかった奴がいたな。

163:デフォルトの名無しさん
09/11/02 20:51:28
陰極管だと Cathod Tube だよなぁ
CRT なら陰極線管と翻訳すべきだった

164:デフォルトの名無しさん
09/11/02 21:03:19
エロい話かと思った

165:デフォルトの名無しさん
09/11/03 07:10:51
関数内でmallocした領域はfreeしないとメモリリークする
ってことでは


166:デフォルトの名無しさん
09/11/03 11:29:36
>>165
スタックオーバーフローにはならんのでは

167:デフォルトの名無しさん
09/11/03 12:29:47
ランレングス符号化のプログラムです
このプログラムだと最初の文字が評価されなくて困っています。
アドバイスをお願いします。
#include <stdio.h>
int runlength(int length, char *str_org, char* str_enc){

int i,j = 0;
char *RLE = str_enc;

while(length--){
if(str_org[i] == str_org[i + 1]){
i++;
j++;
}
else{
*str_enc++ = str_org[i];
*str_enc++ = '1' + j;
i++;
j = 0;
}
if(str_org[i] == 0)
break;
}
str_enc = 0;
return(*RLE);
}

168:続きです。
09/11/03 12:30:32
int main(void){
char buf_r[1024] = {0};
char buf_w[1024] = {0};
int length;

printf("文字列の入力\n");
scanf("%s",buf_r);
runlength(1024,buf_r,buf_w);
printf("[ランレングス符号化]\n%s\n",buf_w);
return(0);
}


169:デフォルトの名無しさん
09/11/03 12:37:24
ワロタ

170:デフォルトの名無しさん
09/11/03 12:37:57
int i = 0,j = 0;
とか?

171:デフォルトの名無しさん
09/11/03 12:44:55
C言語でポインタというのがありますが、
ゲームではどういうところで使われてるんですか?
具体例を教えてください。

172:デフォルトの名無しさん
09/11/03 12:45:45
メッセージの出力とか。

173:デフォルトの名無しさん
09/11/03 12:47:46
ファイルの読み書き

174:デフォルトの名無しさん
09/11/03 12:49:09
スタートアップ直後 DirectXの初期化で とか

175:デフォルトの名無しさん
09/11/03 13:07:36
>>167
>>116 を参考にしてみて

同じ学校なのかな?

176:デフォルトの名無しさん
09/11/03 13:37:00
最近は義務教育でC言語まで教えてるのか

177:デフォルトの名無しさん
09/11/03 13:47:39
>>167
暇だからやってみた。参考になれば
URLリンク(0x72.net)

178:デフォルトの名無しさん
09/11/03 16:06:44
最近のコンパイラってブロックの先頭じゃなくても変数の宣言できるの?

179:デフォルトの名無しさん
09/11/03 16:10:33
C99なら可

180:デフォルトの名無しさん
09/11/03 17:16:24
(int *)
↑*って何

181:デフォルトの名無しさん
09/11/03 17:17:05
asterisk だよ。

182:デフォルトの名無しさん
09/11/03 17:22:06
ポインタ型

183:デフォルトの名無しさん
09/11/03 17:36:07
(insert -> *)

184:デフォルトの名無しさん
09/11/03 17:48:51
ポインタ型ってなんだよ

185:デフォルトの名無しさん
09/11/03 17:58:05
(int *) = * を付けたら int 型

186:デフォルトの名無しさん
09/11/03 19:37:46
* = ア○ル

187:デフォルトの名無しさん
09/11/03 20:19:45
× アナル
○ アヌス

「アナル」は形容詞形。
「アナル○○○」と後ろに続く場合の活用形。
単体で名詞として使うなら「アヌス」とするべき。


188:デフォルトの名無しさん
09/11/03 20:24:04
あーネイティブの発音知らないわけねw
英語弱者って電子土方やってても辛そう

189:デフォルトの名無しさん
09/11/03 20:28:35
日本語表記においてはネイティヴの発音にいちいちあわせる必要はないだろw

190:デフォルトの名無しさん
09/11/03 21:12:34
>電子土方やってても辛そう

最近の2chって>>188みたいに無意味に突っ掛かってくるヤシが多いよな。
氏ねばいいのに。

191:デフォルトの名無しさん
09/11/03 21:14:50
どうでもいいことで盛り上がるなよ
みんなタヒねばいいのに
くそが

192:デフォルトの名無しさん
09/11/03 21:15:23
劣等感ゆえの攻撃性だから、哀れみをもってスルーするのがいいよ。

193:デフォルトの名無しさん
09/11/03 21:16:11
スレリンク(classical板)

194:デフォルトの名無しさん
09/11/03 21:17:35
>>191
仕様書ある夫さんですか?

195:仕様書ある夫さん
09/11/03 21:23:19
仕様書ある尾です

196:デフォルトの名無しさん
09/11/04 14:32:31
int Func(void* buf)
{
SOCKET SOCK = (SOCKET)buf;

voidポインタで渡された値をソケット型にキャストしたいんだけど
これだとうまくいかない

197:デフォルトの名無しさん
09/11/04 14:38:19
ヘッダファイル読め
SOCKETって構造体か何かじゃねーの?

198:デフォルトの名無しさん
09/11/04 14:38:41
SOCKET sock = ...... ;
Func( (void*) sock );
呼ぶ側はもちろんこうだよな?

199:デフォルトの名無しさん
09/11/04 14:39:29
SOCKETが何なのかわからんが、voidポインタの引数はキャスト不要じゃない?

200:デフォルトの名無しさん
09/11/04 14:46:16
ポインタ以外の何かなら必要じゃないか?w

201:デフォルトの名無しさん
09/11/04 14:51:26
初期化に定数以外って使えるの?

202:デフォルトの名無しさん
09/11/04 15:14:08
今の普通のCなら使える。

203:デフォルトの名無しさん
09/11/04 15:52:19
>>201
C FAQでも読んどけ

204:デフォルトの名無しさん
09/11/04 15:55:48
>>203
C FAQのどれ?項番教えて

205:デフォルトの名無しさん
09/11/04 16:12:13
int f(int a){return a+1;}
int main(){
int i = f(1); /* できるの? */

return 0;
}

206:デフォルトの名無しさん
09/11/04 16:16:25
>>201
少なくともGNU CとC++では使える。

207:デフォルトの名無しさん
09/11/04 16:17:41
BCC55でも使える

208:デフォルトの名無しさん
09/11/04 16:20:19
初期値だったら定数じゃないと無理だろうけど、
自動変数の初期化なんてのは所詮は普通に代入してるだけだからな。


209:デフォルトの名無しさん
09/11/04 18:43:10
初期化と代入は本来違うものであってしかるべきなんですが、まあ時代もかわりましたね。

210:デフォルトの名無しさん
09/11/04 18:56:02
>>205
できない、と思っているなら
なぜそう思うのかを開陳すべき

211:デフォルトの名無しさん
09/11/04 19:27:24
 ヽ('A`)ノ カイチン!
  (  )
  ノω|


 __[警]
  (  ) ('A`)
  (  )Vノ )
   | |  | |

212:デフォルトの名無しさん
09/11/04 19:54:14
while((*p++ = *q++) != 0 )
;
このコードの意味を説明してもらえませんか?
自己解釈
1 qの値をpに代入する
2 その値が0でなければwhileループ内を実行する
3 p及びqのアドレスを1インクリメントする
こういう意味ですか?


213:デフォルトの名無しさん
09/11/04 20:05:34
1. *qの値を*pに代入する
2. p及びqのアドレスを1インクリメントする
3. 1の値が0でなければwhileループ内を実行する

インクリメントは*qの値が0であってもそうでなくても行われる
whileループ内の文が実行されるのはインクリメントが行われた後

214:デフォルトの名無しさん
09/11/04 20:14:06
>>213
thx

215:デフォルトの名無しさん
09/11/04 20:51:17
>>212
そういうトリッキーなコードを書いてウケたのは1980年代
なんでw
30年前は兎も角現在そういうコードを書いてもプロセッサ
までその努力が全く届かないので

do{ *p=*q; p++,q++ }while(*q!='¥0');
とかの演算子の優先順位を記憶していない人でも読めるコード
で書くのが吉

216:デフォルトの名無しさん
09/11/04 20:53:53
>>215
うっせはげ
うっせはげ
うっせはげ

217:デフォルトの名無しさん
09/11/04 20:54:01
上のコードは等価じゃなかったw
for(;;){ *q=*p;p++,q++; if(*p=='¥0')break; }

218:デフォルトの名無しさん
09/11/04 20:56:03
なにそのトリッキーなコード。

219:デフォルトの名無しさん
09/11/04 21:02:01
よーし、>>218がもっと簡単なの書くぞ〜

220:デフォルトの名無しさん
09/11/04 21:02:42
>>215
あの程度をトリッキーという技量で論じた結果がそれ
演算子の優先順位くらい理解していないから間違えた

a = 1 + 2 * 3; の優先順位くらい頼むから理解してくれ
というのと五十歩百歩の域を出ない

221:デフォルトの名無しさん
09/11/04 21:05:12
>>217も間違っているしな

222:デフォルトの名無しさん
09/11/04 21:15:33
strcpy(p,q);

223:デフォルトの名無しさん
09/11/04 21:21:01
>>212
while(*p++ = *q++);
これで必要かつ充分

224:デフォルトの名無しさん
09/11/04 21:24:29
あれがトリッキーに見えるって他言語からCに入った人?

225:デフォルトの名無しさん
09/11/04 21:26:45
うちの職場じゃ見かけないねえ

226:デフォルトの名無しさん
09/11/04 21:29:33
>>221
ワロタ
本当だw

227:デフォルトの名無しさん
09/11/04 21:35:02
間違ってるとかワロタとかいいからちゃんと指摘してくれ
いえ、お願いします

228:デフォルトの名無しさん
09/11/04 21:36:33
>>227
自分で書いたんだろう
動作テストしてみな
ちゃんと動くかどうか

229:デフォルトの名無しさん
09/11/04 21:53:35
do{*p=*q;++p;++q;}while(*(p-1));
分解するとこんな感じか
普通に>>212のままの方がいいな

230:デフォルトの名無しさん
09/11/04 22:35:12
>>223
冥途の土産に持っていけ

231:デフォルトの名無しさん
09/11/04 22:53:13
要するにただの stos だろ

232:デフォルトの名無しさん
09/11/04 23:24:49
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .

記念

233:デフォルトの名無しさん
09/11/05 01:03:15
>>232
わかる

234:デフォルトの名無しさん
09/11/05 02:52:31
8Queensか

235:デフォルトの名無しさん
09/11/05 04:33:07
pとqがchar *型なのであればstrcpyが一番。
そうでなく、int *などなら>>223で充分。イディオムとして成立している書き方が読めないのは単に経験不足。
それでもトリッキーだというのなら、
while(*p++ = *q++) {
  ; /* 空 */
}
とでもしておけばいい。

236:デフォルトの名無しさん
09/11/05 05:07:39
ポインタを使えばアドレスを操作できるみたいだけどC言語ってアセンブリみたいに直接アドレスを指定して変えれる?

アドレス12345678の値をFBにせよ
みたいな。

こういうこと難しい?

237:デフォルトの名無しさん
09/11/05 05:42:28
>>236
簡単にできる。

238:デフォルトの名無しさん
09/11/05 10:18:25
*(char *)12345678 = 0xFB;
でいいのだろうか

239:デフォルトの名無しさん
09/11/05 10:24:45
>>236
* (char *) 0x12345678 = 0xfb;

240:デフォルトの名無しさん
09/11/05 10:26:05
あぁ

241:デフォルトの名無しさん
09/11/05 10:45:49
16進とは書いてないだろ。

242:デフォルトの名無しさん
09/11/05 10:50:58
アドレスって書いてあれば16進だと思うの普通じゃね?

243:デフォルトの名無しさん
09/11/05 11:09:29
プレフィックスもサフィックスもなく、[0-9] だけで構成された数字を見たら
16進ではない、と思うのが自然な飢餓する。

244:デフォルトの名無しさん
09/11/05 12:11:12
>>227
>>217の糞コードじゃ0がコピーされないだろ


245:デフォルトの名無しさん
09/11/05 14:08:28
for(;;) { *q=*p; if(*p=='¥0') break; p++,q++; }

246:デフォルトの名無しさん
09/11/05 14:17:46
アドレスを10進数で表記するような文献は見たことない

247:デフォルトの名無しさん
09/11/05 15:14:38
>>245
それだと最終的なp, qの値が違う
for(;;) {
*q=*p;
if(*p=='\0') {
p++;
q++;
break;
}
p++,q++;
}

248:デフォルトの名無しさん
09/11/05 15:55:24
>>246
つ情報処理技術者試験


249:デフォルトの名無しさん
09/11/05 16:18:28
URLリンク(www.dotup.org)

この課題の『Aについて』でいきなり詰まってしまいました。
少しずつ理解しながらやりたいので、だれか協力お願いします。
なんどかこのスレで質問することになると思います。

250:デフォルトの名無しさん
09/11/05 16:27:24
整数乱数ってなんですか? とか、そういう感じの具体的な質問をお願いします
協力お願いしますでは何を答えていいのかわかりませんので

251:249
09/11/05 16:33:13
自己解決しました。

252:デフォルトの名無しさん
09/11/05 16:42:03
自己発電しました

253:249
09/11/05 16:56:59
>>249です

整数乱数とはなんですか?
Aについてですが、今までは
int kansuu(int x)
{
return x*x;
}
のように数式を作るような使い方しかして来ませんでした
問題文にあるように関数の中で、min,maxを定義できるんですか?

254:デフォルトの名無しさん
09/11/05 17:03:30
#include <stdlib.h>

int randomNumber (int min, int max) {
return rand() % (max - min + 1) + min;
}

255:デフォルトの名無しさん
09/11/05 17:17:48
>>254
剰余を使うな。

256:デフォルトの名無しさん
09/11/05 17:18:54
int randomNumber(int min, int max)
{
return (int)(rand() / (RAND_MAX + 1.0) * (max - min + 1)) + min;
}

257:デフォルトの名無しさん
09/11/05 17:20:40
>>255
今更気にする必要なし。

258:デフォルトの名無しさん
09/11/05 18:00:43
2の累乗以外の乱数を出す場合は、
振り直し法を使わないと均等にはならないよ。

例えば RAND_MAX が 7 として、
それで 1〜6 の乱数を求めたら
1/8 の確率のものと 2/8 の確率のものが混ざってしまうだろ。
これは RAND_MAX を大きくしても解決しない問題だろ。

259:デフォルトの名無しさん
09/11/05 18:09:31
>>257
それはない。rand() の線形合同法では mod を使うのはご法度。

260:デフォルトの名無しさん
09/11/05 18:16:04
別にいいよ

261:デフォルトの名無しさん
09/11/05 18:51:49
>>256
実数を使っても無駄だよ。
int randomNumber(int min, int max)
{
return rand() / (RAND_MAX / (max-min+1)) + min;
}

整数でも変わらん。
どうしても均等にしたければ振り直し法を使うしかない。

262:デフォルトの名無しさん
09/11/05 18:54:31
整数オーバーフローは起きないの?

263:デフォルトの名無しさん
09/11/05 19:02:14
>>261
奥山晴彦氏の乱数の改良でも使えばいいだろ

URLリンク(www.vector.co.jp)

264:デフォルトの名無しさん
09/11/05 19:09:44
9桁以下の正の整数か否かを判別したいのですが

if(m>0 && n>0 && m<=999999999 && n<=999999999)

これでいいんでしょうか?
もっとスマートになりそうな気が…

265:デフォルトの名無しさん
09/11/05 19:15:07
m の判定と n の判定がごちゃ混ぜになっているのが「スマートではない」な

266:264
09/11/05 19:20:53
>>265
えっとつまり

if(m>0 && m<=999999999 && n>0 && n<=999999999)

ってことですか?
個人的に「999999999なんて入力しないんじゃなかろうか」と思ったのですが…


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5399日前に更新/137 KB
担当:undef