1 :
v(^o^i)d v(^o^i)d v(^o^i)d v(^o^i)d :
04/10/17 19:06:46
2 :
デフォルトの名無しさん :04/10/17 19:07:34
3 :
デフォルトの名無しさん :04/10/17 19:42:02
━━━━━━━━━━━━━━━━━終了━━━━━━━━━━━━━━━━━
新スレ激しく乙
5 :
デフォルトの名無しさん :04/10/18 00:35:31
ifsream in("test.dat"); string line; while( !in.eof() ) { getline(in, line); } としてtestファイルから行単位で読み込むときに1個以上の空白文字 を含む行を読み込まないようにするにはどうすればいいのでしょうか?
>1個以上の空白文字を含む行 というか 1個以上の空白文字のみを含む行 です。 よろしくお願いします。
if (読み込まない条件) { continue; } continue について調べてみたらOKかと。
・・・ってこれだと読み込んで何もしない、ってことになるのかw 読み込んでからでないと条件に満ちているかどうかはわからないから、 ある条件の行を読み込まない、という処理は不可能ですw
スレタイ読め
とりあえず前スレから埋めてくれ。
すいませんスレ間違えました。
>>7 その読み込まない条件をどう書けばいいのか・・
14 :
デフォルトの名無しさん :04/10/18 08:29:53
g/^ *$/d 空白が0個の行は残ってもいいんだよね?
15 :
デフォルトの名無しさん :04/10/18 12:54:08
16 :
デフォルトの名無しさん :04/10/18 14:39:25
原点(x=0 , y=0)から各座標点までの直線とx=0、y=+∞の水平線の角度を算出して、 角度の小さい順でソートしたいのですが、どのようにすれば良いのでしょうか? 以下のような逆時計回りの順序にしたいのですが・・・ 1. x=0,y=+5 (x=0〜第2象限) 2. x=-3,y=+3 (第3象限) 3. x=-2,y=-4 (第4象限) 4. x=+3,y=+4 (第1象限) わかりにくかったらすいません。 よろしくお願いします。
>>16 座標と角度をセットで構造体 (の配列) に突っ込んで qsort()。
ソートの方法を聞いているのか 角度の大小の判定方法を聞いているのか… そもそもスレ違いな希ガス
srand()って渡す値か同じだとrand()が返す値も同じになるんですか?
うん
>>16 /\___/ヽ
/'''''' '''''':::::::\
. |(●), 、(●)、.:| + 全部自分でやりなさい。
| ,,ノ(、_, )ヽ、,, .::::|.
. | `-=ニ=- ' .:::::::| +
\ `ニニ´ .:::::/ +
,,.....イ.ヽヽ、ニ__ ーーノ゙-、
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||.
unsigned int が sizeof( unsigned int ) * 8 bits なのは規格?それとも処理系依存?
sizeof( unsigned int ) * char なのは規格。 char が 8 bits なのは処理系依存。 だったと思う。
>>22 unsigned intがsizeof(unsigned int) * 8bitsというのは保証されているけれど、
sizeof(unsigned int)の値は保証されていない。
普通は32bitだけれど、処理系によっては違うこともある。
27 :
デフォルトの名無しさん :04/10/18 21:53:23
>>22 8bitsじゃなくてCHAR_BIT bits
29 :
デフォルトの名無しさん :04/10/18 21:58:31
規格ではCHAR_BITは8が例として挙げられていて、本文中には 絶対値がそれ以上で同じ符号を持っていなければならないことが 定められている。よってC言語ではあらゆる環境においてCHAR_BITは 8以上でなければならない。
>>28 規格が1Byte == 8Bitと決め付けていないからこそCHAR_BITがあるんだろ。
>>31 NULL は 0 と決まっていますが、何か?
sizeof( unsigned int) * 8 sizeof( unsigned int) * CHAR_BITS 結局どっちが正しいの?
34 :
デフォルトの名無しさん :04/10/18 22:08:40
35 :
デフォルトの名無しさん :04/10/18 22:11:34
>>33 s/CHAR_BITS/CHAR_BIT/
char が常に 8-bits とは限らず、(ただし常に CHAR_BIT bits) sizeof( unsigned int ) * CHAR_BIT が正解ってこと?
37 :
デフォルトの名無しさん :04/10/18 22:15:22
YES あとsignedかunsignedかで大きさが変わることもない。
CHAR_BIT >= 8も決まっているっぽい。
C言語では if( ... ) { 何か一行の処理 } を if( ... ) 何か一行の処理 って {} を書かずに書けます? VC .NET 2003 ではコンパイル通るようなんですが…
色々言葉足らずですな。 書けるかと聞かれれば書ける。
Cの規格上一行で書いても問題ないでしょうか…?
43 :
デフォルトの名無しさん :04/10/18 23:38:18
改行を入れる必要はない。
>>42 無いよ
そもそも一行が基
{}は複数行書ける様にブロック化したに過ぎない
45 :
for :04/10/18 23:47:53
while
ぽ
!
uint8_tは8bitと決まっています。
51 :
デフォルトの名無しさん :04/10/18 23:59:16
オレ流規格
規格票くらい買ってもらえ。
>>50 C99。尤も、必ず定義されているとは限らない。
マタ C99ナンダッテサ λ・・・・・・
54 :
デフォルトの名無しさん :04/10/19 00:37:12
9bitの2の補数を正しくintに変換するにはどう書けばよいでしょうか?
int main(){ ... } で、最後に return 0; を書かなくても警告が一つも出ずに普通にコンパイル出来たんですが、 これって VC.NET 2003 に問題アリ?
警告のレベル変えても出ないのか?
レベル 4 でも出ませんが…
なら問題なんだろうね
>>56 それはC++の仕様。ISO/IEC 14882:1998 3.6.1[basic.start.main]-5
省略するとreturn 0;と書いたのと同じことになる。
ここCスレだけど… って、C++でコンパイルしてたってオチかな。
だろうな。VC.NET 2003って書いてるし。
63 :
デフォルトの名無しさん :04/10/19 02:09:31
65 :
デフォルトの名無しさん :04/10/19 02:12:41
どこのスレがいいですか?
>>65 宿題スレだが、マルチで書いてやがるな
回答は無いものと思え
向こうに誰もいなかったみたいだったので・・・ すみませんでした
68 :
デフォルトの名無しさん :04/10/19 05:11:57
>>16 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
int x;
int y;
} POINT;
POINT points[] = {
{.x = 0, .y = +5}, // 2
{.x = -3, .y = +3}, // 3
{.x = -2, .y = -4}, // 4
{.x = +3, .y = +4}, // 1
};
int comp(const void *, const void *);
void out(POINT *, int);
double sub(POINT *);
int main()
{
qsort(points, sizeof(points) / sizeof(POINT), sizeof(POINT), comp);
out(points, sizeof(points) / sizeof(POINT));
return EXIT_SUCCESS;
}
69 :
デフォルトの名無しさん :04/10/19 05:12:30
void out(POINT *p, int n) { int i; for (i = 0; i < n; i++) { printf("x = %+4d, y = %+4d\n", p[i].x, p[i].y); } } int comp(const void *a, const void *b) { double a_tan, b_tan; a_tan = sub((POINT *)a); b_tan = sub((POINT *)b); if (a_tan > b_tan) return 1; else if (a_tan < b_tan) return -1; else return 0; }
70 :
デフォルトの名無しさん :04/10/19 05:14:41
double sub(POINT *p) { if (p->x == 0) return INFINITY; else return abs((double)p-> y / (double)p->x); }
71 :
デフォルトの名無しさん :04/10/19 05:18:01
>>32 > NULL は 0 と決まっていますが、何か?
これは明らかなまちがい。
NULLが0なんじゃなくて、0がNULLなんです。
#define NULL ....で定義されている値が、bitパターンでall0のものでないような処理系で
あっても、ポインターに代入(もしくは比較)される0は、そのナルポインター値に読み替え
られるだけ。
72 :
デフォルトの名無しさん :04/10/19 05:48:34
>>52 > 必ず定義されているとは限らない。
いいえされています。
>>72 uint_least8_t と uint_fast8_t は必須。uint8_t は任意。
いや、「任意」じゃないな。スマソ。 8bit 整数のある環境では「定義しなければならない」だな。
#include<stdio.h> int main(void) { char *p="abcde"; char *q=""; int l=0; int i; while(*p++){ *(q+0)=*(p+(l++)); } while(*(q+1)++=*p++) ; printf("abcde →"); for(i=0;i<l;i++){ printf("%s",*(q+i)); } return(0); } 自分でも何をやっているのかわかりません。 abcde→eabcd となるはずなんですけど・・・
>>71 手元のANSIC言語辞典には、0かそれをviod*にキャストしたものって書いてあるけど。
相手すんな、freeとかNULLとかのお決まりネタで喜ぶ輩なんだから
>>76 #include<stdio.h>
int main(void)
{
char p[]="abcde";
char q[]=" ";
int l=0;
int i;
for(i = 0; i < sizeof(p) / sizeof(char) - 1; i ++) {
q[(i + 1)%(sizeof(p) / sizeof(char) - 1)] = p[i];
}
printf("abcde → %s\n", q);
return(0);
}
/sizeof(char)は余計だろ。
81 :
デフォルトの名無しさん :04/10/19 13:16:48
> 0かそれをviod*にキャストしたものって書いてあるけど。 そんな型はありません。 > 手元のANSIC言語辞典には、 そんな本はありません。
82 :
デフォルトの名無しさん :04/10/19 13:24:31
main() { char *p = "abcde"; char *q = " "; int n; int i; n = strlen(p); for (i = 0; i < n; i++) q[(i + 1) % n] = p[i]; }
#ifdef __cplusplus #define NULL (void*)0 #else #define NULL 0 #endif
85 :
デフォルトの名無しさん :04/10/19 13:33:09
いいえありません。 そもそもそんな言語もない > ANSIC
ここがCスレな事を考えれば、バカバカしいような揚げ足だな。 内容自体には反論せんのか?
>>86 揚げ足つーかvoidのまねをして遊んでいるのでは?
テキストファイルの任意の行を編集したいのですが サンプルってありませんでしょうか。
91 :
デフォルトの名無しさん :04/10/19 14:26:02
最近PHPをはじめたんだが、これってかなりCをぱくってるよな
さいきんCをはじめたんだけど、これってかなりDelphiをぱくってるよな
>>80 最適化で消えてくれると思う。
要素数の計算を明示した。
>>89 またまたご冗談を・・・。解凍できません。。
97 :
デフォルトの名無しさん :04/10/19 19:44:57
巨大なファイル(数ギガ)のヘッダ部分をカットしようとしています 小規模なファイルなら メモリに読み込んで 先頭をカット ファイルに書き出す なんですけど 巨大なファイルの場合どのようにするのがセオリーなんでしょうか
fopen fseek fopen fread fwrite fclose fclose
先頭部分をスキップして ファイルに書き出す サイズ固定ならfseekあたりでポインタを移動させとけ。
100 :
97 :04/10/19 19:54:35
>>98 >>99 やはりそうするしかないですよね
元のファイルをそのままどうにかできないかと思ったんですが・・
ありがとうございました
ftruncate truncate
matigaeta
NULLについての規格 ISO/IEC 9899:1999 6.3.2.3 Pointers -3 An integer constant expression with the value 0, or such an expression cast to type void*, is called a null pointer constant. If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function. 7.17 Common definitions <stddef.h> -3 The macros are NULL which expands to an implementation-defined null pointer constant.
日本語で話せ
英語くらい読め
むしろフランス語キボンヌ
>>104 ご希望にお答えする。
ISO/IEC 9899:1999
6.3.2.3 ポインタ -3
値0の整数定数式、またはそのような式を型void*にキャストした式は
ナルポインタ定数と呼ばれる。もしナルポインタ定数がポインタ型に
キャストされると、その結果のポインタはナルポインタと呼ばれ、あらゆる
オブジェクトや関数へのポインタと不等と比較されることが保証されている。
7.17 共通定義 <stddef.h> -3
マクロに次のものがある。NULL これは実装定義のナルポインタ定数に
展開される。
108 :
デフォルトの名無しさん :04/10/20 00:18:54
つまり0がNULLなんです。 NULLが0なわけじゃなく。
109 :
デフォルトの名無しさん :04/10/20 00:20:53
110 :
109 :04/10/20 00:34:56
あーでもファイルをr+モードで開いてmemmoveみたいなことしたあとににtruncateすればできるか。 ここではスレ違いだけど。
前提も見ような
112 :
デフォルトの名無しさん :04/10/20 00:47:45
memmoveなんかできないサイズだっての
114 :
デフォルトの名無しさん :04/10/20 00:51:51
別のファイルにヘッダーより後をコピーするなら対して変わらないでしょ。
memmoveは全部メモリ上に読まなきゃ出来ねーし。 しかもファイルサイズの2倍。
116 :
デフォルトの名無しさん :04/10/20 00:54:17
tailコマンド1発で解決じゃん。
truncateとか言ってるのはJava厨か
118 :
デフォルトの名無しさん :04/10/20 00:54:31
>>115 ヘッダーサイズくらいの大きさで読み書きを繰り返せばいいじゃない。
その例はとうに出てるだろ。 memmoveだので新たに何を提示してるの?
\ │ / / ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ─( ゚ ∀ ゚ )< くっちゃらはぴはぴ! \_/ \_________ / │ \ ∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< くっちゃらはぴはぴ! Py厨〜〜〜〜! >( ゚∀゚ )/ | / \__________ ________/ | 〈 | | / /\_」 / /\」  ̄ / /
121 :
デフォルトの名無しさん :04/10/20 00:57:20
>>119 >>98-99 が言っているのは新規にファイルを作成することじゃないの?
あとmemmoveじゃなくてmemmove「みたいな」こと。
で、サイズの調整はどうするって?
123 :
デフォルトの名無しさん :04/10/20 00:59:31
ヘッダーよりあとを前にずらして、後ろの余った部分をtruncateで切るってこと。 もちろんtruncate(か同じようなもの)がなければできないけど。
結局Java厨か
何しに来てるんだろうな
126 :
デフォルトの名無しさん :04/10/20 01:03:48
POSIX準拠のシステムであればtruncateで一発
数GBもあるファイルをたかがヘッダをカットするだけのためにコピーする方がよほどJava厨っぽい
はいはい
129 :
デフォルトの名無しさん :04/10/20 01:12:33
俺だったらついでにparserを作るな
やるこた一緒だろ
一時ファイルを作成しなくても済む代わりに途中で異常終了するとファイルが壊れるな。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>Ruby
134 :
デフォルトの名無しさん :04/10/20 02:17:56
Ruby == 5.5ポ Pearl == 5ポ Diamond == 4.5ポ 印刷業界の常識です。それにしてもxhml1.1のruby機能はいまひとつだなあ。
Java == ぬるぽ
136 :
デフォルトの名無しさん :04/10/20 02:42:49
Null Pointer Assignment == なるぽ
∧_∧
( ・∀・)
(( ( ヽ ノ )
ノ\(○´ ゴッ
(_ノ(_\ ∧
= ()二) < >_∧∩
V`Д´)/ ←
>>135 /
. __
|__|
∧_∧ //
( ・∀・)/ ・・・
と つ
Y .ノ
. ) ∧_∧∩ ・・・
_/し' ( ´∀`)/
/ ←
>>136
>>127 >>131 言語が何で関係してくるのか不明だが、
ロールバックできないファイル操作はしてはならない。
FileNotFoundException=ふんど OutOfMemoryError=おおむ IoConnectionException=いくぽ
どこから「ぽ」が…
ごめん
ある文字列に改行コードを付加したいのですが 改行コードを付加することは不可能でしょうか。 やりかたも教えていただきたいのですが・・・。
>>143 strcat(ある文字列格納されたバッファ, "\n");
145 :
デフォルトの名無しさん :04/10/20 21:07:41
>ロールバックできないファイル操作はしてはならない。 プ
146 :
デフォルトの名無しさん :04/10/20 21:09:17
やり直しと言わないところがプだな
147 :
デフォルトの名無しさん :04/10/20 21:27:06
(゜Д゜) ハ?
148 :
デフォルトの名無しさん :04/10/21 00:23:29
C言語初心者です。 最近、学校で習っていて興味を持ち始めめたので 本を買いたいのですが、初心者に向いていてわかりやすい本はどのようなのものでしょうか? 本屋にいても、たくさんありどれを買おうか迷っています。
150 :
デフォルトの名無しさん :04/10/21 00:31:45
C言語初心者です。課題で迷っています。 strlen関数(文字列の比較する関数)と同じ働きをする関数αを作りたいですがどのように作れば良いのか分かりません。教えて下さい。 ちなみに関数の作り方の構文は知っています。
strlenは文字列の文字数を返す関数で、 比較じゃないぞ、どっちだ。
文字列の比較をするstrlenなんて関数はCにはありません
154 :
150 :04/10/21 00:36:10
strcmpの間違いです。新しく作る関数名がstrlenです。
>>150 Cでは名前にギリシャ文字は使用できないのでαという関数を作ることは不可能です。
157 :
デフォルトの名無しさん :04/10/21 00:51:22
158 :
デフォルトの名無しさん :04/10/21 00:54:17
> strlen関数(文字列の比較する関数)と同じ働きをする関数αを作りたいですが int α(const char *p) { return strlen(p); }
159 :
デフォルトの名無しさん :04/10/21 00:54:53
160 :
デフォルトの名無しさん :04/10/21 00:54:55
↑ これで文句つける教員がいたら、おれんところを連れてこい!
int i = 0; while(*src++) i++; return i;
163 :
デフォルトの名無しさん :04/10/21 09:33:22
Windowsのファイル名を変更したり削除したりする関数ってないのでしょうか? sysytem関数でrenやdelを使う方法は思いついたのですが・・・。
mv
ここはCのスレだ、OSのコマンドの事はそういうスレなり板でやれ、 163がWindowsと書いてる事すら読めないオバカさん。
↑ rename.2.html の意味も知らない && Windows でも rename() を使える事を知らない お馬鹿さん
mvは?
170 :
デフォルトの名無しさん :04/10/21 10:34:07
>>163 renameとremove
どちらも標準関数
時折、 #define HOGE (1) とかって記述を見るんだけど、この場合の () ってどんな意味があるの? 無くても副作用は起きないように思うんだけど。
173 :
デフォルトの名無しさん :04/10/21 14:08:36
括弧をつけなければいけないものだと勘違いしているから。
#define HUGA (1+2) なら副作用が起きるので、習慣上ただの整数も()で囲む事が多い。
gcc の標準ヘッダーにも有ったりするから、何か宗教上の理由とか有るのかと 思ってみたりしてるんだけど、やっぱ、勘違いか習慣の問題ですかね。 ついでに質問なんだけど、同じように関数の型宣言で、 extern hoge(void); とかの extern も似たような理由かなぁ?関数の記憶クラスで extern は 無いですよね?これも明示的に外部の関数だと示すための習慣とか?
177 :
デフォルトの名無しさん :04/10/21 14:36:08
>>175 なにもつけなければexternをつけたものだとみなされる。
ちょうどlong intのintやautoを略せるのと同じ。
>>176 C FAQ 日本語 html 版だと、
1.11:
関数宣言についたexternは何を意味するのか。
のとこ?K&R2 にもどっちでも良いって書かれてるけど、わざわざ付ける理由が
何かと思い。
>>177 175 で戻り値の型が抜けてましたね。extern void hoge(void);
暗黙で extern が付けられるのは、関数内で現れた時と認識していました。
メンテナンスで人のソースをさわってて、マクロで関数宣言に extern を付けたり
外したりしているのとか見ると、余程 extern を付ける理由が合ったのかな?
って思った次第で。作成者に直接聞きたいのはヤマヤマなのですが、既に居ない
ので。
179 :
デフォルトの名無しさん :04/10/21 18:47:37
>>175 ヘッダファイルの中で
int a;
みたいなグローバル変数にextern がないと
リンクでエラーになる処理系があったりして
個人的な思想とは無関係に書くしかないことがある
あと C++ が絡むとさらに変な書き方を強いられたりする
なんで変数の話がでてくるの?
>>179 思想も何も、ヘッダファイルに定義書くほうが間違い。
182 :
デフォルトの名無しさん :04/10/21 19:03:43
変数に触れてるのは177だけのようだが、一体どんな流れが。
184 :
デフォルトの名無しさん :04/10/21 19:05:21
>>181 ほらな、リンカがらみんとこがわからん香具師がうようよ徘徊してるから・・・
185 :
デフォルトの名無しさん :04/10/21 19:06:52
>>183 「何にでも」は宗教かって話に対して参考を示したまで
技術的につっこめない板違いを相手にするのはこれが最後
宗教云々はその前のマクロ定義だろ? 板違い以前に話が見えてないのは自分ではないかな。
>>185 意味わかんねえ
ちゃんと説明してくれんか
>185=184=182か?
付けなくてもいい関数の場合と、そうでない変数の場合を 同列に挙げて話するのは混乱させるだけだと思うが。
>>189 floatをフロートト書く香具師は少ないってこったね。
逃げやがった
うちの会社だと extern 付ける派が圧倒的に多くて、手の届く範囲で付ける 理由を聞いて回ったことがあるんだけど、 「そう教わった。」 「はじめて見たソースがそうなっていた。」 「そういうもんだ。」 「必要だからです。」とリンクの話を始めるヤツ一人。 って回答だったかな。「そう教わった。」から遡ると「はじめて見たソースが」 で終わり。最近の子は VC++ から入るのが多いから、その影響かな。 変数に extern 付け外しするのと似た手法で、自分のソース内にある関数 だけ extern を外してるソースに遭遇してから更に理由が知りたくなった だけなんだけど。
>>191 いや、もしかして○○?とか聞いてくるくせに、それもない。
>>193 VC++でもつけねぇよ。
つーか、そんなキモイ会社はやめたほうがいいかも。
196 :
デフォルトの名無しさん :04/10/21 20:43:29
ようするにスコープ、リンケージを理解してないから、 extern 取り合えず書いて 全てを外部にしているんだろうさ。 そうすりゃリンクエラーでねーからなぁ。 C言語だとまかり通ってるが、C++言語でそれやってるならもうなんていうか その会社辞めれ。
197 :
デフォルトの名無しさん :04/10/21 21:17:17
汗かいてねー奴ら・・・
198 :
デフォルトの名無しさん :04/10/21 21:29:48
199 :
デフォルトの名無しさん :04/10/21 21:34:46
200 :
デフォルトの名無しさん :04/10/21 21:36:40
201 :
デフォルトの名無しさん :04/10/21 21:47:43
技術的につっこめないbogusに居場所はない
逃げた奴が何か言ってるぜwwwwwww
203 :
デフォルトの名無しさん :04/10/21 21:50:13
空定義w
sizeofの()みたいに、無くてもいいけどあってはいけないものでもないだろ。 とりあえず外に公開してるインタフェースという目印程度に付けてるけど。
納品条件として文法チェックツールをとおさなきゃいけなくて そのチェックツールがextren付けないと怒るってのはあったな 必死になってるのは学生か?
externつけてないとリンクできないだろ。 分割コンパイルしたことないのか?
>>206 いや、そうじゃなくて関数プロトタイプだから。
208 :
デフォルトの名無しさん :04/10/21 22:23:39
関数そのものでもいらないけど。
馬鹿ばっか
210 :
デフォルトの名無しさん :04/10/21 22:27:07
素タブとかドライバとか・・・かかないか。
211 :
デフォルトの名無しさん :04/10/21 22:31:42
バーカ
読んどけ
だから変数のexternじゃねぇって
215 :
デフォルトの名無しさん :04/10/21 23:02:25
C始めてから3日もすればわかることだなw
馬鹿ばっか
>>212 当時の記事を鵜呑みにしてマクロ作ってるやついそうだけど、
管理関数作れ、それができないのならせめて構造体使え
と言うところだな。
218 :
デフォルトの名無しさん :04/10/21 23:05:25
>>212 論評くらい他人の引用100%じゃなく自分でほざけアフォ低脳
ぶわぁぁか(プ
プロトタイプもきちんと書けない連中が吼えてもな〜(笑)
なんでおまえら必死なの?
222 :
デフォルトの名無しさん :04/10/21 23:47:03
関数の話だって言ってんのにわからねーやつがいるみたいだな
関数にexternつけられるって知らないからじゃないの?
>>223 レベルの低い人は書き込みしないほうがいいよ
こんなもんにレベルの高低が関係あるのか
227 :
デフォルトの名無しさん :04/10/22 00:09:16
>>223 つけられるけど、つける必要はない。
で、なんでつける必要のないものを付けるの?というのが元々の質問だろ。
228 :
デフォルトの名無しさん :04/10/22 00:11:32
>>183 変数に触れてなんかいないぞ。略せるものの例を挙げただけ。
これが最後とかいいつつ、ムキになって粘着してるのか…
232 :
デフォルトの名無しさん :04/10/22 00:16:17
>>229 は?
extern void hoge(void);とvoid hoge(void);は同じなんだが。
>>232 お前さー人の話きかないとかさー挙動不審とかさー覚えが悪いとかさー言われない?
粘着してる奴は何が言いたいんだよ 関数プロトタイプのextern付きと無しで何が違うんだ?
235 :
デフォルトの名無しさん :04/10/22 00:22:05
こんなにスレが伸びるほどの話題じゃ無いだろ?バカばっか
ぶぁあああああああああああああああああああああああああああああああああああああああああか
>>237 今日だけは、お前のほうがまともに見えるよ。
間違って覚えているのか、もしくはどうしても関数限定で考えられない
>>229 =
>>223 がひとりで粘着しているだけ?
>223は>222宛てね。 つまり、関数の話だってのに変数と勘違いしてそうな香具師は、「関数にextern……」と。 #わざわざ書くだけ無駄な気もするが。
>>228 例に挙げると触れるはどう区別されるんだ?
つか、しつこすぎ
>>239 ブラウザのログ壊れてレス番ズレてないか?
244 :
デフォルトの名無しさん :04/10/22 00:34:38
>>242 だから、Cで文法上書かなくても済む例をあげただけだっての。
変数につけるexternの話なんてしていない。
? 「変数の話の流れ」を主張した182へのレスとして、 「変数に触れているのは」って言ってるんだろ?extern云々への限定はせず。 文句付ける相手間違ってないか。
もうやめにしないか?
247 :
デフォルトの名無しさん :04/10/22 00:39:54
>>245 > extern云々への限定はせず。
ああそういうこと・・・すごく紛らわしいんだけど。
いや知らんよ、でもそうだろってだけ。
K&Rでも 「言語仕様的につける必要がなくても、読み手に「そうであること」を明確に主張するために付ける」 そういう用法が明記されている 自分だけしか読まないのであれば本当に必要がないが
なるほど、暴れてたのは177か
251 :
デフォルトの名無しさん :04/10/22 00:49:02
252 :
デフォルトの名無しさん :04/10/22 00:53:17
GCCで、 typedef struct { unsigned long a : 1; unsigned long b : 1; ] FOO; typedef struct { unsigned short a : 1; unsigned short b : 1; ] BAR; だと、sizeof(FOO)が4になって、sizeof(BAR)が2になるのはなぜ? ビットフィールドのところのlongかintかshortかcharかって、どのサイズごとにまとめるかを決めるっけ? そうではなくて、展開されたときの型じゃなかったっけ?
253 :
デフォルトの名無しさん :04/10/22 00:54:41
K&Rにも、「関数のプロトタイプ宣言の前のexternは、足の裏の飯粒みたいなものだ」と 書いてあるだろ。
普通なら176で終わってただろうに。
256 :
デフォルトの名無しさん :04/10/22 00:55:58
↑「取らないままでも死にはしないが、取らないときもちわるい」?
258 :
デフォルトの名無しさん :04/10/22 00:58:11
そうじゃなくって、どのサイズごとにまとめるかってのが、 shortって書くかlongって書くかで変わるのは言語仕様なの? っていうことです。 それともgccが勝手にそうしてるだけ?
何だか盛り上がってますね^^^^^^^
260 :
デフォルトの名無しさん :04/10/22 07:38:20
179だが結局、空の定義を知らんアフォが暴れて話もへったくれもなくなってるな よっぽど悔しかったようだが、ちなみに俺の発言は203までだよ
>>250 >179 が引っ込み付かなくなっただけだろ。
…お、再降臨乙。>190 読み返して精進しろ。
>>258 処理系依存かな。元々ビットフィールドもいい加減な仕様しかないし。
263 :
デフォルトの名無しさん :04/10/22 08:14:08
繰り返す。空の定義を知らんアフォ。
「空定義」「空の定義」でぐぐってもほとんどヒットしないんですけど。。
265 :
デフォルトの名無しさん :04/10/22 08:24:24
> 処理系依存かな。 こいつぼけ。規格票読めよ!
266 :
デフォルトの名無しさん :04/10/22 08:31:26
ヒットしようがしまいが関係ない。それは確実に存在し、みんな使っている。
じゃぁ特に知らなくてもいいということですね。
268 :
デフォルトの名無しさん :04/10/22 08:38:16
アフォ道に生きるならそれもよし。
嘘っぽいからどうでもいいや。
>ヘッダファイルの中で
>int a;
>みたいなグローバル変数にextern がないと
>リンクでエラーになる処理系があったりして
>>179 は上のようなことを書いているので、宣言と定義の違いをわかっていないと思われる。
271 :
デフォルトの名無しさん :04/10/22 09:24:47
いえ、関数と変数の違いがわかってないんでしょ
まだやってるー!?(ガビーン
>>179 ファイル"a.c"
-----------------------
int a;
int b(void);
int main(void)
{
a = 0;
return b();
}
ファイル"b.c"
-----------------------
int a;
int b(void)
{
return a;
}
-----------------------
規格では、この2つのファイルをコンパイルしてリンクできると思うけど、
これがリンクエラーになる処理系もあるの?
あと、空の定義って、仮定義(tentative definition)のこと?
The following statements show normal definitions and tentative definitions.
int i4; /* tentative definition, external linkage */
int i4; /* valid tentative definition */
えーと、煽りじゃないです。
昔の処理系だとエラーなんでしょうか…
#include int main(void) { int y; int n; printf("年を西暦で入力してください\n") scanf("%d",&y); n=y%4; if(n != 0) {printf("no leap");} else(n = 0) { n=y%100; if(n != 0) {printf("leap");} else { n=y%400; if(n = 0) {printf("leap");} else {printf("no leap"); } } } return(0);} うるう年を求めるつもりなんだがコンパイルエラーが出る。 ステートメントにセミコロンが無いとか。どういうことすか?
>>274 一行目から論外だ
聞くときはエラーメッセージ書けよ
エラーメッセージに行数も出てるだろ? その行で ; が抜けてるだろうが。 あと、#include だけの行は何の冗談?
「空定義」…それは確実に存在し、みんな使っている。 ググっても出てこないが、それでもみんな使っている。 「空定義」…「空定義」…「空定義」…
>>273 >規格では、この2つのファイルをコンパイルしてリンクできると思うけど、
ん?そうか?
>これがリンクエラーになる処理系もあるの?
Microsoft Visual Studio 6.0 C++
兄弟、落ち着こうぜ .cppじゃなく.cだ
…orz=3
282 :
デフォルトの名無しさん :04/10/22 18:53:01
>>278 聞き方憶えような、教えて君
今んとこ答える動機より
答えない動機の方が強いよ
オマエのそのざまが面白い
またキターヽ(´Д`;)ノ
/\ / \/\ |\ / \/\ /\ \ |\ / \/\ / \ | \ |\ / \/\ |\ / .| \ |\ / \ /\ / \ \/ | \ |\ / \/\ / \ | .| \ |\ / \/\ |\ /| | \|\ / \ | \ //\ \ / \ | |/ \ ウワァン! /\ > | \ /| ヽ(`Д´)ノ / \ / .| | \ //\ / ( ) \ \ / | | |/ \ /\ / < ヽミ3 \ /| / | | \ /| /\/ \ \ /| / | | \ //\/ \ \ /| / | | |/ \ \ / | / | | \ \ / | / .| | \ /| / .| | \ / | | .| .| | | |
285 :
デフォルトの名無しさん :04/10/22 19:31:09
外部リンケージエラー。
287 :
デフォルトの名無しさん :04/10/22 20:01:47
スレ違いもいいとこ
288 :
デフォルトの名無しさん :04/10/22 23:42:23
UNIX環境で開発したあるプログラムを、UNIX上でコンパイルして実行すると正常に動作するのですが windows上でコンパイルして動かすとなぜか途中で強制終了されてしまいます。 コンパイラはどちらもgccで、コンパイル自体はwindowsでもエラー無く通過します。 一応デバッグは試みたのですが、なにしろコンパイルは通ってしまうので原因がよくわかりません。 プログラムが停止するのは動的に割り当てたメモリのアドレスを引き渡す操作をするところなので、 そこでなんらかのエラーが発生しているような気もします。 原因、及び改善策としてはどのようなものが考えられるでしょうか。
>>288 一応疑ってみるポイント。
・エンディアンに依存したコード。
・解放したメモリの再利用。
・スタックオーバーフロー。
まぁなんだ、余裕があるなら関数一つずつ入力を変化させながらチェックするのがいいのだけれど。
#そのためのツールに、バウンドチェッカー(だっけ?)なんて言うのもあるが、それはそれで手間が掛かる。
290 :
デフォルトの名無しさん :04/10/23 00:04:30
任意の構造体を関数に渡してその型に関わらずメンバに値を格納していく、 といった関数をC言語で作りたいのですが、何かいい方法はないでしょうか? 簡単なものから作ろうと思い、メンバの型とサイズを一定にしたプログラムを 一応つくってみたのですが、 「エラー E2453 t_ka.cpp 19: 'void' 型のサイズは未知あるいはゼロ(関数 t_kansu(int,int,void *) )」 と出てしまいます。(Borland C++ 5.5) 回避方法はないでしょうか? #include <stdio.h> #include <string.h> #define KYOUTU_LEN 10 /* 構造体 */ typedef struct { char a[KYOUTU_LEN]; char b[KYOUTU_LEN]; char c[KYOUTU_LEN]; } KOUZOUTAI; /* 作りたい関数 */ void t_kansu(int kata_len, int memba_num, void * t_kouzou){ for(int i = 0; i < memba_num; i++) { if(i) {memcpy(t_kouzou + (i * KYOUTU_LEN) + 1,"あいう",KYOUTU_LEN); } else { memcpy(t_kouzou + i,"あいう",KYOUTU_LEN); } } } /* 呼び出し側 */ main(){ KOUZOUTAI kouzoutai; memset(&kouzoutai,NULL,sizeof(KOUZOUTAI)); /* 構造体の型(バイト数)、メンバ数、構造体の先頭アドレスを渡す */ t_kansu(sizeof(KOUZOUTAI),3,&kouzoutai); return 0; }
質問:テキストファイルの最初100文字を読み飛ばすにはどうしたら良いでしょうか? Perlで書いたプログラムを(処理速度の関係で)勉強しながらC言語へ書き換えています. fseekとかを色々といじっていますが中々うまくいきません. どの(標準)関数をどのように使えば良いか,お知恵を拝借できればと思います. よろしくお願いします. -- WindowsXP + SP2 VC++ 6
char*にキャストしてから+したまえ、希望のことが出来る。 まぁ、お勧めは出来ないが。
>>291 FILE * fp = fopen("テキストファイル", "r");
fseek(fp, 100, SEEK_SET);
もし仮に、2バイト文字も一文字として読み飛ばしたいならこれではダメ。
その場合、1バイトずつ読みながら2バイト文字か1バイト文字かを判断する必要がある。
また、改行コードの余計なお世話が問題になるようなら"r"ではなく"rb"で開いた方がいいかも知らん。
C言語でこういうプログラムを組みたいのですがどうしたらよいでしょうか? たとえば4.1 5.1 6.2 7.5・・・・と書かれたテキストファイルを読み込んで二つずつ足して 9.2 13.7・・・・ とテキストファイルに書き込むプログラムを作りたいです 初心者なのでファイルの読み込みとかよくわからないのでお教えください。一週間前から明解C言語で勉強しています がまだまださっぱりの超初心者ですが宜敷お願いいたします
なんだよ、このスレ、日本語だらけじゃん。全部C言語で記述してあるとか わくわくしながら開いたのに・・・ まあ、書いてあることは日本語だったとしてもさっぱりわやですわ。
>>294 背伸びをするのはその明解C言語というやつを読み終わってからでも遅くないんじゃないか?
>>294 /* エラー処理は割愛 */
double ta;
double tb;
FILE * fpIn = fopen("inFile", "r");
FILE * fpOut = fopen("outFile", "w");
while (fscanf(fpIn, "%lg%lg", & ta, & tb) == 2) {
fprintf(fpOut, "%g ", ta + tb);
}
fclose(fpIn);
fclose(fpOut);
>>290 void*じゃなくてKOUZOUTAI*を使う。
>>293 レスありがとうございますm(_ _)m
SEEK_SETというのがミソでしたか.
おっしゃるとおり,改行コードが悪さをしているようです.
もう少し色々と試してみたいと思います.
どうしようもなくなったら,またカキコするかと思いますがよろしくお願いします.
#include <stdio.h>
int main( int argc, char *argv[] ){
printf( "
>>295 以下、C言語で語ってます。
>>1000 の方閉じてくださいね♪
Cの文字列は複数行にまたがれないよ(はーと)
>>290 a, b, cの型のサイズやメンバの間のパディング(あるいは各
メンバの先頭からのオフセット)も知らせる必要がある。
そしてそんなもんが全部分かるってことは型がなんだか
わかってるんだから普通にコピーしたほうがいいと思われる。
任意の構造体なんかを相手にするのではなく
自分のコピーの仕方を自分が知ってる構造体を作った方がいいのでは。
>>293 改行コードを2文字(CR+LF)として,テキストモードで開いたらうまくいきました.
ありがとうございましたm(_ _)m
//Perlしか書けないおかげで変数の宣言を忘れてたりと,色々と苦労していますががんばりたいと思います.
//今まで3度Cに挫折_| ̄|○
>>301 /* これでは?
305 :
デフォルトの名無しさん :04/10/23 00:28:35
>>289 回答ありがとうございます。
実行のかなり最初の方でストップしてますのでオーバーフローでは無いような気がします。最初のメモリ割り当て時ですし。
ちなみに割り当てたメモリは解放してないので(おい)再利用でも無さそうですね、
エンディアンに依存したコードかどうかはよくわかりませんが…一般的な線形リストの構造体セルを割り当てる操作のところです。
発狂しそうなぐらい汚いプログラムなのでどこにエラーが潜んでるかわからないんですよね・・・
あぁアホの作ったプログラムのデバッグはいやだ
306 :
290 :04/10/23 00:36:20
>>292 >>298 >>303 アドバイスありがとうございます。
任意の構造体を関数に渡して・・・・というのも、そんなライブラリがあったら
便利だな、と思ったからなんです。
無理かもしれないけど、もう少し色々考えてやってみます。
>>290 きっとC++を勉強すると幸せになれるよ。
>>305 そうそう、環境の違いによる影響も考慮すること。
・まさかと思うが設定ファイルはあるか
・OSに依存したファイルを当てにしていないか
・漢字コードはどうか
これらは大抵、文字列が絡むので全ての文字列操作をチェックできれば大分見通しがよくなるかと。
ステップ実行とかしてる? 環境依存よりスタックかヒープ破壊してる確率のほうが高そうだけど。
前の環境がたまたまうまく動いていただけの予感
311 :
288 :04/10/23 01:31:11
>>308 漢字コードは大丈夫です。ヘッダなどの必要ファイルもあります。
OSに依存したファイルはどうでしょうか…
でも恐らくエラー部分では使っていないと思います。
上でも書いたように単なる線形リストの構造体セル追加操作なので。
312 :
288 :04/10/23 01:34:32
313 :
デフォルトの名無しさん :04/10/23 09:45:22
intも必要ないな 黙っていればintとされる わけだからint書く必要なし わりに書いてるこの矛盾
314 :
デフォルトの名無しさん :04/10/23 11:51:18
次のコードで動的確保した領域にscanf()から値を格納したいんですが デバッグすると/*6*/行目のscanf()での入力待ちが起こらずそのまま /*7*/行目に移行していまいます。バッファの指定を&p->category[0] としても変らずでした。原因はどこでしょうか? struct UNKO { int flag; char time[30]; char category[50]; int price; struct UNKO *next; }; /*1*/ printf("%s ", menu[0]); /*2*/ scanf("%d", &p->flag); /*3*/ printf("%s ", menu[1]); /*4*/ scanf("%s", p->time); /*5*/ printf("%s ", menu[2]); /*6*/ scanf("%s", p->category); /*7*/ printf("%s\n", menu[3]); /*8*/ scanf("%d", &p->price);
scanf()を捨てて、fgets()+sscanf()にしてみよう。
316 :
314 :04/10/23 11:59:12
6行目の指定子の後ろにスペース入れるとちゃんと働きました。 どなたか説明願います。 /*6*/ scanf("%s ", p->category);
scanf はスペースを読んでくれいなからでっす。
318 :
デフォルトの名無しさん :04/10/23 13:23:49
> 黙っていればintとされる いいえ、規格上それはないです。ちゃんと規格票読め ぼけ。 それがOKだったのは15年前のC89のときまで。
だってC99なんかまともに使われてないし・・・
>>319 部分的には前から結構使われているけれどね。
321 :
デフォルトの名無しさん :04/10/23 13:44:36
いや、ふつうC99.
C89つかおうと思ったらわざわざオプション指定しないといけないよ。 GCCだってデフォルトではGNU形式だし。
>>316 scanf()は、指定子が%sで終了した場合文字列以降に入力した空白(改行文字を含む)を読み飛ばさない。
そして、次のscanf()がその空白文字を処理しようとしてしまう。
%sの後に空白があれば、文字列以降に入力した空白を読み飛ばしてから終了するので次のscanf()に影響しない。
325 :
デフォルトの名無しさん :04/10/23 14:49:37
数値を文字列に変えるにはどうしたらよいのでしょうか?atofの逆バージョンを探しているのですが。
326 :
デフォルトの名無しさん :04/10/23 14:52:00
sprintf()
327 :
デフォルトの名無しさん :04/10/23 14:52:56
ふつうC99
C99使おうと思ってもオプション指定必要だけどね。
329 :
デフォルトの名無しさん :04/10/23 15:57:23
gccなんかつかうなよ。ちゃんとC99フル対応のコンパイラー使え。
Ruby使え!Ruby最高!Rubyのおかげでガンが治った!Ruby!!!!!!!!!!
お薦めのC99コンパイラは?
>>329 あのね、GCCだってオプションで-std=c99とすればC99としてコンパイルできる。
ちゃんと対応しているじゃないか。
デフォルトが独自形式なんだ。
VC++だってそうじゃないか。
hp も Sun も、C99 対応済んでないんじゃなかったか?
C99対応していないコンパイラなんて、かなり古いバージョンのコンパイラだけだよね。 メジャーなものはほとんど対応済み。
336 :
デフォルトの名無しさん :04/10/23 16:52:13
「フル対応」はしていないだけ。ほぼ99%は対応している > メイジャーなの > あのね、GCCだってオプションで-std=c99とすればC99としてコンパイルできる。 これも同様で、「ほぼ対応」なだけで完全に全部満たしているわけではない。
337 :
デフォルトの名無しさん :04/10/23 16:52:46
> 規格書の事? そんなものはありません。
要はISO/IEC 9899:1999のことだろ?
339 :
デフォルトの名無しさん :04/10/23 17:13:20
あるファイルを、 fopen(filename,"rb"); バイナリーモードで開いてます。 そして、readBuffer というところに, fgetc でとってきた値を、どんどん入れ込みました。 そして、先頭から、75 75 69 64 とかいうコードが出てきたところのポインタを 調べたいのですが、いままで、テキストモードでしかファイルを開いたことが無いので strstr(文字列の検索)でしか使ったことがないのですが、 バイナリコードの検索方法は、どうすればいいのでしょうか?
>>339 ・readBufferの末尾(詰め込んだ直後)に'\0'を入れておいて、strstr(readBuffer, "uuid");
・char * p = memchr(readBuffer, 0x75, 詰め込んだ長さ)してからmemcmp(p + 1, "uid", 3);
・その他
342 :
デフォルトの名無しさん :04/10/23 18:30:01
>339 if( readBuffer[0] == 0x75 && readBuffer[1] == 0x75 && readBuffer[2] == 0x69 && readBUffer[3] == 0x64 ) retcd = 0; elseif( readBuffer[1] == 0x75 && readBuffer[2] == 0x75 && readBuffer[3] == 0x69 && readBUffer[4] == 0x64 ) retc = 1; elseif(readBuffer[2] == 0x75 && readBuffer[3] == 0x75 && readBuffer[4] == 0x69 && readBUffer[5] == 0x64 ) retc = 2; : : つかれた
343 :
デフォルトの名無しさん :04/10/23 19:05:51
K&Rの本に出てくるんですが、式の中での (*++argv)[0] *++argv[0] の読み方がよく分かりません。よろしくお願いします。
344 :
デフォルトの名無しさん :04/10/23 19:09:41
>>343 (*++argv)[0]
||
(*(++argv))[0]
*++argv[0]
||
*++(argv[0])
||
*(++(argv[0]))
>>340 readBufferの中に'\0'があり、その後ろに"uuid"があると
一つ目の方法では発見できない。
346 :
339 :04/10/23 20:26:12
>345 ありがとうございます。 今いろいろと格闘中です。 あと2,3時間考えてまとめてみます。
あーそうかい。>340は参考にならなかったと。
348 :
346 :04/10/23 21:20:22
>347 書き方がまずくてすみませんでした。 大変参考になります。 ただ、別のくだらないことでつまづいてるので、そこをまとめてから 結果を出したいと思って書いただけです。
すいません。質問です。 アンパンマンのあんってつぶあんなんですか? こしあんなんですか? ご教授頂ければ幸いです。
>>350 関数ポインタを使ったら解決しました。
ありがとうございました。
353 :
デフォルトの名無しさん :04/10/23 21:48:52
bool isTsubu(); { bool (*p)() = &isTsubu; (*p)(); }
354 :
デフォルトの名無しさん :04/10/23 22:03:48
C言語でプログラムしたいんですけども、 ドメイン名からIPアドレスを得るのに gethostbyName()関数を使うとゆうことは わかってるんでけど、 DNSサーバーをいろいろ変更して 取得をしたんです。 nslookupでゆうところの、 【server ○○○.co.jp】 に該当するプログラムをC言語では どのようにすればいいのでしょうか? BINDのライブラリルーチンを利用しようと 思って説明書をよんでも さっぱりわかりません。 わかる方、助言お願いします。
355 :
22 :04/10/23 22:09:48
>>355 だけどそのために関数を書くのもちょっと… と思ってしまったり。
358 :
デフォルトの名無しさん :04/10/23 22:13:30
いいえ、それは誤りです。 括弧のうちがわに空白があいています。
361 :
デフォルトの名無しさん :04/10/23 23:18:34
getenv()で得た値を弄くったりしても大丈夫ですか? #include <stdlib.h> void aaa(char * bbb) { if (!(bbb = getenv("TEST")) *bbb = 'c'; return; } main() { char * ccc; aaa(ccc); *ccc = 'b'; }
>>361 void aaa(char ** bbb) {
if (!(*bbb = getenv("TEST")) **bbb = 'c'; return;
}
main() {
char * ccc;
aaa(&ccc);
*ccc = 'b';
}
gcc -I /home hoge.c と書くべきか、 gcc -I/home hoge.c と書くべきか、 どっちなんでしょう。
後者
368 :
デフォルトの名無しさん :04/10/24 00:47:40
369 :
暴妖 :04/10/24 00:50:30
少しずつC99izeしているところだ。焦るな。
370 :
デフォルトの名無しさん :04/10/24 00:58:23
371 :
デフォルトの名無しさん :04/10/24 00:59:59
こういういいかげんなやつほど粗製濫造で本をだしまくるんだよなあ。 困ったもんだ。それを読むボケがいるからだが。
372 :
デフォルトの名無しさん :04/10/24 01:01:12
373 :
デフォルトの名無しさん :04/10/24 01:05:03
3.3.5なら出ない(-Wall -ansi(or -std=c99) -pedanticつきで)。
374 :
デフォルトの名無しさん :04/10/24 01:09:51
375 :
デフォルトの名無しさん :04/10/24 01:11:57
> 3.3.5なら出ない そんな古いヴァージョン使うな ぼけ
>>339 unsigned int readBuffer = 0;
unsigned char code = 0;
int counter;
fp = fopen(filename,"rb");
for (counter = 0; counter < 4; counter++) {
fread(code, 1, 1, fp);
readBuffer |= (code << 24 - (8 * counter));
}
//75 75 69 64 を見つけるまで続ける。
while (readBuffer != 0x4b4b4540) {
fread(code, 1, 1, fp);
readBuffer <<= 8;
readBuffer |= code;
}
fread(code, 1, 1, fp);
これで操作したい1バイトの情報が code に格納されてるはず。バイナリファイル
を扱うなら fread() とビット演算を覚えた方がいいと思う。それで1バイトずつ
の操作ならできるようになるから。1ビット単位で扱う場合は
unsigned int readBuffer[2] = { 0, 0};
int bit_count[2] = { 0, 0};
といったような工夫も必要になってくるけど。あくまで一例だけどね。
* fread(code, 1 , 1, fp); //fpのファイルから1バイト×1要素をcodeに格能
ハァ?
378 :
デフォルトの名無しさん :04/10/24 01:19:40
>
http://www.bohyoh.com/CandCPP/FAQ/FAQ00051.html > 二つの宣言をまとめて、以下のように一度に宣言することもできます。
> struct node {
> char name[20]; /* 名前 */
> struct node *next; /* 後続ノードへのポインタ */
> } Node;
こりゃどうみても間違いだろう! ぼけ
typedefが抜けている。これじゃあ最後のNodeは変数名になってしまうぞ。
あたまわるいなー > 柴田
typo
380 :
デフォルトの名無しさん :04/10/24 01:26:29
typodef !
381 :
デフォルトの名無しさん :04/10/24 01:27:10
そんな私は日下部先生の本を読んで勉強しました。 やはり信頼できる内容で選ばないと > Cの本
私は猫でも〜で勉強しました。 なので、自分の知識に所々不安が残ります。
すぐ人のせいにするw
385 :
デフォルトの名無しさん :04/10/24 01:39:48
やはり「C言語」なんて書いてある本はだめだな。
>>376 size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
^^^^^^^^^^^^^
>>386 言いたいことがあるならはっきりと言え。
言わなきゃ若蘭の香wwwwwwwwwwwwwwwww
ごめんw フツーに間違えたw fread(); の行は全て fread(&code, 1, 1, fp); に変更ってことでw
サンプル見てて思ったんですが、階乗等、再帰を使わずとも簡単に書ける関数を再帰を使って書く利点ってあるんですか?
392 :
デフォルトの名無しさん :04/10/24 06:39:34
ありません。
393 :
デフォルトの名無しさん :04/10/24 07:15:07
コードが短くなる利点はあります。
394 :
デフォルトの名無しさん :04/10/24 10:34:55
>>391 再帰の説明はとりあえずテールリカージョンから始める
Hello, world! と表示させるのにわざわざ cc がいらないのと同じ
cc?
Carbon Copy
Cubic Centimeter
Carbon Copy ?
399 :
デフォルトの名無しさん :04/10/24 13:54:30
Carbon Copy !
400 :
デフォルトの名無しさん :04/10/24 14:10:19
柴田だめすぎ
401 :
デフォルトの名無しさん :04/10/24 14:47:06
> そんな私は日下部先生の本を読んで勉強しました。 『作ってわかるCプログラミング』 技術評論社 だな? そんなにいい本か? 近所の書店では見かけないのだが。 (秋葉原の書店で見かけたときは表紙しか見なかったし...)
Card Capture
403 :
デフォルトの名無しさん :04/10/24 15:46:10
全ての疑問が解けるまで
405 :
デフォルトの名無しさん :04/10/24 16:42:37
なんかエッチだな... > 最後まで
406 :
デフォルトの名無しさん :04/10/24 16:47:13
いいなあ > 女子学生getしまくり
407 :
デフォルトの名無しさん :04/10/24 17:23:14
C言語のリファレンス本で、本屋にやたらぶあついのがあったんだけど 買ったほうがいいのかな?
厚ければいいのか? 国語辞典はともかく、広辞苑を使う必要がそんなにあるか?
409 :
デフォルトの名無しさん :04/10/24 17:35:47
>>408 言わんとすることが解りました。買わないでおくことにします。レスdクスです
410 :
デフォルトの名無しさん :04/10/24 18:51:58
ヴェガ!! だなあ プロフェッショノー気取っても 分からないことも数多く出るんだよ だからみんな参考書を片手にガタガタ打ってるんだよ 習得の際にも役に立つし、 仕事でふと度忘れしたときにも役に立つ だから分厚い本である必要はないが 詳細すぎるほど詳細に記した本があるなら それを迷わず買わ「ねばならない」 全ての関数を詳細に説明した、網羅したものが望ましい
411 :
デフォルトの名無しさん :04/10/24 18:52:33
広辞苑は第3版は昼寝にちょうどいいが、 第4版は厚さがだめ、だとvoid先生がおっしゃっていました。
412 :
デフォルトの名無しさん :04/10/24 18:54:39
> 分からないことも数多く出るんだよ おれ、出てこないよ。
413 :
デフォルトの名無しさん :04/10/24 18:55:07
> 全ての関数を詳細に説明した、網羅したものが望ましい man読め > ぼけ
414 :
デフォルトの名無しさん :04/10/24 18:55:30
もしくは /usr/src/libc
415 :
デフォルトの名無しさん :04/10/24 18:55:58
関数が全部かいてある本がほしい、とかいうのはぼけすぎだ。
416 :
デフォルトの名無しさん :04/10/24 18:56:06
. ,,-" ,,‐" ヽ、;:-1''´ ヽ /:::::: ,,-" i ,," l , `、ゝ、:::: . ,,-" . /,,'' l / ヾ ` . ,,- ヽ''__ ::ヽ l,/ '、 ,." ,,゙ヽ, ミ、、:::} l _,,----ミ '、 ,.' ,' i ヽミ'.、、 /.l _,,,、-;=;;==‐,z '、 ,′ ,' l ヽ`='ゞ、ヽー'イ''~ヽー`='--イ ' . ' l! l // l! ヽ、 .' 参 ・ 考 ・ 書 ! ,′ l! ', / ゙i ヽ、 ' . ; l! '、 / ゙i /:. i それが俺たちピログラモヮーが共有した . ; .l! '、 / ゙i /::: l . i. l! 'y ゙i /::: i ただひとつの正義のはず ', ', く __ _ ゙i i:::. i゙ '、 ', ヽ ゙i i::: / . ', '、 ヽ-‐‐‐‐---一 . ', '、`ー--- '、 >, .,- ゙ /;;;;;'、 .,-" , ';;;;;;;;;;;;;;'、 ,-´:::
417 :
デフォルトの名無しさん :04/10/24 18:56:43
> ひとつの正義のはず 社長だもんね
418 :
デフォルトの名無しさん :04/10/24 18:56:47
そりゃ大したことをしないダボはわからんことなぞ出てこん
419 :
デフォルトの名無しさん :04/10/24 18:57:57
っていうかCみたいに言語仕様の小さいものぐらいは数日で把握しきれる。 それさえも「ときどきわからないことがでてくる」ようなやつが ぷろふぇっしょなるを自称するとは、まぬけすぎー
│ │ │ │ │ _ │ /  ̄  ̄ \ │ /、 ヽ J |・ |―-、 | q -´ 二 ヽ | ノ_ ー | | \. ̄` | / O===== | / | / / |
421 :
デフォルトの名無しさん :04/10/24 19:13:56
ぬゑぽ!!!
全ての関数ですか。
423 :
デフォルトの名無しさん :04/10/24 19:42:11
さて、またあぼ〜んいくか 面積浪費のクソレス野郎氏ね
424 :
デフォルトの名無しさん :04/10/24 21:54:01
明示的にポインタ変数にnullを代入したいときってどうするのが 一番いいんですか?
425 :
デフォルトの名無しさん :04/10/24 21:57:03
galtu = NULL;
426 :
デフォルトの名無しさん :04/10/24 22:07:18
> 明示的に そんな日本語はない。
へぇw
明示〜はっきり分かるように示すこと。 明示的〜はっきり分かるように示すこと、みたいな (的)
429 :
デフォルトの名無しさん :04/10/24 22:12:18
stdlib.hをインクルードしないとNULLが使えないみたいですが、 #define NULL 0 とかしてもいいですか?
いいよ。
ありがとうございます。
w
良いわけねえだろw
C++ ならいいんでは? C ではだめなんだっけ。
"明示的に" の検索結果のうち 日本語のページ 約 133,000 件中 1 - 50 件目 (0.19 秒) 存在しない日本語にしちゃあ、誤用が多いようで。
436 :
デフォルトの名無しさん :04/10/24 22:44:18
数だけかぞえればいいのだったら、どんな誤用も正しいことになるぞ ぼけ
「明示的」はよく使われる。 たぶん、どこぞの誰かが和訳のときに用いたのが広まったんだろ。
>>434 いいや、どっちもダメではない。
ただ、わざわざdefineするほどのものでもない。
p=0; とか書いたって全然問題ないだろ?
440 :
デフォルトの名無しさん :04/10/24 23:27:57
いえ。NULLってかきなさい。
#ifdef __cplusplus #define NULL 0 #else #define NULL (void*)0 #endif
442 :
デフォルトの名無しさん :04/10/25 00:14:43
(void*)は余分です
とりあえずVC++のNULLはこうなってるな /* Define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif
>>437 言葉ってのはそもそも誰かが最初に使わなきゃ存在しないものなんだから、
そりゃぁ誰かが使ったんだろうな。
〜〜的にってのは便利だから(俺的にーとか)同地多発的に発生したんだろ。
そういう新しい言葉を受け入れられなくなったらもうおっさんかもな。
gccだと0でも文句言われないな lintもおっけー
446 :
デフォルトの名無しさん :04/10/25 00:29:46
> 言葉ってのはそもそも誰かが最初に使わなきゃ存在しないものなんだから いいわけにすぎない。 > gccだと0でも文句言われないな gccにかぎらずCはすべてそう。
必至だな
誤用にも関わらず広がってしまい、いかにも正しい言葉であるかのように 振る舞っている言葉はどうするんですか?
>>448 そのうち消えるか、正しい(藁)日本語として認知されるようになるでしょ。
今正しいと思って使ってる言葉だってもともとはそういう風に進化して来たんだから。
450 :
デフォルトの名無しさん :04/10/25 00:56:21
> 日本語として認知されるようになるでしょ なりません。
451 :
デフォルトの名無しさん :04/10/25 00:57:55
正しい日本語と正しくない日本語の区別は誰が決めてるんですか?>おっさん
452 :
デフォルトの名無しさん :04/10/25 01:08:36
Linux上でgccを使用しています。 makeした時間を実行ファイルに埋め込みたいのですが、 makefileを上手く使えば可能でしょうか? ソフトのバージョン代わりにmakeした時間をprintfしたいと思っています。
makeじゃないけどコンパイルなら__DATE__, __TIME__
454 :
デフォルトの名無しさん :04/10/25 01:14:08
>>451 少なくともお前には決める資格なし(プゲラ
なんか納豆臭いね
456 :
デフォルトの名無しさん :04/10/25 01:30:59
> makefileを上手く使えば可能でしょうか いいえ。むしろMakefileにしろ それにMakeした時刻なんかより static sccsid = "$Id"; はかならずやっとけ
このスレもレベル低下が激しい。そんなに煽り煽られが好きならこの板にいなきゃいいのに。
458 :
デフォルトの名無しさん :04/10/25 01:47:18
つまり457は、自分の理解できない内容は読み飛ばしてるから、そうなる ;-)
/\ / \/\ |\ / \/\ /\ \ |\ / \/\ / \ | \ |\ / \/\ |\ / .| \ |\ / \ /\ / \ \/ | \ |\ / \/\ / \ | .| \ |\ / \/\ |\ /| | \|\ / \ | \ //\ \ / \ | |/ \ ウワァン! /\ > | \ /| ヽ(`Д´)ノ / \ / .| | \ //\ / ( ) \ \ / | | |/ \ /\ / < ヽミ3 \ /| / | | \ /| /\/ \ \ /| / | | \ //\/ \ \ /| / | | |/ \ \ / | / | | \ \ / | / .| | \ /| / .| | \ / | | .| .| | | |
まあ少なくとも「確信犯」「役不足」でバカ大学生が正しい用法正しい用法と騒ぎだしたのは 「テレビで紹介されてから」だな。 もともとは自分も知らなかった で、マスコミに踊らされてさも「昔から知っていたかのように」振舞った オメー今までそんなこと一言も言ってねえじゃん、程度のもの
確信犯の誤用ってどんなのだっけ
わかっててやること
「芸者」もそうだよな 昔は芸者と言えば「武芸」に優れたものも呼び名であった それがいつしか踊り子を呼ぶようになった
お前らが馬鹿だということはよく分かった
465 :
デフォルトの名無しさん :04/10/25 02:21:32
123456789
ニポンゴ難しいあるよーホエホエ
467 :
デフォルトの名無しさん :04/10/25 02:31:26
> まあ少なくとも「確信犯」「役不足」でバカ大学生が正しい用法正しい用法と騒ぎだしたのは じゃあ「確信犯」のもともとの意味言えるか? ;) (「役不足」は簡単すぎ。反対なだけなので)
>>461 確信犯
×わざとやること、わかっててやること
○(政治的・宗教的な)信念に基づいて自分は正しいことしていると信じて行う犯罪
いちいちバカ相手にしてスレを脱線させてるヤシもバカ
へ
471 :
デフォルトの名無しさん :04/10/25 02:47:33
ミ
確信犯は 法律に触れるのは理解するが自らの信念に基づいて 正しいと思うことをやるってことかとおもった 誤用でもあり誤用でもないような
474 :
デフォルトの名無しさん :04/10/25 03:12:13
ようは「法律のほうがまちがってる」という信念でやってる場合は、 通常の刑では効果ないのよね。
もう、おまいら良いから。 世間に関心がある振りなんてしなくて良いから、 C言語だけ語っておけ。
>>473 なんだそのスペースは。もったいないことすんな
>>468 それじゃ違いが分からないんですけど・・・
はいはい
法に触れるとわかっているが、信念に基づいて正しいと信じてわざと行う犯罪。 は、○で且つ×。
誤用とか確信犯とか正しい日本語とか、どうでもいいからヤメれ。
日本語なら俺に聞け! Part 93
483 :
デフォルトの名無しさん :04/10/25 08:13:19
ある関数で再帰をしている時、その関数内で値の帰るreturn(つまりvoidではない)された場合は、 今まで再帰でたまっていたスタックは、すべて自動的に、解放されるのでしょうか?
>>483 再帰の最下層でreturnしたからって最初に再帰を呼び出した箇所に戻るわけじゃないんだから、
順次さかのぼってPOPされていくと思われ。
gotoなんか使ってると別だけど
いや解放されるのは一個だけ
再帰は、全く同内容の、別の関数を呼んでいると思えばいい func→func→func→func→func→func→ なら func0→func1→func2→func3→func4→func5→
487 :
デフォルトの名無しさん :04/10/25 08:37:50
じゃあ中にはいっているstaticな変数の立場はどうなる?
488 :
デフォルトの名無しさん :04/10/25 08:38:34
> 最初に再帰を呼び出した箇所に 「再起を呼び出し」が意味不明
489 :
デフォルトの名無しさん :04/10/25 08:39:50
> その関数内で値の帰るreturn(つまりvoidではない)された 値を返さない関数はスタックを消費しないとでも思ってるのか? このぼけは
490 :
デフォルトの名無しさん :04/10/25 09:06:22
>>484-489 回答ありがとうございました。二分探索木で探索し終わった後も、わざわざ戻っている訳なんですね。
なんか効率がいいのか悪いのか、よくわからないなあ。
>>490 処理効率を求めて再帰を使うんじゃない。
アルゴリズムをシンプルに実装するために再帰を使うんだ。
最近のコンパイラなら、末尾再起は最適化されてループと変わらないと思う。
494 :
452 :04/10/25 10:12:03
>>453 有り難うございます。
やりたい事はできました。
>>456 すいません、もう少し詳しく教えて貰えませんか?
sccsidをprintfすると「$Id」がそのまま出力されてしまいます。
>>494 >456はSCCSなんて古式床しき代物でリビジョン管理しているだけだから無視していいよ。
#他にも、RCS/CVSなら"$Id$"というようにリビジョン管理用のキーワードがある。
#これらを埋め込んでおいてリビジョン管理するとそのキーワードがリビジョン情報になるわけだね。
497 :
452 :04/10/25 10:25:00
>>495 理解できました。
丁寧なアドバイス有り難うございました。
>>456 rcsやsccsの埋め込みキーワードなんか何の役にも立たない。
それどころかコミットするたびにファイルが変更されるから
エディタで読み直しが必要になったり、勝手に再コンパイルしたりと
鬱陶しいだけ。その見返りがあまりになさすぎ。
単一ファイルで完結するアプリならまーいいかもしれんけど。
>>498 CVS使ったことある?
#いや、なんとなく知らないんだろうなぁと思ってね。
>>498 そんな低レベルな使い方での不満でバージョンコントロールシステムを
否定する人も珍しいな。ちゃんとしたツールを使おうね。
お前等いいかげんにmakeのスレにでも逝け
502 :
デフォルトの名無しさん :04/10/25 15:54:29
int hoge(int a) { // ... if (a == 0) { return 1; } // ... if (a == 2) { return 1; } // ... return 2; } というのと int hoge(int a) { int r = 1; do { // ... if (a == 0) { break; } // ... if (a == 2) { break; } // ... r = 2; } while (0); return r; } というのとどっちがいいですか?
>>502 int hoge(int a) {
switch (a) {
case 0:
case 1:
case 2:
// ...
return 1;
break;
default:
return 2;
break;
}
}
あ、すみません途中から直接returnで戻るのと breakで最後に抜けるのとどっちがいいかなと思いまして。 returnのかわりにgotoで最後付近のラベルに行くのはまずいですか?
>>502 ifの羅列は事故の元。
最低でもelse if、ちゃんと書きたかったら>503を見習え。
お前のレベルでgotoは使うな。禁じ手にしておけ。
変にフラグ変数を持とうとするな。ローカル変数でも増えれば管理コストが増える。
>>504 俺は途中でreturnで抜ける。
抜ける箇所が複数あって、それぞれで同じ処理をしなければ
ならないときは、関数の最後にまとめるけど。
俺は引数チェックのときはその場で抜ける。(なんかこの書き方には名前が付いてた気がするが・・・。) 関数の本体では最後まで粘る。 分岐中にreturnしなきゃならないようなときはその部分を別関数に分ける。
509 :
デフォルトの名無しさん :04/10/25 17:22:47
K&R C演習8-4の「アンサー・ブック」の解答に疑問を感じています。 書き込みファイルの処理において、 fp->cntとfp->ptrの値の変更は必要ないのでしょうか。 このままではwrite()で書き出した古いバッファの中身を、 新しい位置でバッファがいっぱいになったときに再び書き出してしまうのでは?
レイトレーシング法使ったオーロラって描くの難しい? これやろうと今必死なんだがよくワカンネ・・・〇| ̄|_
即レスthxです。 できればVisual C++で作りたいんですけど、それじゃ無理かな? お答えいただいたのに申し訳ないです
色付き透過ポリゴンを適当に並べてレンダリングすればいいだけじゃないの?
>>499 >>500 脊髄反射レス乙
俺は埋め込みキーワードが使えないっていってるだけ
cvsは普段から使ってる
つかさ、cvs使ってんなら尚更埋め込みなんか無意味だろ?
お前等いいかげんにmakeのスレにでも逝け
>>515 ふーん。
>>510 別にコンパイラは何でもいいでしょ。
>>509 そう書かれてもアンサーブック成るものを知らないからなんとも言えない。
>>502 迷うくらいならgoto使うな。自信があるなら止めはしない。
518 :
デフォルトの名無しさん :04/10/25 20:43:48
>>504 発想が goto であるかぎり break や return に偽装しても全く同じこと
ジーオーティーオーというスペルに過敏反応するだけな先輩は見習わない方がいい
【 な ん で ル ー プ が き れ い に ま と ま ら な い の か 】
自分に厳しく問いただせ
その場しのぎのいい加減な答えに騙されるな
ちゃんと数学的に考えろ
> 【 な ん で ル ー プ が き れ い に ま と ま ら な い の か 】 どこからループが? 頭ん中でループしてますか?
breakから for(;;){ for(;;){ ... goto LOOP_END; } } LOOP_END: こういう場合を想像したんじゃない
脳内妄想して興奮して空白入れまくりか、オメデテーナ
522 :
デフォルトの名無しさん :04/10/25 21:07:02
524 :
デフォルトの名無しさん :04/10/25 21:14:37
もともと goto 回避って言いたかっただけだろ? while(0) みたいなコードを何の動機もなく書くキチガイは相手にしてないよ
相手にしないのならレスするなw
526 :
デフォルトの名無しさん :04/10/25 21:18:55
>>525 キチガイと断定してないだろ
オチツケヨオメー をそのまま返す
>>524 do {...;} while (0);
はbreakの受け皿として割りと見るコードだけどそれをきちがいと?
読めてないなら書かなくていいよ。
528 :
デフォルトの名無しさん :04/10/25 21:20:56
……何この人。一人下げずに必死になっちゃって。
530 :
デフォルトの名無しさん :04/10/25 21:28:24
unsigned char hoge[4]に unsigned int を代入したのですが、 1発で代入する方法はありますか? ビット演算して1バイト毎に代入する方法しか思い浮かばなくて。 hoge[0] = unsigned intの7-0ビット hoge[1] = unsigned intの15-8ビット hoge[2] = unsigned intの23-16ビット hoge[3] = unsigned intの31-24ビット
強引な方法でよければ unsigned char hoge[4]; unsigned int p=0x12345678; memcpy(hoge, &p, sizeof(unsigned char)*4); エンディアンはシラネ
>>530 リトルエンディアンなら*(unsigned int *)hoge = 0x12345678;
533 :
デフォルトの名無しさん :04/10/25 21:34:30
>>529 たまたま虫の居所が悪かったが
最初のレスに無礼があれば謝らない限り方向性は確定
535 :
デフォルトの名無しさん :04/10/25 21:41:02
ftpのコマンドラインをcプログラムの中に書くことできるんですか?
>>530 上記の補足だけど、union使う方法もある。
>>535 system("ftp");
ってこと?
だれか>533を説明してくれ。
*( (unsigned int*)&hoge[0] ) = *((char*)&data[3]) | *((char*)&data[2])<<8 | *((char*)&data[1])<<16) | *((char*)&data[0]<<24); ビッグエンディアンならこうできないかな。やった事無いし、わかんないけど。
540 :
530 :04/10/25 22:05:59
>>532 出来ました!!
有り難うございます。
ポインタって奥が深いですね。
ハード屋な私にはある意味ヒエログラフです。
541 :
デフォルトの名無しさん :04/10/25 22:18:16
>>540 アドレスバスに出力する情報とバウンダリが何か?
543 :
デフォルトの名無しさん :04/10/25 22:26:30
2chにはageを毛嫌いする人種がいるからな
>>543 嫌われてるのはお前自身だろう。ageのせいにしてはいけない。
int xが1なら0を0なら1をxに代入するプログラムで x = 1 - x; 以外に効率のいい方法ってありますか
547 :
デフォルトの名無しさん :04/10/25 22:30:25
2進数の入れ方について int a = 123; とすると、 aに10進数の123を入れたことになります。 では、 2進数の01010101 をaに入れるには、どうすればよいのでしょうか? (何か、特別な関数があるのでしょうか???)
548 :
デフォルトの名無しさん :04/10/25 22:31:52
>>547 #include <stdlib.h>
int a=strtol("01010101",NULL,2);
>>547 普通に
int a = 01010101
でいいんじゃない?
コンパイルエラーにならなかっから、これでいいと思うけど・・・
>>549 それじゃ8進数の1010101が入る。
あとセミコロンを忘れるな。
551 :
デフォルトの名無しさん :04/10/25 22:37:19
頭に0がつくから。
545の方法初めて知った。。。 x=(x)? 0 : 1;か boolなら x=!x; 使ってる。
554 :
>>549 :04/10/25 22:39:14
>>552 頭に0がつく・・・8進数
頭が0以外・・・10進数
なのか・・・
うーん、ためになる。
>>545 x = x ^ 1;
のほうが速いかも。
557 :
>>547 :04/10/25 22:40:47
558 :
デフォルトの名無しさん :04/10/25 22:41:06
>>554 頭に0がつく・・・8進数
頭に0xがつく・・・16進数
それ以外・・・10進数
そういえば八進数なんてパーミッションの指定以外で使ったことないな
561 :
デフォルトの名無しさん :04/10/25 22:48:37
頭に0で八進数ってのは完全に設計ミスだよな。 桁そろえも満足に出来やしない。
せめて0oとか・・・
>>564 それは俺もいつも思う。
0o = 8進数
0x =16進数
0b = 2進数
にして欲しかった
桁あわせ??そんな事する必要あるのかな 0010 じゃだめなのだろうか
だめだろ
>>569 お前脊髄反射でレスしてるだろ
少しはスレ読め
pdpがオクタルマシンだったからな。 普通にメモリダンプするとアドレスとか全部8進ででてくるんだと。 000017 100000 077777 177777 先頭の0/1がそのまま符合ビットになって解りやす。
Cでは10進数で0を表す事ができない。 ……8進数になる。
>>570 見てわからないんだがな
教えてくれないか?
10進数で桁あわせするって事か 8進数で桁あわせたいのかと思った なんで0であわせたいんだろうコボラー? +でも頭につければいいのにー
575 :
デフォルトの名無しさん :04/10/25 23:21:06
>>572 その通り
integer-constant ::= decimal-constant integer-suffixopt
| octal-constant integer-suffixopt
| hexadecimal-constant integer-suffixopt
decimal-constant ::= nonzero-digit | decimal-constant digit
octal-constant ::= '0' | octal-constant octal-digit
nonzero-digit ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
octal-digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'
猿なのでBNFなんて読めません
578 :
デフォルトの名無しさん :04/10/25 23:35:25
8進数の1010が入っているint変数abcについて、 これを10進数にかえる方法ってありますか? int a = 01010; int b = int変数aを10進数に変換して入れたい。
>>578 変換は必要ありません。
a はすでに 10 進数になっています。
なってねえよ
int aは8進数でもあり、10進数でもあり、 取り出すときに好きにしろってこった
>>581 いや、まじめに答えたんですけど。
こういう言い方のほうが分かりやすいかなぁと思って。
>>584 自分のレベルに人をあわせるな
お前のような奴がC初心者本出すと、ケツ拭く紙にも使えない本になるんだよな
>>585 いやヒドイ言い方だなぁ。
質問者のレベルに合わせただけじゃないか。
>>578 この場合の「01010」は、ある数値(この場合10進数の520)の表現方法の
1つに過ぎません。よって、int a = 01010;と書いたことでaに代入されるのは
10進法で言う520であり8進数で言う1010であって、aには実際に進数とその
表現をセットで格納しているわけではないのです。
588 :
デフォルトの名無しさん :04/10/26 00:03:58
表記が違うだけで数値は等しいので変換の必要はなし。
>>586 最初から正しい事を書けば二度手間じゃないだろ?
わざと正しくない事を教えて何の意味がある?
590 :
デフォルトの名無しさん :04/10/26 00:06:16
なるぽ
591 :
>>578 :04/10/26 00:06:32
>>587 GoodJob!
ありがとうございます!
>>588 結局ね、こういう言い方もね、
>>580 もね、同じなんだよねぇ。
表記を無視して実体は語れないんだからさ、
1つの表記をもって実体と言ったっていいと思うがね。
数学とかでよくやる手法だよ。
剰余群の元をもとの群の部分集合やそこに属する元で代表させたりさ。
よく言うだろ? Cの初心者本を書く人は書いてる人自身がC初心者だって。
598 :
デフォルトの名無しさん :04/10/26 01:30:59
> その見返りがあまりになさすぎ。 それがおまえがぼけなだけ。 strings /usr/bin/* する楽しみがあるじゃないか
599 :
デフォルトの名無しさん :04/10/26 01:32:37
わたしはsubversionユーザーだが、 RCSでもcvsでも$Id$を入れるダミー変数はsccsidという名前にする慣習が 昔からあることを知らないやつはかなりのボケだと思う。(Unix屋ならまずまちがいなく知ってる)
600 :
デフォルトの名無しさん :04/10/26 01:37:00
> 表記を無視して実体は語れないんだからさ、 語れるにきまってるだろ! ぼけ 表記がなんであろうと a + b はできるし a > b もできるんだよ
602 :
デフォルトの名無しさん :04/10/26 01:41:32
いいえ。してません。aが10進数か8進数かに無関係に足し算はできるし 比較もできる。代入も なので、表記とか何進数かなんてのは気にしないままにその変数の一生が終わることが ほとんどだ。
>>602 ところで「何を足し算しているの」と聞かれたら?
604 :
デフォルトの名無しさん :04/10/26 01:44:38
整数です。
納豆臭いな・・・
607 :
デフォルトの名無しさん :04/10/26 01:48:01
>>607 ごめん、関係ないと思う。
「表記を無視して実体は語れない」ということの真義を教えてあげようと思ってね。
話の流れだ。 スレ違いではあるまい。
610 :
デフォルトの名無しさん :04/10/26 01:52:07
そんなものはありません
表記ってのはそもそも、そこにある実体を分かりやすくするためにこう書きましょうって決めただけのものなんだから、 別に表記が無くても実体は存在するし、でもそれを語るのは面倒くさいから何らかの表記を用いて実体を説明するのは大いに結構だけど、 > 1つの表記をもって実体と言ったっていいと思うがね。 これは駄目だろ。
実体のままでは人が理解できないから、 人が理解できるような形にしたものが表記だろう。 PCの場合は電気信号のオンオフが実体か というかそういうのは数学板方面の話題では・・・
ちなみに、イデアは実体ではないよ
たぶん
>>611 は数学的な考え方がまったくできない人。
少なくとも数学という分野では表記なくして実体なんて存在しないという
考え方が主流だよ。形式的公理主義っていってね。
小学生に算数教えるのに2進数は使わないだろうしな
>>614 ちょっと単語を聞きかじったので使ってみたくなった中学生?
意味が全然違うぞ。
いいかげん脱線に付き合うな、放置すれ
もういいよ。 そろそろスレ違いを指摘した方がよさそうだ。
>>616 いや、違わないよ。
じゃぁ、どういう意味なの?
お前らって、C「以外」の話になると雄弁だよな。
623 :
デフォルトの名無しさん :04/10/26 09:53:27
まあ童貞だからね
624 :
デフォルトの名無しさん :04/10/26 09:54:10
C言語を覚えたいんですけど、やっぱり本を買わないとダメですか? サンプルのソースとかを見てわからない事があったらぐぐってみたり じゃ覚えられないですかね? ちなみにプログラム初めてです。
625 :
デフォルトの名無しさん :04/10/26 09:55:13
>>537 例えば、こういうのをcから、やりたいのです。
↓
fool% ftp genta
Connected to genta.
220 genta FTP server (SunOS 5.8) ready.
Name (genta:monta):
331 Password required for monta.
Password:
230 User monta logged in.
ftp> put $HOME/file_1 ./file_001
ftp> quit
626 :
デフォルトの名無しさん :04/10/26 10:12:22
>>624 日下部先生の本を買いましょう。バカ相手でも丁寧に教えてくれます。
627 :
デフォルトの名無しさん :04/10/26 10:26:05
Visual C++.netを使用して、 VisualC++プロジェクト→.NET→コンソールアプリケーション で下記を作成し、ウォッチで"tmp"を参照すると、<未定義の値> となってしまいます。 #include "stdafx.h" #using <mscorlib.dll> using namespace System; typedef struct{ int a; int b; int c; }AAA; AAA aaa[10]; int _tmain() { AAA*tmp; tmp = &aaa[1]; return 0; } VisualC++プロジェクト→Win32→Win32コンソールプロジェクト で作成すると、参照できるのですが、.NETの方で参照できる 方法はあれば、教えて下さい。
628 :
デフォルトの名無しさん :04/10/26 10:27:43
>>626 ありがとうございます。ちょっとぐぐってきます。
629 :
デフォルトの名無しさん :04/10/26 10:30:09
>>626 ぐぐって出てきた
作ってわかるCプログラミング っていうやつでいいでしょうか?
>>629 そうです。
専用スレもあるけど、誉めるか貶すかどっちかで有益な情報は少ないから自分の目で確かめましょう。
>>625 戦略は3通り。
・ftpクライアントのマクロを組んで、コマンドラインから指定する(やり方忘れた)。
#マクロ機能の無いftpクライアントならお手上げ。
・標準入力から入力すると思われる文字列を予めテキストファイルに用意して、流し込む。
#詳細後述
・system()ではなく、popen("ftp", "w")してfprintf()で流し込む。
#詳細省略
で、2番目の方法。>625の例なら、
--
password
put $HOME/file_1 ./file_001
quit
--
というテキストファイルを用意(勿論パスワードは適切に)。
#1行目はログイン名。この例では空行とした。
そのファイルがftpIn.txtなら、system("ftp < ftpIn.txt")とすればいい。
>>631 クライアントによっては、パスワード入れるところで止まらないか?
外部プログラムから制御される目的で作られたクライアントであれば問題ないけど。
>>599 最近はrcsidというのにするのが流行です
634 :
デフォルトの名無しさん :04/10/26 13:54:19
>>631 第2案:パスワード入れるところで止まった。
ftpインタプリターに制御が移ったところへ、テキスト流しても対話しないと思う。
>>634 だからちゃんと書いてあるだろ?何をつっかかってんだ
ftpクライアントの挙動なんて、このスレで扱う事か
’Д’)Σ むぅ、ダメか。私はどうやったんだろう… ’д’) これ以上はスレ違いになりそうだし… ≡3 じゃ。そういうことで
638 :
デフォルトの名無しさん :04/10/26 16:03:06
>>635 4階席から、catcallは止めましょう。
まともに書いてる人に悪いから。
/* スレ違いなのでコメントアウト 多くの FTP クライアントの実装には、自動ログインさせないための -n オプションがある。これを指定しておいて、標準入力から user コマンドで user ユーザ名 パスワード というのを食わせればいいんでないかと。 */
641 :
デフォルトの名無しさん :04/10/26 16:18:50
cでftpモジュールをつくるには? これなら、ほんスレかと。
ネットワークプログラミングスレ向きだな。
>>625 に SunOS って書いてるから Unix でしょ。
/dev/tty?? と /dev/pty?? を使った擬似端末で同様の処理を行った事あるよ。
ソース持ってるけど守秘義務あるので晒せない...
簡単に説明できるもんでもないし...ググッてね。
↑そうだな。でも fool% とか書いてるから Win ではないだろ。 Unix の仲間なら /dev/tty くらい有るだろ。良くは知らんが...
646 :
デフォルトの名無しさん :04/10/27 00:17:23
> 最近はrcsidというのにするのが流行です それは「ださい」と昔から言われている(いまも)やつです。 そういう私は、sccsの時代はちょっとしか体験しなかったけど、 ずっと長くRCSだった、VSSも使ったけどちょちょだけ、その後ずっとcvsで、 いまはSubversionだが、その5つともずっと変数名だけはsccsidだ。
>>646 そんな話聞いたことないけど。あなたの回りか、ある一部だけの話では?
ググってもrcsidの方が圧倒的に多いよ。ひょっとして、使う人が少ないから「つう」ってことなのかな?
648 :
デフォルトの名無しさん :04/10/27 00:40:32
> rcsidの方が圧倒的に多いよ いいえ。それはかなりのまぬけ。
649 :
デフォルトの名無しさん :04/10/27 00:41:57
使っているのがcvsなのに、キーワードはRCS互換のもの($Id$#とか$Date$とか)で、 さらに、いれる変数がsccsidってところがいいんじゃん。わたしもそうしてるよん。
アフォが一人降臨なさってますな
ははぁ、いまどき/usr/bin/*をstringsして喜んでる「Unix屋さん」でしたかw
652 :
デフォルトの名無しさん :04/10/27 09:23:56
> いまどき/usr/bin/*をstringsして いまどきじゃなくてもしますね。基本ですから。
voidごっこは他所でやれよ
654 :
デフォルトの名無しさん :04/10/27 09:47:22
>>653 どれがvoidごっこ?
おしえて! わたしもやりたいー
Cってなんですか、入れるんですか?
>>655 お前の人生、イラクの人質より価値が無い
658 :
デフォルトの名無しさん :04/10/27 14:28:53
16ビットのrawファイル読み込むときは sizeはfloatで良いの?
rawファイルって?
生ファイルだろ。 画像の生なら16bit unsignedだな。
いや、生ファイルはいいけど、その形式なんて作った奴に聞かんと分からんし。 なにか有名なアプリとかの「rawファイル」なら、知ってる人がいるかもだが。
よく分からない質問に、それってどういうことだって質問しかえしても、 返事が返ってこないことがほとんどなので、不完全燃焼。
>>658 16bitならunsigned short intで読み込むと良いよ
#include <stdint>
uint16_t
の方が良いけれど。
#include <stdint.h>か。。
質問です Visual C++のコンソールアプリケーションでプロジェクトを作ったときに int _tmain(int argc, _TCHAR* argv[])で始まる型が出来ますがこれはint main(void)と何が違うのでしょうか? 手持ちの参考書にはすべてのCプログラムではint main(void)が基本とありますがこれはいったいなんでしょうか?
int main(int argc, char *argv[])とどこが違うか見ろ。 そして見たらVisual C++の専用のスレに移動しろ。
http://www.ipa.go.jp/security/rfc/RFC1321JA.html 上記のサイトにあるMD5のプログラムを利用したいのですが、ソースを見てもちんぷんかんぷんです。
global.h
md5.h
md5c.c
mddriver.c
上記の4つのファイルからなってるみたいですが、
任意の文字列もしくは数字を入力すると128bitのハッシュ値を呼び出し元の関数へ返したいのですが
何の関数に何の型の引数を渡し、返り値はどういったものであるのでしょうか?(ファイルへ書き出すのでしょうか?)
簡単な使い方をアドバイスお願いします。
>>667 必要なのは上三つ
使い方はmddriver.cを見よ
これくらい読めなければあきらめろ
htmlにする時に<>が消されてるかもしれないからソースは別の所から
取ってくるといいかも
>>665 ( ・∀・)つ〃∩ヘェーヘェーヘェー
結構.net使ってるけど
ずっと空のプロジェクトで作ってたから知らなかった
>>665 パラメータを受け取るための文字列の型がTCHAR**になっているmain
TCHARはUNICODEのときはwchar、ANSIのときはcharになる
・・・であってる?
671 :
デフォルトの名無しさん :04/10/27 22:24:42
>>665 つーか、WinアプリはGUIだろうがCUIだろうが freestanding-environment だぜ
main がどうたらと言いだした時点からかなり痛い勘違いに陥ってるぞ
>>671 VC++ 6.0 Console Application だと Hosted Environment だけどね。
まあ、これは互換性の為だろうな。
673 :
デフォルトの名無しさん :04/10/27 22:49:41
>>672 いーや、freestanding-environment だよ
任意になってる機能が多めに入っているが
main に関しては議論の余地すらない
ここ最近質問者以外でageてる奴ってバカが多いね(一人か?)
675 :
デフォルトの名無しさん :04/10/27 23:44:21
やーい、反論できねえ (プププ
| | | | /V\ ,J /◎;;;,;,,,,ヽ _ ム::::(;;゚Д゚)::| ジー ヽツ.(ノ::::::::::.:::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
>>677 阿川弘之の初期の短編小説で「鱸とおこぜ」というのがあった。
昔は国語の教科書に収録されていたので知っている人も多いと思うが、食いつ
679 :
デフォルトの名無しさん :04/10/28 01:13:26
K&RのUNIXの章がマジわからぬ。これ分からなくても問題ないですよね?? あと、アルゴリズムの入門書に、動的計算法がのってるけど、これ全然入門者向けじゃないよ〜
| | | | /V\ ,J /◎;;;,;,,,,ヽ _ ム::::(;;゚Д゚)::| ジー ヽツ.(ノ::::::::::.:::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
681 :
デフォルトの名無しさん :04/10/28 01:24:39
質問おねがいします C言語でDOS画面を出さずに裏で実行するアプリケーションを作るにはどうしたら言いのでしょうか できるだけ自分で調べますのでヒントだけでもおしえて下さい
rubyyyyyyyyyyyyyyyyyyyyyyyyyy
>>683 即レスありがとうございます。
常駐プログラムの作成法というのがいくつかヒットしました。
勉強してみます。ありがとうございます。
CでTSRを書くと、無駄な領域まで常駐しちゃうから
メモリ勿体ないよな。
>>681 がんがれ!
>>681 単に表にウィンドウが出なければいいだけなら、ショートカット作ってプロパティで設定するだけだけど?
>>681 #include <windows.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
ダメかな・・・
exeとdllが一つづつ存在する。 exeには二つの関数a()とb()が定義されている。 dllには二つの関数A()とB()が定義されている。 exeはLoadLibrary、GetProcAddressを使って A()を実行し引数として関数ポインタaを渡す。 A()は与えられたポインタaからa()を実行し 引数として関数ポインタBを渡す。 a()はポインタBからB()を実行し 引数として関数ポインタbを渡す。 B()は与えられたポインタbからb()を実行する。 typedef void(*FUNC_b)( void ); typedef void(__stdcall *FUNC_B)( void(*FUNC_b)(void) ); typedef void(*FUNC_a)( void(__stdcall *FUNC_B)( void(*FUNC_b)(void) ) ); typedef void(__stdcall *FUNC_A)( void(*FUNC_a)( void(__stdcall *FUNC_B)( void(*FUNC_b)(void) ) ) ); とやったのですが、 exeがLoadLibrary、GetProcAddressを使ってA()を実行するところで ハンドルされていない例外が発生します。 どこを直せばいいのでしょうか。
>>688 スレ違いかと思ったが、取り敢えず「何のために typedef したのか」と。
typedef void *FUNC_b(void);
typedef void __stdcall *FUNC_B(FUNC_b);
typedef void *FUNC_a(FUNC_B);
typedef void __stdcall *FUNC_A(FUNC_a);
B()はGetProcAddressから読み出さないため__stdcallは必要無かったようです。 うまくいきました。ありがとうございます。
質問よろしいでしょうか 文字型配列 T[255]にscanfから文字を格納します。 その T の先頭文字だけをatoi関数を使って数字にしたいのですが、 エラーが出てきてしまいます。解決法は無いでしょうか。
>>691 先頭の1文字だけを数字にしたいなら
int n=(T[0] - '0')じゃダメなん?
>691 書き方が悪い。
694 :
デフォルトの名無しさん :04/10/29 03:01:18
scanf使うな ぼけ
695 :
デフォルトの名無しさん :04/10/29 03:04:17
>692 なんで括弧で囲っているの?
697 :
デフォルトの名無しさん :04/10/29 06:49:34
>696 かっこつけたかっただけだろう
徹夜明けって、ハイになるよな。
寒いしな
燃え尽き症候群か?<灰になった
popen()を利用すると標準入出力の入力か出力をパイプにできますが 両方同時にパイプを使いたい時はどうすればいいでしょうか
パイプを2つ使えばどうでしょうか
>>703 標準関数ではできないので該当スレへどうぞ。
#まぁ、>704しかないな。
707 :
デフォルトの名無しさん :04/10/29 18:25:54
今日学校でscanfをつかっていたらそんなの使うなと 怒られました。fgetsをつかえっていわれたんですけど 実際scanfをつかうのはやばいんでしょうか?
>>707 入力できる文字数を指定できないから、
例えば大量の文字列を入力した場合、確保した領域外を侵される可能性がある。
領域を侵した場合の動作は未定義。 標準入力から入力される内容を事前に知ることは出来ない。 scanfは読み込むサイズを制限できない。 以上から scanfを呼び出した場合の動作は未定義と考えられますが、 そのように書かれていないのはなぜなんでしょうか?
>>709 以上から、以外の定義を無視して未定義だって?
>>709 入力文字数が確保した領域内に収まる限り、scanfは正常に動作する。
入力するのは人だが、入力できる文字数をあらかじめ知っていると仮定し、
かつ、人がそれを守ったとしたら間違った動作は起きない。
しかし、もしそれを守らない人がいたら動作は保証できない。
それがバグだ。
713 :
デフォルトの名無しさん :04/10/29 20:11:33
>>707 マニュアルをろくに読まないで自爆しまくってる自称ベテランです
あんまり毒されないほうがいい
そういう人に何か質問するときは腫れ物に触るように気を使いましょう
あなたの何気ない素朴な質問に突然キレたりします
char s = ' '; strlen(&s); これもバグですか?
>>715 仕様を理解していてそんな使い方する人いるのか?
バグや仕様以前に、バカだろ?それは
718 :
デフォルトの名無しさん :04/10/29 23:15:25
fopenでテキストモードで開いたとき、freadとかfgetcとかの入出力関数は いちいち1バイトずつ'\r'かどうかとかチェックしてるんですか? 遅そう。
>>718 一般的なディスクから読み込む速度に比べたら誤差のようなものです。
テキストで読み書きする必要なければバイナリでやればいい
722 :
デフォルトの名無しさん :04/10/30 01:07:42
>>715 なんにも問題ないコードだろ ぼけ。
char *p = NULL;
strlen(p);
と同じぐらい問題ない。
#include <stdio.h> int main(void) { char s = ' '; char *p = NULL; printf("%d\n", strlen(&s)); printf("%d\n", strlen(p)); return 0; } %./nullpo 10 Segmentation fault (core dumped)