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なんて入力しないんじゃなかろうか」と思ったのですが…
267:デフォルトの名無しさん
09/11/05 19:24:43
m と n のどっちが外れているかの判別ができないけどいいの?
268:デフォルトの名無しさん
09/11/05 19:34:10
>>266
とりあえずはね
ただし >>267 が言っているような問題がまだ残っているし
入力は屈指のこわーい所で、範囲チェックだけで済むかどうかも怪しいぞ
269:264
09/11/05 19:45:26
>>267-268
急いでソース全部打ってきました
/* 9桁以下の2つの正の整数m,nを入力して、m/nの小数部分 */
/* を四捨五入して得られる整数値を出力するプログラム */
#include <stdio.h>
int main(void)
{
int m,n,quotient;
printf("\n9桁以下の正の整数を2つ入力して下さい\n");
scanf("%d%d",&m,&n);
if(m>0 && n>0 && m<=999999999 && n<=999999999){
quotient = (m+n/2)/n;
printf("\n%d/%dの小数部分を四捨五入して得られる整数値は、%dです。\n\n",m,n,quotient);
}else{
printf("\n入力する値は9桁以下の正の整数にして下さい。\n"
"プログラムを終了します。\n\n");
}
return 0;
}
コメント内のプログラムを作成するのが課題なのですが、ループ処理はまだ習っていないので終了という形にしてみました。
mとn分けたほうがいいでしょうか?
270:デフォルトの名無しさん
09/11/05 19:51:44
ループがまだってことは、関数もまだか
今んとこそこまでかな
271:264
09/11/05 19:59:39
>>270
そうですか
ありがとうございました
とりあえずif文の中を整理して提出してみます
272:デフォルトの名無しさん
09/11/05 20:49:54
>>269
11桁とかの数入力されときどうなるんだっけ?
273:デフォルトの名無しさん
09/11/05 21:18:59
scanf関数を用いて入力された3桁の整数に対して、
10の位および1の位を四捨五入することによって得られる2つの整数を表示するプログラムを作成せよ。
例)『425』を入力した場合、『400, 430』が画面に表示される。
宿題でこんなのが出たのですがどうしても出来ません!!
どなたか教えてください!!
274:デフォルトの名無しさん
09/11/05 21:19:58
ちなみにこんな感じでやってみたけどダメでした
#include<stdio.h>
#include<math.h>
int main(void){
int x,a,b;
scanf("%d",&x);
a=(x/100)+0.5;
a=((int)a)*100;
b=(x/10)+0.5;
b=((int)b)*10;
printf("10の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",a);
printf("1の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",b);
return 0;
}
275:デフォルトの名無しさん
09/11/05 21:25:03
>>274
惜しい!
276:デフォルトの名無しさん
09/11/05 21:34:03
自販機のLEDあるじゃないですか
あれみたいに、
右から順にボタンLEDが点灯していき左端で停止
停止したら右からまたLEDが順に点灯していきスタック
スタックしたら右からまたLEDが・・・
ってのをやりたいのですが、「一行で」やるにはどうすればいいのですか。
ifを使うとビットシフトでできるのですが
「一行でやれよバカ」だそうです。
277:デフォルトの名無しさん
09/11/05 21:38:33
>>276
質問の内容が意味不明だが
改行しなきゃいいんじゃないかな?
278:デフォルトの名無しさん
09/11/05 21:39:59
1行って言われてもね……
279:デフォルトの名無しさん
09/11/05 21:42:06
>>276
日!本!語!で!お!k!
280:デフォルトの名無しさん
09/11/05 21:45:36
#define (コントローラのLEDアドレス) Fuckintosh
char LED = 0x01;
Fuckintosh = LED << 1;
で、左端のLEDまで点灯させます。 2進数で10000000です
じゃあ左端を点けたまま再度右から点灯させていくなら 10000001 -> 10000010とシフトしていけばいいのか、と
別に変数を用意し、+ したのですが
なぜかこれだと 二個同時に点いたります。
ifで分けてやると思い通りの点灯パターンを行うのですが
「(ifとか使わず)一行でやれよバカ」だそうです。
281:デフォルトの名無しさん
09/11/05 21:47:09
二個同時と言うのは左端を含めずに二個です
シフトしていくLEDと隣り合ったLEDが点いて消えたり点いたり、
一緒にシフトして行ったり
shます
282:デフォルトの名無しさん
09/11/05 21:53:05
1行とか言ってるソイツがアホなだけだろ。
283:デフォルトの名無しさん
09/11/05 21:54:30
ほんと日本語へたくそだな
if使ったコード晒せよ
284:デフォルトの名無しさん
09/11/05 22:02:38
>>280
でけたwww
int i,j,hoge;for(i=0,LED=0;i<8;i++){hoge=LED;for(j=0;j<8-i;j++)(LED=hoge|(1<<j)),*p=LED;}
その説明では状況が分からん
285:デフォルトの名無しさん
09/11/05 22:03:19
00000000
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
10000001
10000010
10000100
10001000
10010000
10100000
11000000
11000001
11000010
11000100
11001000
11010000
11100000
こんな感じ?
286:デフォルトの名無しさん
09/11/05 22:06:50
そうです
LEDが16コあって、そのうちの8つがLEDコントローラA
残りの8つがBに繋がっちょります
が、8つ点ける時点でつまずきました
287:デフォルトの名無しさん
09/11/05 22:08:38
10000000
よしここから右端から点けよう
10000001 点いた
10000011 あれ?
10000110 あれ?
10000111 おや?
10001101 なんじゃ
なんてことになってます。
288:デフォルトの名無しさん
09/11/05 22:11:50
>>287
コードを晒すんだ!
そのほうが日本語より直接的で分かりやすいと思う
289:デフォルトの名無しさん
09/11/05 22:15:53
なので、
Fuckintosh = 10000000 + (FuckOSX << 1) とかしたらどうかな、と思ったのですが
上のようにワケのわからんパターンで点灯し
ならORで、とやってもだめでした
>>288
仕事場に置いてきてまってるもんで
自販機を思い浮かべてもらえれば。
あの多段ボタンLEDそのままなので。
そのLEDは2進数00000000に対応しており、点けたい部位のビットを1にすれば光ります
10000000なら左端、00001000なら右から4番目、というふうに
290:デフォルトの名無しさん
09/11/05 22:17:53
>>285 をテーブルに入れて垂れ流せばいいよ。
291:デフォルトの名無しさん
09/11/05 22:18:19
>>289
この時期まで研修とは…
大企業だな
裏山鹿
>>284 でおk
292:デフォルトの名無しさん
09/11/05 22:18:26
あー違った
Fuckintosh = 10000000 + (FuckOSX << 1)の 10000000 の部分は決め打ちではありません。
変数です。
if(FuckMac >= 10000000)
Fuckintosh = (FuckMac + (FuckOSX << 1));
という感じですかね
293:デフォルトの名無しさん
09/11/05 22:21:35
2進数10000000は、16進数で0x80,
左端と右端を点けるには10000001、つまり0x81
やはり左端の値を保持して、新たにシフトさせていく変数を用意し
左端の値と足していけば順次シフトできるんじゃなかろうか、
と思ったのです。
294:デフォルトの名無しさん
09/11/05 22:39:35
つーか、ビット操作なら unsigned でやれよ。
295:デフォルトの名無しさん
09/11/05 22:58:53
排他的論理の計算ってどんなときに使うんですか?
101100110
110011101
011111011
になるのはいいんですが、この計算はたとえばどんな時に使用されるの?
296:デフォルトの名無しさん
09/11/05 22:59:47
stdioはstandard input outputの略
ではprintfやsacanfとかって.....
語源とか気になる関数とか多いです
297:デフォルトの名無しさん
09/11/05 23:03:17
>>295
フラグの入れ替えとかハッシュ計算とか
298:264
09/11/05 23:07:50
>>272
11桁ですか?
おそらく弾かれて、プログラム終了となるんじゃないかと思うのですが…
299:デフォルトの名無しさん
09/11/05 23:09:48
>>295
特定のビットだけ反転させたいときだな。
あまり使う機会はない。
>>296
print や scan に format の f 付けただけ。
300:デフォルトの名無しさん
09/11/05 23:14:03
>>299
おお、こんなに早くお返事が!!!
サンクスです
検索かけても語源とかなかなか出てこなくって
「UNIXの古い資料調べれば全部分かる」
みたいな話はどこかに書いてありましたが
それもちょっとよく分からん話だったんで
301:デフォルトの名無しさん
09/11/05 23:27:38
1ビットずつフラグに使ってたら、反転させたいときもあるんだろうな
302:デフォルトの名無しさん
09/11/05 23:43:26
>>296
print formatted output
その他気になるのは↓で探すよろし
URLリンク(www.opengroup.org)
303:デフォルトの名無しさん
09/11/06 00:09:44
ボタンとかのオブジェクト配置するには?
画面の出し方は死ぬほどサンプルあるけれど
304:デフォルトの名無しさん
09/11/06 00:34:17
いきなりなんだよwww
windowclass にボタン指定しろよw
305:デフォルトの名無しさん
09/11/06 00:39:22
スレ違い
306:デフォルトの名無しさん
09/11/06 00:45:15
>>295
RAID5の計算とか
CRCとか
画像処理とか
A = 101100110
B = 110011101
A xor B = C
C = 011111011
C xor A = ...
C xor B = ...
307:デフォルトの名無しさん
09/11/06 02:55:03
>>302
リンク先までありがとうございます
正直、英語は読めないので何をどう見たらよいやら分かりませんが調べてみます
やはりプログラマーは英語必須なんでしょうなあ
308:デフォルトの名無しさん
09/11/06 02:59:12
英語読めなくてもプログラマやってる奴は結構いるよ
カスばっかだけど
309:デフォルトの名無しさん
09/11/06 03:03:42
プログラミングコンテストの問題が英語だから理解出来ないとかね
プログラミング以前の段階で淘汰されてて面白い
310:デフォルトの名無しさん
09/11/06 03:08:20
職業としてやるんじゃなかったら英語なんてたいして必要ない。
英検三級ありゃやっていける。
311:デフォルトの名無しさん
09/11/06 03:39:30
int main()
{
unsigned char LED = 0x01;
int i,j,n;
for (i = n = 0; i <= 36; n=++i)
{
LED = 0;
for (j = 8; j > 0; n-=j*(n>=j),j--)
{
LED |= (n>=j)<<(j-1);
}
for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}
どうしてこうなった
312:デフォルトの名無しさん
09/11/06 04:21:24
unsigned char func(int n)
{
unsigned char LED = 0;
int i, stack = 0;
for (i = 8; n > i; n-=i--, stack++);
LED = ~0 << (8-stack) | !!n << (n-1);
return LED;
}
int main()
{
int i,j;
unsigned char LED;
for (i = 0; i <= 36; ++i)
{
LED = func(i);
for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}
がんばってこれか
313:デフォルトの名無しさん
09/11/06 06:00:48
stackをループじゃなくて2次式を解くことでできそうな気がするけど、またあとで。
314:デフォルトの名無しさん
09/11/06 15:15:26
Cは無限ループifしなくても何かが起こったときに
関数に飛ぶことはできないの
315:デフォルトの名無しさん
09/11/06 15:16:46
日本語でおk
316:デフォルトの名無しさん
09/11/06 15:17:11
>>314
日本語でOK。
317:デフォルトの名無しさん
09/11/06 15:20:07
>>314
signal()
318:デフォルトの名無しさん
09/11/06 15:45:21
教えてやるから日本語で質問しろ。
319:デフォルトの名無しさん
09/11/06 16:01:10
馬鹿は回答するな
320:デフォルトの名無しさん
09/11/06 16:02:26
>>314
atexit()
321:デフォルトの名無しさん
09/11/06 16:12:23
>>314
標準Cには、そういう仕掛けはない。
Win32 API なり、Pthreads なりを使うわけだが
OS が特定できんことには。
322:デフォルトの名無しさん
09/11/06 17:15:23
signalは標準だろボケ
無知は黙ってろよカス
323:デフォルトの名無しさん
09/11/06 17:31:42
>>322
では一つ、signal()の標準的な使い方を教えてくだされ。
324:デフォルトの名無しさん
09/11/06 17:37:51
問題文を出力するなどのため、
引数の内容が長文化した場合、(継続文字?)について教えてください。
例えば、プリントエフ関数で、長文を表示させる場合、
printf("1行目から2行目\n3行目から4行目\n");
といったように書いていったのですが、
当然ながらだんだん見えなくなってくるので、
printf("・・・・3行目から4行目\n"
"5行目から6行目\n6行目から7行目\n・・・・");
と、表示していくことになりますが、
他によい方法はないのでしょうか。
こういう場合、どういう方法が一般的なのでしょうか。
プリントエフで一個ずつ表示するものなのでしょうか。
325:デフォルトの名無しさん
09/11/06 17:41:12
SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM は標準のようだ
質問の「何か」っていうのが具体的に何かわからないと何ともいえないが
326:デフォルトの名無しさん
09/11/06 17:43:30
>>324
俺なら1行ごとに分ける
printf(
"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n");
それか、問題文を別ファイルから読み込む
327:デフォルトの名無しさん
09/11/06 17:52:34
>>326
なるほど1行ずつですか。
>>それか、問題文を別ファイルから読み込む
買ってきた本でもファイルの入出力を最後のほうで取り上げています。
なんとかそこまで早くたどり着きたいものです。
最終的にはプロンプトでサウンドノベルみたく動く文字出力を実現したいです。
あの、1文字、1文字、動いていく感じがたまらなくいいので。
たぶん繰り返し処理とか使うんだろうなあとは思っているのですが。
328:デフォルトの名無しさん
09/11/06 18:08:36
優れたプログラマ=論理演算多用 if少ない
if((A >> B) |= C) != ( ((D >> E) << F) &= (G | H)){
VAR = I >> (J |= (K + L));
}
329:デフォルトの名無しさん
09/11/06 18:10:13
>>328
馬鹿?
330:デフォルトの名無しさん
09/11/06 18:11:20
劣ったプログラマ=if多い
if()
if()
if()
if()
if()
else if()
if()
if()
else if()
ifを判定するだけで最低1クロック無駄にする
331:デフォルトの名無しさん
09/11/06 18:18:10
Cでどう短く書くかより、実際の効率で考えるべき
332:デフォルトの名無しさん
09/11/06 18:39:47
ものすごいアホがいる。
333:デフォルトの名無しさん
09/11/06 18:43:02
>>328
まだ減らせるぞw
((A >> B) |= C) != ( ((D >> E) << F) &= (G | H))&&(VAR = I >> (J |= (K + L)));
334:デフォルトの名無しさん
09/11/06 19:22:57
>>324
ふつーは
printf("一行目\n");
printf("二行目\n");
printf("三行目\n");
printf("四行目\n");
335:デフォルトの名無しさん
09/11/06 19:46:24
printf("四行目\n",printf("三行目\n",printf("二行目\n",printf("一行目\n"))));
336:デフォルトの名無しさん
09/11/06 20:05:35
>334,>335は関数呼び出しコストを度外視しているところが間抜け。
一回で済むことを4回もやるな。
337:デフォルトの名無しさん
09/11/06 20:15:43
それ以前に、ただの文字列出力にprintf使う奴はプログラマーに向いていない。
338:デフォルトの名無しさん
09/11/06 20:18:32
まあ普通は DrawText() 使うよな。
339:デフォルトの名無しさん
09/11/06 20:20:03
関数くらい人に教わる前に自分で習得しろって?
そりゃ俺も C 始める前にアセンブラで PRINT マクロ作ってたさ、そのアセンブラも自作でね
けど今どうなんだろう? C の printf には BASIC の PRINT コマンドほどの教育力あるんかね
俺個人としては、かえって饒舌すぎるところがあるように思えるんだが
340:デフォルトの名無しさん
09/11/06 20:24:32
まぁ、まともなコンパイラならprintf()の代わりにputs()を使うくらいのことはするからな。
341:デフォルトの名無しさん
09/11/06 20:50:57
それだと結果が変わってしまうな。
342:デフォルトの名無しさん
09/11/06 20:53:29
いまどきのコンパイラなら334も324も最適化で同じになるだろ。
343:デフォルトの名無しさん
09/11/06 21:11:57
結局どう表示したいのか一目でわかるのが>>326の良いところ
344:デフォルトの名無しさん
09/11/06 21:49:55
結局トレードオフなんあぢょ。
345:デフォルトの名無しさん
09/11/06 22:06:53
あるアドレスに名前を付ける時ってどうするの?
346:デフォルトの名無しさん
09/11/06 22:14:14
>>345
マクロとか変数名とか名前-アドレスマップとか
347:デフォルトの名無しさん
09/11/06 22:15:57
ポインタ
348:デフォルトの名無しさん
09/11/06 22:19:10
>>347
初心者は黙ってろ。
349:デフォルトの名無しさん
09/11/06 22:28:10
× DIV = (300 / 2);
○ DIV = (300 >> 1)
350:デフォルトの名無しさん
09/11/06 22:39:15
一番やりがち、真っ当なのはdefine
#define 90000000 adressV125
351:デフォルトの名無しさん
09/11/06 22:41:20
>>348
ぬるぽ
352:デフォルトの名無しさん
09/11/06 22:42:13
>>350
釣り針でかすぎw
353:デフォルトの名無しさん
09/11/06 22:47:28
コンパイラが対応していれば、#plasmaでもいい。
でもプラズマは本当に「そのプラットフォーム専用」でないと用意されていない。
354:デフォルトの名無しさん
09/11/06 22:53:32
本命は l だと思う。
355:デフォルトの名無しさん
09/11/06 22:59:59
#import
356:デフォルトの名無しさん
09/11/07 00:46:37
DXライブラリを使用して今までは正常にコンパイルできていたのですが、PCのフォルダなどを整理してから、
Fatal: ファイル VORBISFILE_STATIC.LIB が開けません
とメイク結果に表示されコンパイルできなくなってしまいました。
エディンタの再設定もしてあり、必要なファイルはあると思うんですが...
だれかアドバイスいただけないでしょうか。
357:デフォルトの名無しさん
09/11/07 00:55:41
ここはそんな質問する場じゃない
358:デフォルトの名無しさん
09/11/07 01:04:48
DBに接続するためのパスワード文字列をソースに埋め込もうと
考えたんですが、stringsコマンドでバレてしまいますよね。
通常は暗号化したパスワードを文字列として持たせるのがベターなんでしょうか?
359:デフォルトの名無しさん
09/11/07 01:39:49
>>357
すみません初心者用の本でライブラリを使いなさいと書いてあったんです...
本の通りにやり直してもできないんです
360:デフォルトの名無しさん
09/11/07 01:41:28
ここはそんな質問する場じゃない!
361:デフォルトの名無しさん
09/11/07 02:39:25
気合い入れてもう一回ググッてきます。がんばってきます
362:デフォルトの名無しさん
09/11/07 10:18:05
フォルダの整理って何したんだよ?
363:デフォルトの名無しさん
09/11/07 11:09:18
makeしたら負けだと思う。
364:デフォルトの名無しさん
09/11/07 11:46:42
>>363
自分で書いて面白いと思ってんの?
365:デフォルトの名無しさん
09/11/07 11:50:14
おつにゃん
366:デフォルトの名無しさん
09/11/07 13:17:46
printf("\
1行目\n\
2行目\n\
3行目\n\
・・・・
最終行\n\
");
367:デフォルトの名無しさん
09/11/07 13:20:21
それインデンツできないから×
368:デフォルトの名無しさん
09/11/07 14:31:46
printf(
"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n"
);
369:デフォルトの名無しさん
09/11/07 15:06:46
char *s="
#include "hoge.txt"
";
printf(s);
370:デフォルトの名無しさん
09/11/07 17:34:37
if(fgets(str, sizeof(str), stdin) == NULL)
が成り立つことってあるのでしょうか。
371:デフォルトの名無しさん
09/11/07 17:45:41
ファイル終端。
372:370
09/11/07 17:50:17
キーボードからの入力でファイル終端ってどういう場合なんでしょうか
373:デフォルトの名無しさん
09/11/07 17:54:11
>>372
Ctrl-Z とか Ctrl-D とか ファイルリダイレクト とか
374:デフォルトの名無しさん
09/11/07 17:54:12
>>372
Windows なら ctrl + z
*nix なら ctrl + d だっけか?
375:370
09/11/07 18:02:17
ありがとうございます
376:デフォルトの名無しさん
09/11/07 18:47:31
define BUF 1024
char buffA[BUF], buffB[BUF];
char** str;
int needss, i, j, x, y;
質問です。上記の変数を利用しプログラムを記述しました。
まったく問題なく実行でき、さらに処理を追加しようと新たに
char buffC[BUF]という配列を宣言すると、エラーを吐くようになりました。
どうも、char型の変数を増やすとbuffBに文字列が格納された瞬間にエラーがでます。
変数名を変えても改善しませんでした。
プログラム自体には問題なく、当然コンパイラーは警告すらでません。
何が問題なのかまったく分からず困惑しています。
変数名が悪いのか、配列の要素数が全体で見れば多すぎるのかと思いましたが、そんなことはないはずですよね・・。
環境はUbuntu9.04 コンパイラGCC エディタEmacsです。
エラーの考えられる原因はなんでしょうか。
377:デフォルトの名無しさん
09/11/07 18:50:07
object-CってC使いに易しいかな?
iMacポチって待機中なんだけど…
378:デフォルトの名無しさん
09/11/07 18:53:18
>>376
スタックオーバーフローか未初期化のポインタで何か操作しようとしてる可能性が高い
379:デフォルトの名無しさん
09/11/07 19:07:01
>>378
ポインタはmallocでメモリを確保しています。
というか、変数を追加しなくても、実行できなくなりました・・。
mallocで確保したメモリがfreeで解放できずスタックオーバーフローになっているという落ちとかでしょうか。。
380:デフォルトの名無しさん
09/11/07 19:13:01
malloc はスタック関係ねー
381:デフォルトの名無しさん
09/11/07 19:13:11
>>379
bufBに文字列が格納された時にエラーが発生という
場合、格納しようとしている文字列に問題があると
考えられる。多分読み出してはならない領域を
指すポインタだとか....
正確なことはソース見なければわからないんで
うpローダ使ってアげてみたら?
382:デフォルトの名無しさん
09/11/07 19:15:04
まあどうせ単なるショボバグだろうな。
383:デフォルトの名無しさん
09/11/07 19:18:20
コンパイラのせいにしたいのがみえみえ
384:デフォルトの名無しさん
09/11/07 19:19:29
>ポインタはmallocでメモリを確保しています。
というが、
>define BUF 1024
>char buffA[BUF], buffB[BUF];
>char** str;
>int needss, i, j, x, y;
の中にあるポインタはstrしかなく、
そこにmallocの戻り値を格納するとしたら、多分
(charの配列ではなく)char*の配列を確保しているわけで
何かもうそもそもソースがおもしろいことに?^^
385:376
09/11/07 19:22:31
ネタコメント削除してソースうpしますです。。
386:デフォルトの名無しさん
09/11/07 19:24:04
(* (char *) ABC_easy_as_a_123)(int);
これどういう意味ですか。
ポインタ型charにキャストするなら最初からそうやったらいかんのですか。
387:デフォルトの名無しさん
09/11/07 19:25:56
>>386
関数のポインタだろうけど、なんぞこれw
388:376
09/11/07 19:33:16
URLリンク(codepad.org)
うpしました。ダメ出しお願いします。
389:デフォルトの名無しさん
09/11/07 19:34:35
struct SomeStruct
{
// ・・・
};
と書けばいいのになんで
typedef struct
{
// ・・・
}
SomeStruct;
と書くのが巷で流行ってるの?
390:デフォルトの名無しさん
09/11/07 19:39:41
structをtypedefしないんだったらそいつへのポインタを
使うのはダサイかも
391:デフォルトの名無しさん
09/11/07 19:40:35
ヒント:構造体を使う時
392:デフォルトの名無しさん
09/11/07 19:42:56
構造体は、struct タグ名 で宣言するが
これで宣言したのはタグ付きの構造体の中身であって、
型として認められていない。
ここでtypedef を用いると、「SomeStruct型の構造体である」ことを認めさせることになる。
typedefを使わないと、
struct SomeStruct MyStruct;
と別に一行必要になり。これでようやくSomeStruct型の構造体と認められるわけだ
つまり、構造体の「型宣言」と同時に「構造体として使えるように名前もつけてしまおう」という横着した手法なだけだ。
構造体は、述べたように最初の段階では使用できる構造体として認められない。
必ず、「SomeStruct型の構造を持つ○○」という名前をつけてやらなければ使用できない。
だからtypedefで型と名前を同時に決めることもよくある話。
393:デフォルトの名無しさん
09/11/07 19:47:01
C++だと、これを勝手にやってくれちゃってんで面倒なことにもなりかねない。
Cの頃からtypedef structでやっていればC++って何て便利なんだ!と思うかもしれないが
あれは余計なお世話といってよい。
394:デフォルトの名無しさん
09/11/07 19:47:04
理屈っぽ
395:デフォルトの名無しさん
09/11/07 19:49:40
>>388
/*ここで必要な箱の数が分かったのでmallocで領域を確保*/
/*forで必要な行数回、1行の文字数のchar型の領域を作成*/
str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) );
for (i = 0; i <= needBr; i++){
str[i] = ( char * )malloc(oneLineLen * sizeof (char) + 1);
}
396:デフォルトの名無しさん
09/11/07 19:52:04
>>392
なんか勘違いしてるっぽいな。
397:デフォルトの名無しさん
09/11/07 19:53:53
strに実体がないような?
398:デフォルトの名無しさん
09/11/07 19:57:45
str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) );
↑
思いっきり書き忘れていました・・。
しかも括弧付けわすれで評価が意図しない形になる(はず)になっていました。
charが1バイトなので+1で大丈夫だっただけですよね・・。
399:デフォルトの名無しさん
09/11/07 20:01:04
?
400:デフォルトの名無しさん
09/11/07 20:03:02
!
401:376
09/11/07 20:11:20
9文字入力して4文字で改行で実行したりすると
*** glibc detected *** ./a.out: double free or corruption (out): 0x082b9018 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7dfc604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7dfe5b6]
./a.out[0x8048823]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7da3775]
./a.out[0x8048521]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
08049000-0804a000 r--p 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
0804a000-0804b000 rw-p 00001000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
082b9000-082da000 rw-p 082b9000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7d8c000-b7d8d000 rw-p b7d8c000 00:00 0
b7d8d000-b7ee9000 r-xp 00000000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7ee9000-b7eea000 ---p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eea000-b7eec000 r--p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eec000-b7eed000 rw-p 0015e000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eed000-b7ef0000 rw-p b7eed000 00:00 0
b7ef0000-b7efd000 r-xp 00000000 08:08 2779 /lib/libgcc_s.so.1
b7efd000-b7efe000 r--p 0000c000 08:08 2779 /lib/libgcc_s.so.1
b7efe000-b7eff000 rw-p 0000d000 08:08 2779 /lib/libgcc_s.so.1
b7eff000-b7f03000 rw-p b7eff000 00:00 0
b7f03000-b7f04000 r-xp b7f03000 00:00 0 [vdso]
b7f04000-b7f20000 r-xp 00000000 08:08 6255 /lib/ld-2.9.so
b7f20000-b7f21000 r--p 0001b000 08:08 6255 /lib/ld-2.9.so
b7f21000-b7f22000 rw-p 0001c000 08:08 6255 /lib/ld-2.9.so
bf80c000-bf821000 rw-p bffeb000 00:00 0 [stack]
Aborted
とかもうね・・・。
402:376
09/11/07 20:15:23
謎のエラーはmallocが1行抜けてたからのようです。。
395さんはじめありがとうございました・・。
403:デフォルトの名無しさん
09/11/07 20:34:31
この先、メモリが10GBとかになったらC言語じゃ対応できなくね?
CってポインターがINTで4294967295までしか設定できないよね
それ以上のアドレスは指定できないけどどうすんの?アドレスが5000000000とかの指定できなくね?おわた
404:デフォルトの名無しさん
09/11/07 20:41:56
はいはいワロス
405:デフォルトの名無しさん
09/11/07 20:44:30
ポインタがint値だなどと誰が決めたのだ。
ポインタはポインタであってポインタでしかない。
多くの実装でlong intに変換可能だというだけ。
なんだったら見たこともない宇宙文字列で実装してもいいのだ。
406:デフォルトの名無しさん
09/11/07 20:54:08
>>403
どれでもいいから 64bit 版のコンパイラで sizeof(void*) を表示してみそ
407:デフォルトの名無しさん
09/11/07 20:56:10
long long long long long long long long long long long long long long long long long long long long int
408:デフォルトの名無しさん
09/11/07 20:57:50
>403
メモリが10GB(仮想記憶含まず)ならCPUもそれを指定できないとダメ子さんになるから
(intは何ビットか計算するの面倒だからやらないまぁ、64bitで十分だろうけど)
CPUのbit数xが10G < pow(2, x)を満たす必要がある
intはpow(2, x)なるbit数であるのが一般的である
また、規格ではポインタがintに変換できるとは書かれていない
C99からintptr_tとか入った気もするけど、マジックリストにでも使うんですか
とか思って特に調べていない
409:デフォルトの名無しさん
09/11/07 21:02:02
某ランドのコンパイラとかがC99に対応していない
long longが使えない
410:デフォルトの名無しさん
09/11/07 21:04:17
C99 はロールバックしたうえで、C201x を練り直して欲しい
411:デフォルトの名無しさん
09/11/07 21:07:07
>>403
2038年までにはCは終わってる
412:デフォルトの名無しさん
09/11/07 21:09:47
>>409
long long 使えるよ
C99には対応してないけど
ECC6.1.0(Embarcadero C++ Compiler)な
413:デフォルトの名無しさん
09/11/07 21:16:44
time_t を使っているからコンパイラが対応してれば 2038年は超えられる
414:デフォルトの名無しさん
09/11/07 21:20:51
そりゃ何とかするでしょ
もっと新しいいい言語が出ていればそっちに変わっているだろうが、
2038年にまだC言語が使われていれば何とかするしかない
415:デフォルトの名無しさん
09/11/07 21:22:27
あと30年も生きていられるわけないじゃないか^^
416:デフォルトの名無しさん
09/11/07 21:25:08
おまえ何歳だ?
417:デフォルトの名無しさん
09/11/07 21:28:06
30年もすれば日本は消滅して日本人は貧困にあえぎプログラミングどころかパソコンに触る機会もないよ
418:デフォルトの名無しさん
09/11/07 21:28:45
C言語で楽しくプログラミングする人の集まるスレだから、アンチは別のスレに行ってよ
time_tを変えて再コンパイル、リンクするか64bitCPUに移行すれば、2038年問題なんて大したことではない
30年後もx86さまさまの人は時代後れを認識した方がいいと予言しておく
419:デフォルトの名無しさん
09/11/07 21:29:49
64bitCPUとtime_tは関係があるわけ?
420:デフォルトの名無しさん
09/11/07 21:31:16
64bitCPUにすれば今までのtime_tは2038年以降も正常に動くんだよ
421:デフォルトの名無しさん
09/11/07 21:35:09
先延ばししただけじゃねーの?
422:デフォルトの名無しさん
09/11/07 21:40:35
先延ばしじゃない方法があるのか?
423:デフォルトの名無しさん
09/11/07 21:44:57
永遠はあるよ
424:デフォルトの名無しさん
09/11/07 21:49:41
time_tは有限?
425:デフォルトの名無しさん
09/11/07 21:50:37
その都度仕様を変えれば無限とも言える
426:デフォルトの名無しさん
09/11/07 22:01:29
64bit でも 292277026596年問題が残るが、その頃のマシンがバグったらグレートウォールごと吹っ飛ぶとかあるのかな
427:デフォルトの名無しさん
09/11/07 22:04:34
そこまでくると、さすがに超人ロックくらいしか生きてないだろうな
428:デフォルトの名無しさん
09/11/07 22:04:51
>>426
その頃にはさすがに人類は死滅してるよ
429:デフォルトの名無しさん
09/11/07 22:07:17
>>420
CPU関係ねーよカス
430:デフォルトの名無しさん
09/11/07 22:08:23
嫌味で言ったつもりだったが、なに釣られてんのwww
431:デフォルトの名無しさん
09/11/07 22:08:38
いやいや。
今仮に18歳のぴちぴち大学1年生でも
30年後は48歳だよ?
48歳の人はあんまりもうプログラムはしてないんじゃないかな。
経営側か、現場であっても少なくとも設計よりの仕事をしていて
もうやりたくてもプログラムなんてさせてもらえなくて
夜遅く家に帰ると妻はうるさく、娘には嫌われ、
トイレ横の物置を改造して作った名ばかりのパソコンルームに
30年前に自作したコンピュータがおいてあって、
それの電源をいれてほそぼそと趣味のコードを打ち込むのが日課だったり^^
432:デフォルトの名無しさん
09/11/07 22:11:43
>>428
そう思うと勿体ないよな。
これだけの科学技術を創り出すのに、どれだけの時間がかかったことか。
再び文明が生まれたとしても、車輪の再発明をするだけだ。
433:デフォルトの名無しさん
09/11/07 22:13:29
地球が始まった時間に比べれば一瞬の出来事
434:デフォルトの名無しさん
09/11/07 22:21:49
>>432
人間が生まれて600万年
だが技術革命はここほんの100年余りの事だ
435:デフォルトの名無しさん
09/11/07 22:22:40
もしかしたら今が本来の人間の姿からかけ離れて
どうかしてるかもしれないって話
436:デフォルトの名無しさん
09/11/07 22:23:45
は?詳しく話してくれないか?それを
437:デフォルトの名無しさん
09/11/07 22:23:58
他の惑星に移住してて、そこで新たにタイムテーブル作ってるから問題なしとか
438:デフォルトの名無しさん
09/11/07 22:24:55
リフボードでトラパーの波に乗るんだろうな
439:デフォルトの名無しさん
09/11/07 22:53:51
UFOに乗ってる宇宙人なんか肉体無いらしいよ
これ以上はオカルト板でしようぜ
440:249
09/11/07 23:38:09
>>249です。
まず1列目に1~9の数字を入れようとして
以下のようなプログラムを作りました。
URLリンク(www.dotup.org)
しかし上のプログラムでは1列目に同じ数字が出てしまうので
1行目に出た数字は2,3行目には出ないようにしたいです。
それを改良したいのですが方法が分かりません。
教えてください。
441:デフォルトの名無しさん
09/11/08 00:12:03
>>440
何がどうなって欲しいの?
442:デフォルトの名無しさん
09/11/08 00:19:22
10進数を10桁の2進数に変換したいんだけどどうやったらいいかわからない
8とか16進数なら表示できるのわかるんだけど、2進数って簡単に表示できないんだっけ?
443:デフォルトの名無しさん
09/11/08 00:21:06
C言語は2進数はサポートしてないからね
444:デフォルトの名無しさん
09/11/08 00:22:00
AND取ってループすれば出せるでしょ
445:デフォルトの名無しさん
09/11/08 00:22:53
8進数とか16進数の表示を自前でやってみたら
446:デフォルトの名無しさん
09/11/08 00:24:30
2で割っていけばいいんでは?
447:デフォルトの名無しさん
09/11/08 00:27:08
>>442
limits.hをインクルードしてsizeof(int) * CHAR_BITで
intのビット数を求め、10進数をunsignedにキャストして←ここ重要
1UL << (sizeof(int) * CHAR_BIT - 1)のマスクとandを取った結果が
0か1かを書きだして行く
マスクは>>で右シフトしてループ
448:デフォルトの名無しさん
09/11/08 00:27:48
>>441
>>440のプログラムでは
100
100
300
など一列目に同じ数字が出ることがあるので
500
600
200
のように一列目の各行におなじ数字が出ないように改造したいです
449:デフォルトの名無しさん
09/11/08 00:32:10
#include <stdio.h>
int main() {
int beam = 10; // チゲ
int i, n ; // counter
for ( n = 0; n != 1024; ++n ) {
printf( "%d : ", n );
for ( i = 0; i != beam; ++i ) {
printf( "%d", n >> ( beam - i - 1 ) & 1 );
}
printf( "\n" );
}
}
450:デフォルトの名無しさん
09/11/08 00:44:32
>>448
1~9 までの重複しない3つの数字が欲しいだけ?
もしそうならこれでおk
{
int i, x, n[9];
for(i=0;i<9;i++) n[i]=i+1;
for(i=0;i<9;i++)
{
x=rand()%(i+1);
t=n[i];
n[i]=n[x];
n[x]=t;
}
for(i=0;i<3;i++) cardForNumbers[i+1][1]=n[i];
}
451:デフォルトの名無しさん
09/11/08 00:52:23
先生質問です。
char *ptrを引数として他の関数に渡す時は
other_Kansu (&ptr); ですよね?
char **ptrを引数として渡すときはどうなるんでしょうか?
other_Kansu (&*ptr)ですか?
452:デフォルトの名無しさん
09/11/08 00:58:19
ちょっくら驚く豆知識
なんと!
なんとなんとなんと!
なんとなんとなんとなんとなんとなんと!
4bit CPUでも128bitデータなどを扱えるのである!!!!!!!!!!!!
何をバカな、と思ってるのは素人である。ド素人である。
4bit CPUでは、128bitデータを「1サイクルで」レジスタなどに格納できないだけであって
128 / 4サイクル使って上位4bitもしくは下位4bitから順番にメモリに128bitぶん格納していけばよいのだ。
バカか手前等。
453:デフォルトの名無しさん
09/11/08 00:58:22
面白い質問ですね^^
void other_Kansu( char ** ) に char *ptr を渡したいときは other_Kansu( &ptr ) です。
void other_Kansu( char ** ) に char **ptr を渡したいときは other_Kansu( ptr ) です。
&*ptr でもいいですが、それは結局 ptr です。
多分。
454:デフォルトの名無しさん
09/11/08 01:01:19
>>451
両方違うともいえるし、両方合っているともいえる
455:デフォルトの名無しさん
09/11/08 01:07:16
>>453
非常にややこしいですね・・。
>void other_Kansu( char ** ) に char **ptr を渡したいときは other_Kansu( ptr ) です。
passing argument 1 of ‘ptr' makes integer from pointer without a cast
って言われるんですが無視でいいんでしょうか・・?
>>454
正解は存在しますか・・?
456:デフォルトの名無しさん
09/11/08 01:27:21
&* はC言語の仕様上はダメなんじゃないの?
int a=10, *p=&a;
のとき
&*p って &10 でしょ
457:デフォルトの名無しさん
09/11/08 01:36:22
ptr が char** だから *ptr は char* であるので
依然としてアドレス演算は可能でしょう^^
>passing argument 1 of ‘ptr' makes integer from pointer without a cast
その警告は今回の件とは直接には無関係です^^
458:デフォルトの名無しさん
09/11/08 01:37:03
>>447
右シフト使わない前者のでunsignedにする理由って何?
459:デフォルトの名無しさん
09/11/08 01:38:43
こいつは何をいっているんだ
460:デフォルトの名無しさん
09/11/08 01:39:01
451は、なにか、勘違いしてるような?
461:デフォルトの名無しさん
09/11/08 01:39:27
int a=10, *p=&a;
*p は a のアドレス(仮に1000番地)を保持
&*p は 1000番地のアドレスを指すので
&10ではなくて &(1000番地)で結局1000番地
1000番地は10
ってなる気がする
462:457
09/11/08 01:40:41
あ、上の2行と下の2行は別の書き込みへのレスです^^
ごっちゃになってしまいました^^
463:デフォルトの名無しさん
09/11/08 01:42:11
>>452
いきなり何の話してんの?
上のメモリに関する話にしては話がズレすぎてるし、その豆知識をどうしたいんだ。
>>455
深く考えすぎ。
464:デフォルトの名無しさん
09/11/08 01:44:48
>>457
キャストなしで整数になるの意味が分からないんですが、引数の受け渡し方があってるならどっか根本的に勘違いが発生してそうです・・。
違う視点から警告と向き合ってみますです。
どうもありがとうございました><
465:デフォルトの名無しさん
09/11/08 01:50:11
>>464
変数の宣言部、関数のプロトタイプ、関数の実装部を見直してみてはどうか。
466:デフォルトの名無しさん
09/11/08 01:53:13
>>464
今ちょうど見直してましたが、間違っては無さそうです。
他の関数へは上手く**ptrが渡せてるみたいなのですが・・。
該当部分をもう一度書き直して見ます・・。
467:デフォルトの名無しさん
09/11/08 01:54:38
>466
ソースきぼん
468:デフォルトの名無しさん
09/11/08 02:02:05
>>467
変数名とか・・・かなり恥ずかしいんですが(/////)
URLリンク(codepad.org)
469:デフォルトの名無しさん
09/11/08 02:02:55
>>467
hoge.c:68: 警告: passing argument 1 of ‘addStr’ makes integer from pointer without a cast
書き忘れました。。
470:デフォルトの名無しさん
09/11/08 02:07:30
void addStr (char *causeBuf, int causeNeedBr, int causeOneLineLen, char** causeStr)
471:デフォルトの名無しさん
09/11/08 02:11:06
>>470
お、お見事です・・。
472:デフォルトの名無しさん
09/11/08 02:16:36
完全に見るところを間違えてました・・。
ゴールが見えそうです。
ありがとうございました><
473:デフォルトの名無しさん
09/11/08 02:21:08
argument 1 of ‘addStr’
ちゃんと警告よみましょうねっていう。
474:デフォルトの名無しさん
09/11/08 02:23:23
英語の知識か日本語のコンパイラがあれば読めてました><
475:デフォルトの名無しさん
09/11/08 02:26:34
英語が読めなくてもいいから、今回のような失敗の時はこういう警告がでるのだということを覚えておくといいよ。
そうすれば、次に同じ警告が表示されたとき、やっぱり読めないけど、
一個目のパラメータに変なの渡してるんだなということが分かるようになる。
これはこれで慣れ。ガンガレ
476:デフォルトの名無しさん
09/11/08 02:32:29
そうですね。
今回のでまた1つ覚えました><
C言語歴というか、言語歴2ヶ月なんで始めて出会すエラーが多く、エラー文が読めても意味がわからないことばっかりです。
頑張って完成させます。。
477:デフォルトの名無しさん
09/11/08 04:40:09
>>458
遅レスだけど
intだと環境依存だが符号ビットが立っていると右シフトすると
おかしなマスクになる事があるから
478:デフォルトの名無しさん
09/11/08 11:07:52
シフトに関してもアセンブラが優れている。
Cのシフトは問答無用、見境なく全部シフトさせてしまうが
アセンブラなら大抵、符号ビットを残したままシフトさせることができる。算術式シフトってやつだな!
479:デフォルトの名無しさん
09/11/08 11:11:51
それCPUの機能であってアセンブラがどうのとは違うのでは
480:デフォルトの名無しさん
09/11/08 11:12:44
strstr関数をライブラリ無しでやるには?
481:デフォルトの名無しさん
09/11/08 11:18:09
ポインタをインクリメントしながら文字比較をしていくしか
482:デフォルトの名無しさん
09/11/08 11:21:45
遅くてもいいんなら、
一文字ずつ比較する文字列比較を、開始位置を一文字ずつずらしながらループする。
483:デフォルトの名無しさん
09/11/08 11:29:55
string s="abcde";
s="abcdef";
ってやったら、最初の行で作ったabcdeがメモリ上にのこっちゃって効率悪いんでしょ?
ガベージコレタクに頼らず自分でメモリに残ってるゴミを消す方法ないの?
484:デフォルトの名無しさん
09/11/08 11:30:02
なつかしいな。
BM法とか勉強した記憶が。
485:デフォルトの名無しさん
09/11/08 11:33:04
>>483
リテラルを使わなきゃいいんじゃねw
486:デフォルトの名無しさん
09/11/08 11:40:24
string *s = new string("abcde");
*s = "abcdef";
delete s;
487:デフォルトの名無しさん
09/11/08 11:44:16
unsigned charは1byteでmalloc(size)はunsigned char [size]と同じ大きさの連続メモリを返すってのは規格を満たすすべての処理系で正しい?
488:デフォルトの名無しさん
09/11/08 13:00:40
ループ毎に、配列でいう1番目をサーチし、ヒットがあったなら次に2番目をサーチし、またあれば3番目をサーチしたいのですが、ちなみにヒットする項目がなければ配列に登録します
ただやりたいのが、配列1番目が1byte、2つめが4byte、最後が4byteとなっているのですが、これらを管理する上でいい方法はないでしょうか?
489:デフォルトの名無しさん
09/11/08 13:01:09
>>477
おまえは にほんごが よめないのか?
490:デフォルトの名無しさん
09/11/08 13:04:01
変数初期化のとき*が2つついてる奴あれ何?
491:デフォルトの名無しさん
09/11/08 13:05:55
>>490
ポインタへのポインタ
492:デフォルトの名無しさん
09/11/08 13:18:41
>>488
配列で異なるサイズのデータを扱う方法を訊ねてるとして
普通は、1)最大に合わせる、2)unionで全部をひとつの型にまとめる
あたり
493:デフォルトの名無しさん
09/11/08 13:55:13
>>490
*は何個でも付けれるぞ
int ************p;
みたいなのもok
494:デフォルトの名無しさん
09/11/08 14:04:45
(*************printf)("HELLO.");
495:デフォルトの名無しさん
09/11/08 14:18:19
先生質問です。
char** pptr;
char strA;
int num1,num2;
//領域確保
pptr = calloc ( (num) , sizeof (char));
for (i = 0; i <= num1; i++){
pptr[i] = calloc ( (num2 + 1) , sizeof (char));
}
//文字代入
for (i = 0, j = 0; i < num; i++, j += num2){
strncpy (pptr[i], strA + j, num2);
}
この処理でnum1に5以上の値が入るとSegmentationFaultになります。
デバッガではstrncpyのラインがSegmentationFaultの原因ラインとでます。
printfで表示して確認してみると、num1でnum2が割りきれ、かつnum1が5以上のときに
pptr[0][0]に領域以上の文字化け表示が出るときが有ります。
この部分の記述で不味い点があるのでしょうか?
496:デフォルトの名無しさん
09/11/08 14:20:37
ポインタのポインタってポインタで代用できないの???
ポインタのポインタと言えどもポインタであることは間違いがないので
ポインタのポインタとするのではなく、ポインタへのポインタでしても
ポインタのポインタであることは変わりがないじゃないの。
497:デフォルトの名無しさん
09/11/08 14:22:35
ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
インポ
498:デフォルトの名無しさん
09/11/08 14:25:28
pptr = calloc ( (num) , sizeof (char)); はまずい。
pptr = calloc ( (num) , sizeof (char *));
にしろ
499:デフォルトの名無しさん
09/11/08 14:32:27
>>496
typedef int *pint;
pint *p = N;