5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら、俺に聞け! lt;50gt;

1 :鼻から悪魔でますた:03/02/11 13:45
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。

コンパイラを探しているなら >>2 を見よ。

上記を逸した場合の結果は激しく未定義とする。

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/


2 :1:03/02/11 13:50
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html


3 :1:03/02/11 13:52
前スレ

C言語なら私に聞いてYO! 49
http://pc2.2ch.net/test/read.cgi/tech/1042646178/

祝49回 C言語ならあっしに聞け
http://pc2.2ch.net/test/read.cgi/tech/1042640474/


4 :1:03/02/11 13:54
【過去ログ】
48 http://pc3.2ch.net/tech/kako/1041/10411/1041127646.html
47 http://pc3.2ch.net/tech/kako/1040/10400/1040048202.html
46 http://pc3.2ch.net/tech/kako/1039/10393/1039328710.html
45 http://pc3.2ch.net/tech/kako/1038/10384/1038405432.html
44 http://pc3.2ch.net/tech/kako/1037/10377/1037796472.html
43 http://pc3.2ch.net/tech/kako/1037/10372/1037281411.html
43 http://pc3.2ch.net/tech/kako/1037/10371/1037134356.html
42 http://pc3.2ch.net/tech/kako/1037/10371/1037101156.html
41 http://pc3.2ch.net/tech/kako/1036/10368/1036876790.html
40 http://pc3.2ch.net/tech/kako/1036/10366/1036673739.html
39 http://pc3.2ch.net/tech/kako/1036/10364/1036409391.html
38 http://pc3.2ch.net/tech/kako/1035/10357/1035729526.html
37 http://pc3.2ch.net/tech/kako/1035/10356/1035623265.html
36 http://pc3.2ch.net/tech/kako/1035/10352/1035211039.html
35 http://pc3.2ch.net/tech/kako/1034/10343/1034337064.html
34 http://pc3.2ch.net/tech/kako/1033/10332/1033240509.html
33 http://pc3.2ch.net/tech/kako/1032/10326/1032606064.html
32 http://pc3.2ch.net/tech/kako/1031/10319/1031905402.html
31 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
30 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
29 http://pc3.2ch.net/tech/kako/1029/10296/1029605182.html
28 http://pc3.2ch.net/tech/kako/1028/10284/1028495798.html
27 http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html


5 :1:03/02/11 13:56
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html

6 :1:03/02/11 13:59
あら、
いつの間に、タイトルに< >使えなくなってたの



7 :デフォルトの名無しさん:03/02/11 14:00
    ┏━━━ / |━━━━━┓
    ┗┳┳━ |_| ━━━┳┳┛
      ┃┃ /  ヽ     ┃┃
    ┏┻┻ |======| ━━┻┻┓
    ┗┳┳ ヽ__ _ ノ ━━┳┳┛
      ┃┃ (/)     ┃┃
      ┃┃ (/)     ┃┃
    凸┃┃ (/)     ┃┃凸
    Ш┃┃ (/)     ┃┃Ш
    .|| ┃┃ (/)     ┃┃.||
  ∧_∧   (/) ∧_∧  ∧ ∧
  ( ・∀・)  (/)(´∀` )  (゚Д゚ ) Part50スレが他に立ちませんように
  (つ  つミ (/)(⊃⊂ ) ⊂  ⊃
  |_|_|_I(/)_|_|_|__|  |
  /////ノ,,,,,,ヽ ////||  |〜
////////////  |∪∪
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
|        奉  納        |

8 :デフォルトの名無しさん:03/02/11 14:08
おとといK&Rを買いますた
引き続きがむばります

9 :デフォルトの名無しさん:03/02/11 14:15
>>1-5
乙カレー。

>>7
だよねー。

10 :デフォルトの名無しさん:03/02/11 14:19
>>8
ちゃんと正誤表は確かめたか?

11 :デフォルトの名無しさん:03/02/11 14:25
>>10
今日確かめます

12 :デフォルトの名無しさん:03/02/11 14:26
ネット上にある正誤表をね

13 :デフォルトの名無しさん:03/02/11 14:28
ようやくまともなスレ立てになったか…
>>1

14 :デフォルトの名無しさん:03/02/11 14:33
皆さんはソースプログラム中にデバッグ用の文を組み込んだりしてますか?
また、どんな方法を利用しているのでしょうか?

15 :デフォルトの名無しさん:03/02/11 15:02
/* コノアタリガアヤシイ ダレカデバッグシロ */


16 :デフォルトの名無しさん:03/02/11 15:45
極上のウイルスくれ!

17 :デフォルトの名無しさん:03/02/11 16:15
誰だよ、スレタイに < > 使った香具師は・・・

18 :デフォルトの名無しさん:03/02/11 16:26
誰って、そりゃ>>1だろう

19 :デフォルトの名無しさん:03/02/11 16:27
先月デザインパターン改訂版を買いますた
引き続きがむばります

20 :デフォルトの名無しさん:03/02/11 16:28
むしろ>>1以外に<>をスレタイに使うことが出来る奴がいたら、それは神です。

21 :デフォルトの名無しさん:03/02/11 16:35
ひろゆきとか。


22 :デフォルトの名無しさん:03/02/11 16:44
で、>>1 は誰?

23 :デフォルトの名無しさん:03/02/11 16:46
こないだ駅の階段で派手に転んだ人

24 :デフォルトの名無しさん:03/02/11 16:52
生き別れの兄です。

25 :デフォルトの名無しさん:03/02/11 17:39
今まで小さい練習用のプログラムを書いてたんですが、ちょっと大き目のものを
書くようになって気付いたことが。

一つのモジュール内で、やたらと深い&多数のループを回すプログラムを作るとき、
皆さんはループ用の変数をどう確保してるのか、ということです。
今のところint i, j, k, m, l ........てな感じでやってるんですが、なんか無駄が多いような・・・・・
それともこれが最善のやり方なんでしょうか。

26 :デフォルトの名無しさん:03/02/11 17:40
for (int i = 0;
 for (int j = 0;
  for (int m = 0;
   for (int l = 0;

27 :デフォルトの名無しさん:03/02/11 17:51
>>25
どの辺が無駄なのか説明してくれないか?

28 :デフォルトの名無しさん:03/02/11 18:15
こないだ書いたプログラムでほとんどの関数に int i,j,k が必要だったんで
グローバル変数で、i j k定義したよ。

//良い子は絶対真似しないこと。


29 :デフォルトの名無しさん:03/02/11 18:31
>やたらと深い&多数のループを回すプログラムを作るとき

できの悪いの自慢してどうする

30 :デフォルトの名無しさん:03/02/11 20:03
>>25
ちゃんと変数名考えて定義しろよ。
それぞれのループごとに意味あるんだろ?

31 :デフォルトの名無しさん:03/02/11 20:20
struct { int i:8; int j:8; int k:8; int l:8; } x;
for (x.i=0; …
 for (x.j=0; …
  for (x.k=0; …
   for (x.l=0; …

32 :デフォルトの名無しさん:03/02/11 20:25
なぜビットフィールドなんか使う・・・

33 :デフォルトの名無しさん:03/02/11 20:32
31は貧乏

34 :デフォルトの名無しさん:03/02/11 21:11
私の書くプログラムで、(特に)意味のないループ制御変数はicにしている。
iだとインクリメンタルサーチが面倒だと言うのが一番の理由。
で、二重ループは大抵意味があるのでその意味を反映させる。
例えば、ix, iy など。
一つの関数で三重以上のループになることは余りないかな?
その場合も二重ループと同様。
ちなみに、>>31のような書き方をすると処理速度はがた落ちになる罠。

35 :デフォルトの名無しさん:03/02/11 21:16
>>28
何のメリットがあるんだ ?

36 :デフォルトの名無しさん:03/02/11 21:19
>>35
スタックポインタ相対アドレッシングのないCPUでは、自動変数より
グローバル変数の方が処理速度もメモリ効率も上がるだろうね。

37 :デフォルトの名無しさん:03/02/11 21:32
>>36
そこまで考えてないと思われ。単なる手抜きかと。
多くのプロセッサでは、自動変数でループカウンタとして使うなら
レジスタに割り当てられる事が多いし。
グローバル変数は、コンパイラの最適化を阻害するケースが多い。

38 :デフォルトの名無しさん:03/02/11 21:38
名スレの予感

        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.  終  了 │
     〜′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛

39 :38:03/02/11 21:39
誤爆

40 :デフォルトの名無しさん:03/02/11 21:41
C++のDLLからクラスを動的にインポートすることは出来ないのでしょうか?
Loadlibraryでロードしても関数を呼び出す方法しか見当たらないのですが
ヘッダもライブラリも無いので何とか動的にリンクしたいのですが

41 :40:03/02/11 21:42
えーっとそれから
環境はVC++でwin32です

42 :デフォルトの名無しさん:03/02/11 21:45
>>40-41
果てしなくスレ違い

43 :40:03/02/11 21:48
失礼しました

44 :デフォルトの名無しさん:03/02/11 23:13
>>26
それは C++ だ!

>>28
int i;

void foo(int *array, int size) {
 for(i = 0; i < size; ++i) {
  printf("(%d\n", i);
  bar(array[i], size);
  printf("%d)\n", array[i]);
 }
}
void bar(int elem, int size) {
 for(i = size; i >= 2; --i) {
  printf(" %d: %d\n", i, elem * i);
 }
}

で、どうするよ。

>>29
行列とか扱ってるとどうしても深くなってしまうこともある。
>>25
でも、そういうのでなければ関数に分けたりして
ループを浅くするのがよい。

45 :デフォルトの名無しさん:03/02/11 23:41
>>44
>>>26
>それは C++ だ!
C99だとできたりする。

46 :デフォルトの名無しさん:03/02/12 00:08
C99うぜーーーーーーーーー!!!!!!!!!!

配列の大きさの指定には変数は使え
ないとかsnprintfは標準関数じゃないとかいうと厨房扱いされるんだぜ。
まじうぜーーー!!


こんな時代遅れな言語は新たに規格を策定しなくてもよかったと思うんだけど。


47 :デフォルトの名無しさん:03/02/12 00:08
変なところで改行しちまった

48 :デフォルトの名無しさん:03/02/12 00:42
>>44==46?
C99が必要無いと思うのは勝手だけど
自分のミスを規格のせいにしてはアカンよ

49 :46:03/02/12 00:43
>>48
違いますが。


50 :デフォルトの名無しさん:03/02/12 00:45
>>48
「〜は使えない」→「C99ならデキルヨ!アナタシラナイノ?ぎゃは」
とかいう会話がまじうぜーーーのではないでしょうか?

51 :44:03/02/12 00:48
>>46
いやまあ、現状C99を実装してる処理系ってほとんどないだろうし、
移植性を考えたらC99の機能はまだ使うべきではないだろう。
いまだに
void afo(mona)
 int mona;
{
 /* */
}
式の関数を定義する場合もあるわけで。

ただ、Cの機能じゃないと言い切っちゃうのは、さすがに嘘だと思ったんでな(w

52 :48:03/02/12 01:00
>>50-51
いや、俺もC99の環境は持ってないし
多分、実装された環境を手に入れる事は暫く無いだろうなと思うし
たま〜に、ウザイと思う事はあるよ
でも、Cの規格にC99があるんだから、しょうがないじゃん
教える時や、間違えを指摘する時に
釣りでも無いのに、C99の規格の事を忘れてはアカンと思うのよ
まぁ、別に争う気は無いので、ここら辺で

53 :デフォルトの名無しさん:03/02/12 01:01
でも、いかに C89 とかが obsolete だとしても、それと C99 とはあくまで
区別するのが今の風潮じゃないか?

54 :デフォルトの名無しさん:03/02/12 01:05
カーニハンとリッチーはC99対応のプログラミング言語C第3版を出すつもりはないの?

55 :本当の44:03/02/12 01:23
>>51
あなた、>>45 じゃないですか?

えーと、C99 でできるのは知ってましたが、
>>53 のようなスタンスで書いちゃいました。

C99 なんていらんわ! とかいうつもりはないです。
というか、むしろ普及してくれた方が嬉しいです。
でも、実際の現在の普及率を考えると、
「あー、そういうことできるんだ」と思って試した人が
「できねーじゃんかYO!」となるのは必至なので
別物扱いしておいた方が妥当なんでは、と。

56 :デフォルトの名無しさん:03/02/12 01:49
質問スレではあげ足取りの定番になってる感もあるしなー

57 :デフォルトの名無しさん:03/02/12 02:21
>>55-56
本当はC99スレを立てるのが良いと思うけど
ただでさえC関連スレは乱立してるから
反発の方が多そうなので現状維持で仕方ないかと…

58 :デフォルトの名無しさん:03/02/12 02:23
>>57
もー立ってたりして。寂れてるけど。
http://pc2.2ch.net/test/read.cgi/tech/1044351696/l50

59 :デフォルトの名無しさん:03/02/12 16:03
「『ビル・ゲイツ』と『ビル・ジョイ』ってどっちが強いの?」


60 :デフォルトの名無しさん:03/02/12 16:41
struct a{
char A1;
char A2[3];
int A3;
}A;

struct b{
char B1;
char B2[3];
int B3;
}B;
上記のように複数個の構造体があったとして
同じファイルにバイナリでライトしたいのですが
いかようにすればよろしいのでしょうか?
引数の記述方法がよくわからずコマっております。
御教授お願い致します。

61 :デフォルトの名無しさん:03/02/12 16:53
メモリの内容なら"wb"付きfopenでオープンした
ストリームにfwriteで書き込める。

62 :デフォルトの名無しさん:03/02/12 17:32
C99が型チェックに厳しいなら使ってみたい気もする

63 :60:03/02/12 17:45
>>61サソ
アリガd
質問のしかたが悪かったでし、、、
構造体を丸ごとドカンと
書きこみたいのっす。
スイマソン
再度の御教授を〜

64 :デフォルトの名無しさん:03/02/12 17:55
windowsXPでCやるのはどうやったらいいんでしょう?
コンパイラは、gccっていうのをどうやって入手するか分かりません。
borlandのなんとか55っていうのはできたけど、.exeになったけど、
ひらくと、有効なwin32アプリケーションではないって言われて実行できません。

65 :デフォルトの名無しさん:03/02/12 17:55
struct {
 char c;
 int i;
} a;

int main()
{
 fwrite(&a, sizeof(a), stdout);
 return 0;
}

66 :デフォルトの名無しさん:03/02/12 17:56
C99って使っている人多いですかね?

67 :デフォルトの名無しさん:03/02/12 17:57
http://www.agemasukudasai.com/bloom/

68 :デフォルトの名無しさん:03/02/12 17:57
>>64
ボーランドのなんとか55で
何をやったらそうなった?


69 :デフォルトの名無しさん:03/02/12 18:05
Borland C++ Compiler 5.5

70 :デフォルトの名無しさん:03/02/12 18:12
>>68
すみません。できました。意味も無くobjふぁいるにilink32施してました。
でもなんでobjとか出てくるんですか?

71 :デフォルトの名無しさん:03/02/12 18:31
分割コンパイル

72 :デフォルトの名無しさん:03/02/12 19:56
関数に渡す引数の型の種類によってその型を使用する処理を
行う関数を作りたいんですが、そんなことできますか?

73 :デフォルトの名無しさん:03/02/12 20:02
template <typename T>
void func(T& t)
{
//...
}

void func(wchar_t* pt)
{
//...
}

74 :デフォルトの名無しさん:03/02/12 20:04
>>72
C++で関数の多重定義を使え。
もしくはvoid *で渡しておき、パラメータで切り替える。

void func(void *p, int i)
{
double d;

switch (i) {
case 1:
d = *(double *)p;
break;
]
}

75 :デフォルトの名無しさん:03/02/12 20:13
>>73
スレ違い

76 :デフォルトの名無しさん:03/02/12 20:14
おーなるほど。
これ以外のうまい方法はないんでしょうか?
あとC++はできないんで、Cでお願いします・・

77 :デフォルトの名無しさん:03/02/12 20:14
ばーか!気合で何とかしろ

78 :デフォルトの名無しさん:03/02/12 20:17
>>76
ないから関数名に型名を付加しろ。
C++の関数のオーバーロードも内部では同じようなことをしている。


79 :デフォルトの名無しさん:03/02/12 20:21
>>76
>>74に答えがあるぞ。

80 :デフォルトの名無しさん:03/02/12 20:22
>>79
> これ以外のうまい方法はないんでしょうか?

81 :デフォルトの名無しさん:03/02/12 20:25
>>76
別にC++の全ての機能を使わなければならないというわけじゃないでしょ。
C++の機能はオーバーロードだけ使って、あとはCの機能だけで書けばいいでしょ。

それとも、C++コンパイラがないとか??

82 :デフォルトの名無しさん:03/02/12 20:36
typedef enum { TYPE_CHAR., TYPE_INT, TYPE_LONG ... } VTYPE;

void func(VTYPE vt, ...)
{
 va_list arg;
 va_start(arg, vt);

 switch (vt)
 {
 case TYPE_CHAR.:
  ...
 }

 va_end(arg);
}

83 :76:03/02/12 20:57
ありがとうございます。
色々試してみます

84 :デフォルトの名無しさん:03/02/12 21:05
悪いことはいわないから妙なことせずに
関数名の違う関数を用意しる。

#define で展開してもいいが。

85 :デフォルトの名無しさん:03/02/12 22:35
int swap0(int *pa0,int *pb0){

int t;

t=*pa0;
*pa0=*pb0;
*pb0=t;

}

すいません、これって何をしているのですか?

86 :デフォルトの名無しさん:03/02/12 22:37
>>85
swap()の名前そのままの通りの事をしている。
*pa0と*pb0が指すintの値を交換している。

87 :デフォルトの名無しさん:03/02/12 22:38
>>85
関数の方は void にすべきだと思う。

88 :デフォルトの名無しさん:03/02/12 22:39
>>87
関数の値は〜
の間違い(;´Д`)

89 :85:03/02/12 22:39
>>86,87
ありがとうございました!

90 :デフォルトの名無しさん:03/02/12 22:42
http://www.cyberconnect2.jp/hack/frame.htmlあらしてみろよ

91 :デフォルトの名無しさん:03/02/12 22:55
普通unionを使うものだと思ってたが。

typedef struct {
 enum {INT, FLOAT} type;
 union {
  int i;
  float f;
 } v;
} giko_t;

void sii(giko_t g) {
 switch (g.type) {
 case INT:
   :



92 :デフォルトの名無しさん:03/02/12 22:56
>>88
それを言うなら「関数の型は」ではないかと。
#っていうか、関数の値って何さ。void型には値はないっしょや。

93 :デフォルトの名無しさん:03/02/13 00:37
>>92
そうとも言う。




スマンそれが正解。どっから方が出てきたのか自分でも不思議だったんだが
型と変換しようとしてミスったんだな…。

94 :デフォルトの名無しさん:03/02/13 01:38
void * 型ってどういうときに使うのかよくわかってないのですが、
>>74みたいに使うのが普通の使い方なのでしょうか?


95 :デフォルトの名無しさん:03/02/13 01:46
>>94
あくまでおれの考えだが、>>74みたいなコードはよくないと思う。
Cにはきっちりとunionという機能があるわけだから。
キャストで解決するのは最小限にすべきだとおれは考える。

んで、void *ってのは型はわからんがとにかくポインタを渡したいときに使う。
具体的にはmallocなんかいい例だ。mallocは言われたとおりの大きさのメモリを
確保してその先頭のポインタを返す関数だが、そのメモリの領域が何の型であるか
というのは事前に(malloc作成時に)は決められない。こういうときにvoid *を使う。

96 :デフォルトの名無しさん:03/02/13 01:52
ほかにはmem系関数がよい例だね。
str系関数と違って渡すポインタがchar *とは限らないから、void *にしておかないと
コンパイル時に警告が出てしまう。


97 :デフォルトの名無しさん:03/02/13 03:01
>>95
>>74そのままではないが、不特定の型を取り扱う場合
unionだとdoubleに合わせることになって困ることも多い。
なので、>>74は(そう言う場合には)妥当解だと思う。

それにしても、
void と void * は別の語にするべきだったんじゃないかと思うんだけどね。

98 :95:03/02/13 03:42
>>97
うん、もちろん特別な場合というのももちろんあってそうする必然性があれば、
>>74のように書くのも一向に構わないと思ってる。ああいう風にしか書けない
場合もあったりするしね。

>void と void * は別の語にするべきだったんじゃないかと思うんだけどね。
staticもそうだな。可視性と記憶クラスの指定には別の語を割り当てるべきだった。

99 :デフォルトの名無しさん:03/02/13 04:06
voidはともかく、staticは変えるべきだったよな・・・
書く場所によって全然効果が違うじゃないか。
片方はinternにすべきだったと思う。


100 :デフォルトの名無しさん:03/02/13 04:24
void=型がない void *=指す型がない

だからいいんじゃない?


101 :デフォルトの名無しさん:03/02/13 04:51
すんごいショボイ話ですが
stdio
atdlib
malloc
extern
strcomp
これらをなんて読んでますか?俺は↓のように読んでますが・・・
stdio.h → ストゥディオエイチ
stdlib.h → スタドリブエイチ
malloc → マロック
extern → イクスターン
strcomp → ストルコンプ
間違ってると恥ずかしいのであまり他の人には言えません。

102 :デフォルトの名無しさん:03/02/13 04:56
>>101
またクダラネーけど盛り上がりそうな話題を(w

stdio → えすてぃーでぃーあいおー or すたんだーどあいおー
stdlib → えすてぃでぃーりぶ or すたんだーどりぶ
malloc → えむあろっく
extern → えくすたーん
strcomp → すとらこんぷ or すとりんぐこんぷ

整合性まったくなし(w

103 :デフォルトの名無しさん:03/02/13 04:56
>strcomp
脳内関数か

104 :デフォルトの名無しさん:03/02/13 04:58
>>102
malloc以外は同じだな。
まろっく、きゃろっく、りあろっく


105 :デフォルトの名無しさん:03/02/13 05:15
>>101
stdio.h → スタンダードアイオーエイチ
stdlib.h → スタンダードリブエイチ
malloc → エムアロック
extern → エクスターン
strcomp → ストアコンプ

strpbrk → ストアピーブレーク(breakかどうか知らんが…

106 :101:03/02/13 05:47
>>103
脳内関数ですたw

みなさんとても参考になりました!ありがとうございます。
個人的に>>105のストアコンプがチトカコイイ


107 :デフォルトの名無しさん:03/02/13 06:07
strspn
これの読み方がわからん・・・ストリングスパンか?


108 :デフォルトの名無しさん:03/02/13 07:24
>>107
man strspnしてみたら

NAME
strspn - span a string

とかいってるんで、それであってますな。

109 :デフォルトの名無しさん:03/02/13 07:53
うち(Linux)のman 3 strspnには
NAME
strspn, strcspn - search a string for a set of characters
と書いてある・・・(しょぼーん)
説明のどこにもspanなんて単語はないし。書けよヴォケ

110 :デフォルトの名無しさん:03/02/13 08:00
ストリングのストリじゃなくストラとよぶ人が
多いのはなぜだろう。俺もなんだが。もっとも、相手により確実に
意味を通じさせることが必要な場合はエスティーアールと発音するけれども。

ちょとすれ違い気味だが、俺的に今思いついた気になるもの:

Windows API:
BitBlt びっとぶろっと?びっとぶりっと?びっとぶろっくとらんすふぁ?

UNIX commands:
sed せど?えすえど?えすいーでぃー?すとりーむえでぃた?
ar あー?えーあーる?あーかいぶ?
wc だぶるしー?わーどかうんと?
tr てぃーあーる?とらんすりたれーと?とらんす?
od おど?おーでぃ?おくたるだんぷ?
rm あーるえむ?りむーぶ?
mv えむぶい?むーぶ?
chown ちょうん?ちぇんじおーなー?
等など。UNIXコマンドは類挙にいとまが無いな。いくらでも続けられる。


111 :108:03/02/13 08:14
>>109
うちはFreeBSDっす〜

112 :デフォルトの名無しさん:03/02/13 10:20
>>104
> まろっく、きゃろっく、りあろっく
なぜ「りーろっく」じゃない?

>>110
> BitBlt びっとぶろっと?びっとぶりっと?びっとぶろっくとらんすふぁ?
Windows APIというより画像処理用語だがビットブリットでいいはず。

113 :デフォルトの名無しさん:03/02/13 11:24
mallocの読み方にこだわっても、ま、ろくな事は無いな。

114 :デフォルトの名無しさん:03/02/13 12:09
>>113
( ´∀`)σ)Д`)

115 :デフォルトの名無しさん:03/02/13 14:13
( ´д)ヒソ(´д`)ヒソ(д` )

116 :デフォルトの名無しさん:03/02/13 15:28
まぁ他の香具師とプログラム系の話ほとんどしない香具師なんで参考にならんと思うが。

>>101
stdio → すとぅどぅあいおー || すたんだーどあいおー
stdlib → すとぅどぅりぶ || すたんだーどりぶ
malloc → まろーく
extern → えくすたーん
strcmp → すぅとぅるこんぷ || えすてぃーあーるこんぷ

>>110
BitBlt → びっとぶると

sed → せっど
ar → えーあーる
wc → だぶりゅーしー
tr → てぃーあーる
od → おーでぃー
rm → りむーぶ || あーるえむ
mv → むーぶ || むぶ
chown → しーえいちおうん


117 :デフォルトの名無しさん:03/02/13 15:44
質問っす。
fwrite()に関してなんすけど
形 式 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

この第3引数の"size_t nmemb"ってなんじゃーい?
たとえば
struct chinko {
int a;
char b;
char c[9];
} HOGE;
ってな構造体をfwrite()するには
fwrite ( &HOGE, sizeof(HOGE), ??, fp);
この第3引数は構造体のメンバの数、つまり"3"って
記述するの?


118 :デフォルトの名無しさん:03/02/13 15:48
>>117
違うっす。書き込みたい構造体の数っす。
1つだけ書き込みたいなら1。

119 :デフォルトの名無しさん:03/02/13 16:01
getcとputcで全て代用出来るジャン
この2個で十分だZE!


120 :デフォルトの名無しさん:03/02/13 16:22
ハハハ!!!

121 :デフォルトの名無しさん:03/02/13 16:32
>>101
stdio → すたんだーどあいおー
stdlib →すたんだーどらいぶらりー
malloc → めもりーあろけいと
extern → えくすたーん
strcmp → すとりんぐこんぺあー

str-をストレングスとか言ったころが懐かしい。


122 :デフォルトの名無しさん:03/02/13 17:19
>>117
number of memory blocks.
つまり、sizeバイトのメモリブロックを何個書くか。
正常に書きこめた場合、fwrite()の戻り値はnmembに等しくなる。
#けどバッファリングされるので、実際の書き出しは保留される可能性があるので注意。

123 :デフォルトの名無しさん:03/02/13 17:34
fwriteの第二引数は1でいいよな


124 :デフォルトの名無しさん:03/02/13 17:40
>>119
俺もgetc, putcが一番好きだな。。。そう効率が悪いものでもないし
stdioの関数およびマクロ群の中で、或る意味では一番問題が少ない。
# MultiThread環境では効率上大問題だが

fwrite/freadはwrite/readを元にしているのにインタフェース的に
より不格好になっているし、何回read/writeが実行されるかわからんとか
そういう所が好きじゃない。
while ((n = read(0, buff, sizeof(buff)) > 0)
  write(1, buff, n);
は端末が標準入力である場合、適切に行単位の入力をこなしてくれるが
freadでは指定したバイト数を必ず読み込もうとしてしまう。


125 :デフォルトの名無しさん:03/02/13 17:54
>>124
>俺もgetc, putcが一番好きだな

>freadでは指定したバイト数を必ず読み込もうとしてしまう。

素朴な疑問だけど、ストリーム系と低Lvを混在させるの?
それともgetcで全てを賄うの?

126 :デフォルトの名無しさん:03/02/13 18:21
outb() inb()マクロ
使いなよ

127 :デフォルトの名無しさん:03/02/13 18:23
BCDコード(2進化10進コード)を使いたいのですが。
どうすればよろしいでしょうか?

128 :デフォルトの名無しさん:03/02/13 18:23
fread fwrite は
ストリーム系ジャン


129 :デフォルトの名無しさん:03/02/13 18:24
>>128
>>124もよく読もう。

130 :デフォルトの名無しさん:03/02/13 18:25
>>127
BCDコードライブラリをどこからか探してくる。

131 :デフォルトの名無しさん:03/02/13 18:36
プログラム内で環境変数に値をセットして、呼び元で
その環境変数の値を使用したいのですが、
どのようにしたら良いのでしょうか?
このプログラムは、cshから実行し、
そのcshでその環境変数を使いたいのです。
よろしくお願いします。

132 :デフォルトの名無しさん:03/02/13 18:48
>>131
Unixなどでは親プロセスの環境変数は換えられません。
そして擦れ違い。

133 :デフォルトの名無しさん:03/02/13 18:53
>>130
レスありがとうございます。
しかし、どこにあるのでしょう・・・。
検索してみましたがひかかりません><

134 :デフォルトの名無しさん:03/02/13 19:54
>>125
勿論「同一のファイルに対しては」混在させない。
getc/putc以外は「嫌いだ」と云ってるだけで、使わない訳ではないよ。
少なくとも*printfは、(Cでは)必要だろう。





135 :デフォルトの名無しさん:03/02/13 19:58
printfこそCの関数の代表だ。


136 :デフォルトの名無しさん:03/02/13 20:16
プリント腐

137 :125:03/02/13 20:27
>>134
納得しますた。

138 :デフォルトの名無しさん:03/02/13 20:44
printfでは'\0'を出力できない。

よって
fputc>>>fprintf

139 :デフォルトの名無しさん:03/02/13 20:47
>>138
fprintf(f, "%c", 0);

140 :デフォルトの名無しさん:03/02/13 20:48
>>138
出せますが。
printf("%c", 0);

141 :デフォルトの名無しさん:03/02/13 20:57
printf("'\\0'");

142 :デフォルトの名無しさん:03/02/13 21:04
Ruby>>>printf≧VB

143 :デフォルトの名無しさん:03/02/13 21:07
配列の[ ]の中に変数を入れることは不可能なのですか?
という質問をしようとしてこのスレに来て、>>1のリンク先を読んでみたのですが、
>>配列の大きさはコンパイル時に定数でなければならない。
ここらへんですか〜。
初歩的で申し訳ないですが、アドバイスお願いします。

144 :デフォルトの名無しさん:03/02/13 21:10
>>134
「同一のファイル」というのを勝手に「同一の(ソース)ファイル」
と脳内補完してしまって、一瞬(゚Д゚)ハァ?と思ったのはナイショだ(w

145 :デフォルトの名無しさん:03/02/13 21:12
>>143
実行時に配列の大きさを決めたいってことか?
たとえば(これできないけど)
void func(size_t s) {
 char a[s];
}
みたいなことやりたいとか?

だったらmalloc使いな。

146 :143:03/02/13 21:18
>>145
どのように使えばいいのでしょうか?
初歩的で申し訳ないですが、アドバイスお願いします。

147 :デフォルトの名無しさん:03/02/13 21:18
>>143
そんな貴方にalloca()
ご利用は計画的に

148 :143:03/02/13 21:23
サンクスです♪
具体的には、
デバイスの数をまず調べ、その数だけ文字列を用意して、
ひとつずつデバイスの名前を入れていく感じにしたかったんです。
 char device[デバイスの数][32文字];
みたいに。

リロードしてビックリ。>>146は誰?
まぁいいかー。

149 :デフォルトの名無しさん:03/02/13 21:26
このC言語って・・・・
http://homepage2.nifty.com/arkmage/index1.html
ガクガクプルプル
かなりすごいウィルスなのでは??
対策ってもうとってるのか?俺が知らないだけか??
もし対策とってないとしたらUNIX系は全滅・・・もうダメポ・・・・

150 :143:03/02/13 21:29
>>148
あなたこそ誰?
成りすましは勘弁して。

151 :143:03/02/13 21:42
(笑
こんな初心者を騙って何のメリットあるんだ〜。

152 :デフォルトの名無しさん:03/02/13 22:03
gt;gt;149のって何ですか??

153 :デフォルトの名無しさん:03/02/13 22:03
 ( 笑 < リフレク!
ポワン

154 :143:03/02/13 23:21
どこかで数を取得し、その数だけ配列変数を用意するという場面は、
よくある気がするんですけどね〜。どうなんでしょうか?
mallocも調べてみましたが、ちょっと難しそうです・・・。

155 :デフォルトの名無しさん:03/02/13 23:23
じゃ、newでもしとけ

156 :デフォルトの名無しさん:03/02/13 23:50
printf = プリン・豆腐

157 :デフォルトの名無しさん:03/02/13 23:57
C99ならstaticで(ry

158 :デフォルトの名無しさん:03/02/14 00:20
int func(int size)
{
 int *a;
 a = malloc(sizeof(int) * size);
/* 処理 */
 free(a);
 return 0;
}

エラーチェック無しだけど基本はこんなでいいんだよね?


159 :デフォルトの名無しさん:03/02/14 00:23
できれば
a = (int *) malloc(sizeof(int) * size);
だね。

後、私は癖で
if (a) {
 free(a);
 a = NULL;
}
とするかな。

160 :デフォルトの名無しさん:03/02/14 00:23
>>154
ならvectorでも使っと毛

161 :デフォルトの名無しさん:03/02/14 00:39
>>159
C89以前の方ですか?

162 :デフォルトの名無しさん:03/02/14 00:53
C++でもキャストしないといけないはず。
C++でmalloc使うのもどうかと思うけど

163 :デフォルトの名無しさん:03/02/14 00:58
>>162
C++ では、じゃない?

164 :143:03/02/14 00:59
>>155-163
ありがとうございました♪
C++ならもっとかんたんにできるのですか?

165 :デフォルトの名無しさん:03/02/14 01:02
>> 101
亀ですみませぬ。

stdioすたんだーどあいおー
atdlibすたんだーどりぶ
mallocまろっく
externえくすたーん
strcompえすてぃーあーるこんぷ


まんまですね(苦笑)
正しいのかは知らず。

166 :デフォルトの名無しさん:03/02/14 01:11
>>164
こんな感じ。

int* a = new int[size];
// 処理
delete [] a;

167 :デフォルトの名無しさん:03/02/14 01:12
vector <int> a(size);
というのもある。
delete 書かなくていいんで楽。

168 :デフォルトの名無しさん:03/02/14 01:13
malloc をエムアロック、
realloc をリアロックと読むのに、
calloc をコーロックと読んでしまう…

169 :デフォルトの名無しさん:03/02/14 01:13
extern → えっくすタン

170 :デフォルトの名無しさん:03/02/14 01:16
malloc マロック
calloc カロック
realloc リアロック

171 :143:03/02/14 01:18
ありがとうございます♪
さっそく試してみますね。

172 :デフォルトの名無しさん:03/02/14 01:21
>>159
free(NULL);は正常に動くぞー(つうか害は無いぞ)。
まあ癖ってんならしょうがないか。

173 :デフォルトの名無しさん:03/02/14 01:30
>>163
古いCだと必用。


174 :デフォルトの名無しさん:03/02/14 01:32
stdio.h → エスティディアイオーヘッダ
stdlib.h → エスティディライブヘッダ
malloc → マロク
calloc → カロク
realloc → リアロク
extern → エクステン
strcmp → エスティアールコンプ

175 :デフォルトの名無しさん:03/02/14 01:35
>>173
なるほど。

176 :デフォルトの名無しさん:03/02/14 01:36
>>174
ライブってのは初めて聞いた
リブとかライブラリならよく聞くけど

177 :143:03/02/14 01:39
2次元のcharを扱いたいのですが、
 char moji[size1][size2];
そういう場合、intをcharに置き換えるだけではだめですよね。
応用力なくて申し訳ないです。

178 :デフォルトの名無しさん:03/02/14 01:43
char **p;と宣言して、char *とcharの配列を動的につくる。

int i;
p=malloc(sizeof(char *)*size1);
for(i=0;i<size1;i++)
p[i]=malloc(size2);


179 :デフォルトの名無しさん:03/02/14 01:48
本気なのかネタなのか判断に迷うところだ…

180 :デフォルトの名無しさん:03/02/14 01:53
もしくは、1次元配列を2次元配列かのように扱うか。

#define INDEX2(i, j, size) ((i) * (size) + (j))
#define MALLOC(type, size) (type*)malloc(sizeof (size) * (size))

p = malloc(sizeof (char) * size1 * size2); /* char p[size1][size2]; みたいなもの */
/* こんな感じで処理
 p[INDEX2(i, j, size2)] = i * j;    (p[i][j] = i * j; に相当)
*/
free(p);

181 :デフォルトの名無しさん:03/02/14 01:54
いくらなんでもネタだろう。
ていうか、漏れは二次元以上の配列は使わないな。
全部一次元で代用。
楽だし…

182 :デフォルトの名無しさん:03/02/14 01:55
MALLOC 消すの忘れてた。
しかも間違えてるし。

#define MALLOC(type, size) (type*)malloc(sizeof (type) * (size))
                                ~~~~~
だな。

183 :デフォルトの名無しさん:03/02/14 01:56
>>180
なんかスゲェ見にくいよ。


184 :デフォルトの名無しさん:03/02/14 02:00
>>183
じゃ、書いてみて。

185 :178:03/02/14 02:01
ネタ?
なんか間違っているかな(^_^;)


186 :デフォルトの名無しさん:03/02/14 02:04
初心者なんですけど…わからないよ〜。簡単なコトらしいんだけど…
どーかあたしに愛の手を。m(_ _)m
#include<stdio.h>
#define AST "********************"
#ifdef NEW

void main(void){
int i,j,k=1,n;
printf(" n = ");
scanf("%d",&n);
for(i=1; i>=1 ; i+=k){
printf("%*.*s\n", n+1, i*2-1 , AST );
if(i == n)
k= -k;
}
}
#endif
でビルドするとエラーが2個でます。
>LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
>Debug/rennsyu21.exe : fatal error LNK1120: 外部参照 1 が未解決です。
たぶんプリプロセッサあたりをなんかどーかするんでしょうけど、わかりません。
誰かよかったらお教えくださいませ。

187 :デフォルトの名無しさん:03/02/14 02:06
calloc コーラック

188 :デフォルトの名無しさん:03/02/14 02:07
>>178
まぁ、その配列をソートすることがある場合や
ジャグ配列を作りたい場合はそうするね。

そうでない場合は鬱陶しい上に解放が面倒なので
あまり使わないんじゃないかな。
使うときは便利なんだけどね。

>>186
NEW が定義されてないから
#ifdef から #endif までが無視されて、
main が無くなってエラー。

189 :143:03/02/14 02:07
>>185
俺がネタと言われてるんじゃないですか〜。
嫌な思いをさせてしまって申し訳ないです。
はじめたばかりの初心者なので、ものすごいこと言ってるかもしれないです。
1次元で代用する方法を考えてみますね。

190 :デフォルトの名無しさん:03/02/14 02:07
int mainじゃないと駄目って事かな?

191 :デフォルトの名無しさん:03/02/14 02:09
>>187
calloc は 0 クリアを伴うから malloc とは別物ジャン。

192 :デフォルトの名無しさん:03/02/14 02:09
>>186
??=ifdef NEW

↑何の為にやってんの?
 ここではじかれてるだけじゃん。
 釣られた?

193 :186:03/02/14 02:12
うおおお!ありがとうございます。試してみます>ALL

194 :191:03/02/14 02:16
>>187
スマソ。読み方のやつか。

195 :190:03/02/14 02:17
ちょっとこの場合では的外れだた(-_-;)

196 :デフォルトの名無しさん:03/02/14 02:18
ちなみに void main は別に使って悪いものではない。
例えば、終わらないプログラムは void main で良い。

197 :178:03/02/14 02:25
あ、そうか。size2の値が常に同じならば別に>>178のようにしなくてもいいのか。


198 :186:03/02/14 02:27
>>190
はわわ〜。うぐぅ。
実は、NEWの定義の仕方がわかりません〜〜エーン
#ifdef NEW
のあと、どう記述すればいいんでしょうか?
ヘルプミ〜

199 :デフォルトの名無しさん:03/02/14 02:31
>>198
もしかして、

??=ifndef NEW
??=define NEW

みたいに したいのか?


200 :デフォルトの名無しさん:03/02/14 02:33
>>198
ネタですか?
#ifdef NEW
を書いたのは自分じゃないの?
用が無いなら消せばいいし、どーしてもつけておきたいならその前に
#define NEW
とか書いておけばいい。

201 :デフォルトの名無しさん:03/02/14 02:34
>>199
??= って一瞬何のことかと思ったぞ。
# が書けないキーボードを使っているのか?

202 :デフォルトの名無しさん:03/02/14 02:35
例えば、VC++なら
mainは
mainCRTStartupから呼ばれるが、
voidだった場合はどうなるんだろう?


203 :186:03/02/14 02:36
じつは〜、正直に言いますと、
私は学生で、学校から配布されたソースを書いてビルドしているだけです。
だから、もーわけがわからない状態でして…それでこのスレに逃げ込んできました。

少々、長くなりますが( 大体2スレ分くらい )そのソースを部分じゃなく、
全部をアプしてもかまわないでしょうか? 2スレ分を容量をとることになるのですが・・・
あつかましくってすみません・・・・

204 :デフォルトの名無しさん:03/02/14 02:37
>>202
たまたま eax に入ってる値が返るんじゃない?

205 :デフォルトの名無しさん:03/02/14 02:38
>>203
2レスの間違いだよね?

206 :デフォルトの名無しさん:03/02/14 02:39
( ´д)ヒソ(´д`)ヒソ(д` )

207 :デフォルトの名無しさん:03/02/14 02:39
2スレ分って!
モノスゲェ量じゃねぇかよ!
1-1000までを2つ分!?


208 :186 その1:03/02/14 02:43
たのんます、相談にのってくださいまし〜〜〜〜m(_ _)m
#include<stdio.h>
#define AST "********************"
#ifdef NEW

void main(void){
int i,j,k=1,n;
printf(" n = ");
scanf("%d",&n);
for(i=1; i>=1 ; i+=k){
printf("%*.*s\n", n+1, i*2-1 , AST );
if(i == n)
k= -k;
}
}
#endif
/* つづきます */

209 :デフォルトの名無しさん:03/02/14 02:43
extern "C" を使わずに
C++とリンクするには
どうしたらいいですかね?
なるべく複雑でないやりかたで教えてください。


210 :186 その2:03/02/14 02:43
#ifdef OLD
void main(void){
int i,j,k=1,n;

printf(" n= ");
scanf(" %d",&n);

for (i=0 ; i>=0; i+=k){
for (j=0; j<2*n-1; j++){
if(j+1 < n-1 ll j-1 > n-1 )
printf(" ")
else
printf("*");
}
if(i == n-1)
k *= -1;
}
}
#endif

211 :186 その3:03/02/14 02:45
#ifdef OLD2
void main(void){
int i,j,k=1,n;

printf(" n = ");
scanf(" %d ",&n);

for (i= -n+1;i<= n-1;i++){
for(j=1; j<=2*n-1 ; j++){
printf( i / (( j<2*n-j)? j : 2*n-j)? " " : "*");
}
printf("\n");
}
}
#endif
以上です。お願いいたします!どうかご教授くださいませ〜〜!m(_ _)m

212 :デフォルトの名無しさん:03/02/14 02:47
>>209
素直に extern "C" 使いなされ。
こういう風にできるからさ。
extern "C" {
void foo();
void bar(int a);
int hogehoge(double a, int b);
}

>>208 >>210-211
どれをコンパイルしたいかによって
#define NEW

#define OLD

#define OLD2
かを、ファイルの先頭あたりで行えば良い。

213 :186 :03/02/14 02:48
あのね、今日テストなんだけど、この問題がビルドできなくって困っていたところなんでチュ。
たすけて〜

214 :デフォルトの名無しさん:03/02/14 02:49
誰だよこんなソース書いた奴!
こんなの参考にしない方が今後の為だゾ!

……。
cc -DNEW source.c
とかかな?

215 :デフォルトの名無しさん:03/02/14 02:49
#define NEW
#define OLD
#define OLD2
のどれか1つを
#ifdef NEW
の前の行に挿入する

216 :デフォルトの名無しさん:03/02/14 02:49
>>211
#define AST "********************"
の下あたりに
#define NEW
を入れる、じゃあだめ?


217 :デフォルトの名無しさん:03/02/14 02:51
>>208 == >186
先頭に以下の3つのうちどれか1つの行を入れれば動くと思われ。
#define NEW
#define OLD
#define OLD2

つーか「上の3つのうちどれを指定するか」で
「#ifdef〜#endifで囲まれた3つのうちどれを有効にするか」
を決めている訳だが。


218 :デフォルトの名無しさん:03/02/14 02:52
乱交会場はここですか?

219 :デフォルトの名無しさん:03/02/14 02:53
コンパイルオプションの学習じゃねえの?


220 :186 :03/02/14 02:53
おおおおっ!奇跡の予感!

221 :デフォルトの名無しさん:03/02/14 02:54
#ifdefの意味知るだけで解決できる問題だと思うんだが。。。

222 :デフォルトの名無しさん:03/02/14 02:55
>>212
おそらくC++からCをリンクするのではなく
CからC++をリンクしたいのだと思われ

223 :デフォルトの名無しさん:03/02/14 02:55
テストがあるって事は、それに足る講義が行われたはずだよな?
何でコンパイルすらできないんだ?

224 :デフォルトの名無しさん:03/02/14 02:56
どんなに複雑でもいいから
extern "C"
以外でお願いできませんでしょうか?


225 :17:03/02/14 02:57



     な   ぜ   そ   ん   な   に   e   x   t   e   r   n    "C"   を   拒   否   す   る   ?





226 :186 :03/02/14 02:58
やったー!!!(^−^)できました!
#define OLD2 でできました!
いや〜〜〜ありがとうございます!>ALL

227 :デフォルトの名無しさん:03/02/14 03:00
>>224
ひょっとしてあれか?
ライブラリはあるが、その中身に手を加えられないってことか?


228 :デフォルトの名無しさん:03/02/14 03:01
>>224
アセンブラに出力してシンボル名を書き直したら?

229 :186 :03/02/14 03:02
(^−^)
皆様、本当にありがとうございました!m(_ _)m
それでは!

230 :デフォルトの名無しさん:03/02/14 03:02
#ifndef ぬるぽ
#define ぬるぽ 0
#endif


231 :デフォルトの名無しさん:03/02/14 03:03
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>230

232 :186 :03/02/14 03:04
>>223
A.授業についていけない、おちこぼれだったからです。(^^;

233 :230:03/02/14 03:04
>>231
はえー(ワラ

234 :デフォルトの名無しさん:03/02/14 03:05
>>231
用意してたの?

235 :デフォルトの名無しさん:03/02/14 03:05
>>232
でもコンパイル作業くらいはわかっただろ?
もしかしてプログラミングなのに実習がなかったのか?^^;

236 :231:03/02/14 03:10
ぬるぽスレ開いてコピペしただけだよ(w
リロードのタイミングがよかっただけかも(w

237 :186 :03/02/14 03:10
>>235
担当の先生が答えを教えてくれないんですよ…、
自分で勉強しろ、こんぐらい雑魚でもわかる筈だろ…って。
でも私はプログラミングの経験が足りないから、シンプルなところでつまづいて
しまって…、簡単なんだけど、なかなか気づかない、一言で言えば私の勉強不足なんです。

238 :デフォルトの名無しさん:03/02/14 03:12
>>237
勉強に関しては自分で勉強するてのは原則ではあるんだが…
質問しにいって答えなかったとかならちと問題ありかも

239 :186 :03/02/14 03:17
>>238
先生と乖離している部分があって…先生は簡単なことだから説明を省略してしまったようです。
#defineなんて簡単なことだし。すばらしい先生なんですけど。
でも、確かに簡単なことなんだけどバカのボクにはわからなくって。
家に帰ってコンパイルしてみたらエラーでるし、今日試験だし・・・・
正直パニクッたからこのスレにきました。

240 :デフォルトの名無しさん:03/02/14 03:18
先生を すばらしいと 言える あなたは すばらしい。

241 :デフォルトの名無しさん:03/02/14 03:19
単発質問スレを立てずにここに来ただけで十分ましだな。


242 :デフォルトの名無しさん:03/02/14 03:19
>>186 あたし
>>237
>>239 ボク


243 :デフォルトの名無しさん:03/02/14 03:20
>>242
観察するなよw

244 :デフォルトの名無しさん:03/02/14 03:25
みんな「してやられたぜ!」な気分かな〜と思って。

245 :デフォルトの名無しさん:03/02/14 03:32
>>224
何で extern "C" が必要かを知らないクチかな?
オーバーロード、名前空間という C++ の機能を考えれば
分かると思うよん。
VC++ なら次のコードをビルドしてみれ。

void foo() { }
void foo(int) { }
namespace hoge { void foo(); }
extern "C" void foo(int, int) { }
void main() { foo(); foo(0); hoge::foo(); foo(0, 0); }

多分こんなリンクエラーが出ると思う。
Test.obj : error LNK2019: 未解決の外部シンボル _foo が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl hoge::foo(void)" (?foo@hoge@@YAXXZ) が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl foo(int)" (?foo@@YAXH@Z) が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl foo(void)" (?foo@@YAXXZ) が関数 _main で参照されました。

オブジェクトファイルとかの中では実際には
 extern "C" foo → _foo
 hoge::foo() → ?foo@hoge@@YAXXZ
 foo() → ?foo@@YAXXZ
 foo(int) → ?foo@@YAXH@Z
とか名前が変わってるわけ。(変わり方はコンパイラ依存)
extern "C" のある時(Cを使った時)とそうじゃないときじゃ
全然名前の変わり方が違うっしょ?
C++ だと引数の型や名前空間の情報も名前に含めるの。
これが同じ名前の関数を複数定義できる仕組みでもあるわけだけど。

extern "C" を使わないで何とかするんじゃなくて、
extern "C" を使って何とかする方向で考えるべきだと思われ。

246 :デフォルトの名無しさん:03/02/14 03:38
↓わかったか!

247 :デフォルトの名無しさん:03/02/14 03:42
>>246
おおむねわかったぜジョニー

248 :デフォルトの名無しさん:03/02/14 04:06
これ C++ スレの話だよな。

249 :デフォルトの名無しさん:03/02/14 04:26
>>245
勿論、解った上で聞いてるんだが…。
そうですか、無理ですか。


250 :デフォルトの名無しさん:03/02/14 04:29
じゃあ、C++のライブラリをCで使う方法を教えて下さい。


251 :デフォルトの名無しさん:03/02/14 04:32
無茶言うな


252 :デフォルトの名無しさん:03/02/14 05:00
ユークリッドの互除法で最大公約数を求めるプログラムを作ってみたんですが、
これ以上に簡潔な書き方ってありますでしょうか??暇な人いたら見てやってください。
#include <stdio.h>
int uclid(int,int);
void main()
{
int a,b;
while (1){
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
if (a <= 0 || b <= 0) break;
if (a >= b) printf("%d\n",uclid(a,b));
else printf("%d\n",uclid(b,a));
}
}
int uclid(int a,int b)
{
int n;
while (a%b != 0){n=a; a=b; b=n%b;}
return (b);
}

253 :デフォルトの名無しさん:03/02/14 05:06
void ?foo@hoge@@YAXXZ(void);
とかやって使えばいいじゃん。
? とか @ が識別子に使えないならコンパイラを改造してさ。

254 :デフォルトの名無しさん:03/02/14 05:13
11.14:
void main()と宣言してうまくいかないわけがないと思う。なぜなら main()から戻る代わりに、exit()を呼んでいるから。だいたい今使っ ているO/Sはプログラムのexit値/戻り値を無視する。

A:

main()から戻ってくるかどうかは関係ないし、そのステータスを見る かどうかも関係ない。問題はmain()の宣言がおかしいと、呼び出し側 (実行時のスタートアップのコード)がmain()を正しく呼び出すことす らできないかもしれないことにある。

君が使っているO/Sは終了時のステータスを無視して、void main()で もうまく動くかもしれない。しかし、このやりかたは移植性が低いし、 正しくもない。ボク女(;´Д`)ハァハァ

255 :デフォルトの名無しさん:03/02/14 05:18
>>253
ただ呼ぶだけじゃだめだな。
コンパイラがthisをどう渡すかとか、vtblの扱い方とか知らないと。

256 :デフォルトの名無しさん:03/02/14 06:27
>>254
ボク娘は確かに萌えるが、何故に?

257 :デフォルトの名無しさん:03/02/14 06:38
exit()で終了するのは綺麗ではないと思う。
たとえmainからでもちゃんとreturnしたいね。


258 :デフォルトの名無しさん:03/02/14 06:38
カーネルのコードとか、void main 使ってるよね。確か。

259 :デフォルトの名無しさん:03/02/14 06:44
mainはないよ

260 :デフォルトの名無しさん:03/02/14 06:45
zoid main(zoid)

261 :デフォルトの名無しさん:03/02/14 06:54
じゃ、デーモンだったかな?

262 :デフォルトの名無しさん:03/02/14 06:54
漏れも exit() はキライ
構造化の基本を無視してる

263 :デフォルトの名無しさん:03/02/14 07:14
exit嫌いはC使う資格なし

264 :デフォルトの名無しさん:03/02/14 07:16
俺も嫌いだ。
が、面倒な時は使う。

265 :デフォルトの名無しさん:03/02/14 07:17
>>264
面倒じゃないときはどうしている?


266 :デフォルトの名無しさん:03/02/14 07:24
bool 値返して全部ちゃんとエラー処理してる。

267 :デフォルトの名無しさん:03/02/14 07:26
ああ、エラー時に即終了させるってのがいけないと言っているのか。


268 :デフォルトの名無しさん:03/02/14 07:53
ていうか、むしろexit使う時なんてある?
使ったことないよ。

269 :デフォルトの名無しさん:03/02/14 07:56
ちゃんとエラー処理してれば、自然に main に行き着くと思うのだが。

270 :デフォルトの名無しさん:03/02/14 07:58
main内でreturnでなくあえてexitを使う意味とは?
まさかvoid mainだから?


271 :デフォルトの名無しさん:03/02/14 08:19
exitとかロングジャプンとか
一度は使ってみたいけど
機会がない

272 :デフォルトの名無しさん:03/02/14 08:26
>>269
void usage()
{
  fprintf(stderr, "cmd: [-H | -L ] [-Aoutd] [file...]\n");
  exit(1);
}
などは典型的な例だが見たことないか?
mallocに失敗した場合にできることが殆どないプログラムの
場合は、単にエラーを吐いて死ぬようなmallocラッパーを使うことも
多いだろう。


273 :デフォルトの名無しさん:03/02/14 08:32
>>272
なるほど、
でも、やっぱり使わないなぁ…
所詮は好みの問題か。

他にはcoolな使い方無いかな?

274 :デフォルトの名無しさん:03/02/14 08:33
>>252
uclid()の仕様が……
大小判断くらい関数内でしてもいいんでないかい?
それと、私ならscanf()は使わない。

どうでもいいけど、
while (1)

return (b);
がもにょる。

275 :デフォルトの名無しさん:03/02/14 08:37
私はexit()を使わない方。

int main(int argc, char **argv)
{
 /* 処理 */
 if (/* 条件 */) {
  usage(argv[0]);
  return EXIT_FAILURE;
 }
 return EXIT_SUCCESS;
}

276 :デフォルトの名無しさん:03/02/14 08:39
>>275
mainにいないときは?

277 :デフォルトの名無しさん:03/02/14 08:46
argv[0]を渡す意味がわからん。


278 :デフォルトの名無しさん:03/02/14 08:54
漏れは

return usage(/*argv[0]もあるかな*/);

かな。
argv[0]はウィンドズだと変になるからねぇ。


279 :デフォルトの名無しさん:03/02/14 08:56
>250
COMをまなびなはれ

280 :デフォルトの名無しさん:03/02/14 09:12
>>276
main() 以外のいろんな箇所から、使用法を表示して直ちに終了という処理が
必要になるなら、プログラム設計をやり直した方がいい。

281 :デフォルトの名無しさん:03/02/14 10:25
#include <stdio.h>
int uclid(int a,int b){
int n;
while(a%b){n=a; a=b; b=n%b;}
return b;
}
void main(){
int a,b;
while (1){
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
if (a <= 0 || b <= 0) break;
printf("%d\n",uclid( a<b?b:a, a<b?a:b));
}}


282 :デフォルトの名無しさん:03/02/14 10:30
a,bにunsigned付けときゃ負の判定要らんか?

283 :デフォルトの名無しさん:03/02/14 10:59
mallocって充分に速いのか?
予め多く確保しておいた方がいいのか?


284 :デフォルトの名無しさん:03/02/14 11:18
ファンクションの定義というのはどうやったらいいのでしょうか?
関数の定義の仕方は解るのですが、同じような感じにやったらいいのでしょうか?
初心者な質問ですみません…


285 :デフォルトの名無しさん:03/02/14 11:21
その前に関数とファンクションの違いを述べてくれ。

286 :デフォルトの名無しさん:03/02/14 11:27
>>283
測定すればいい。それが「十分に早い」かどうかは、そのプログラムに対する
性能要求・環境・mallocの実装の質etc...に依存するので、一般的な回答は
有り得ない。
それでも敢えて云うならば、平均的なC++プログラムではそれこそ山のように
new/deleteが暗黙に使用される(自分で呼んだつもりはなくとも、stringや
vectorのような一般的な道具を使うたびに当然暗黙には使用される訳だ)
ことを考えれば、いわゆるHosted environmentにおいてCを使っている分には、
mallocの性能なんぞ気にする必要はなかろう。


287 :デフォルトの名無しさん:03/02/14 11:47
今学校から携帯で書き込みです
五個の配列を合計して割って平均値を出したいのですがこのソースでできますか?今コンパイル環境がないのでよろしくお願いします
int test[5]={100,90,80,70,60}
int count,avg;
avg = 0;
for(count=0; count<=4; count++){
avg=avg+test[count];}
printf(゙%d\n゙,avg/5);

288 :デフォルトの名無しさん:03/02/14 11:59
>>287
出来ない。

289 :デフォルトの名無しさん:03/02/14 12:04
ネタでないことを祈るが
1行目の;が(ry
avg(ry)sum(ry
ダブルコーテーションが(ry
mai(ry

290 :デフォルトの名無しさん:03/02/14 12:32
全角文字のA→Zまでを出力したいんだけど、
○の部分にはなにをいれればいいです?
検索のキーワードのヒントだけでもいいです。

#include<stdio.h>

int main()
{
unsigned int i;

for(i = 'A'; i <= 'Z'; i++)
{
printf("%X, %○\n",i, i);
}

return 0;
}

291 :デフォルトの名無しさん:03/02/14 12:33
>>290
カコイイ!

292 :デフォルトの名無しさん:03/02/14 12:33
>>287
つまり、テスト中に携帯からカンニング中ということですか?

293 :デフォルトの名無しさん:03/02/14 12:41
>>290
マック使いカコイイ!
それかX68kか?


294 :290:03/02/14 12:42
あ、ちなみにVC6です。

>>291, >>293
やっぱ、このソースじゃ全角文字の出力は無理?

295 :デフォルトの名無しさん:03/02/14 12:44
''でASCII以外の文字囲めるの?

296 :デフォルトの名無しさん:03/02/14 12:49
unsigned int i;
for(i='A'; i<='Z'; i++)
{
 printf("%04xH, %c%c\n", i, i>>1, i&0xff);
}

マックだよね?


297 :296:03/02/14 12:52
>>294
マックじゃねぇのかよ。
じゃあひっくり返したらいいよ


298 :デフォルトの名無しさん:03/02/14 13:07
>>297
ひっくり返すってのは1バイト目と2バイト目をひっくり返すってこと?

299 :デフォルトの名無しさん:03/02/14 13:16
>>295も云ってるが、今どきの普通の計算機ではchar型=1byte=8bitであって、
少なくとも俺が知っている範疇のC言語ではシングルクオートによる
文字リテラルではchar型しか扱えないんだから、その中に
ワイド文字がブチこんである時点でよく分からない。
本当はL'A'
と書いてあったのか?
だとすると、エンディアン変換を適当に行って1バイトずつ出力しても
思ったとおりの結果にはならない可能性が高いよ。ワイド文字の
エンコーディング方式は規格上は何も定義されていないが、
多くの処理系はそれをUCS2/UCF16/UTF32などでエンコードするからね。



300 :デフォルトの名無しさん:03/02/14 13:18
>UCS2/UCF16/UTF32
すまんUTF16の間違いね。もちろん。


301 :デフォルトの名無しさん:03/02/14 13:32
>>299
少なくともSunOSでは扱える。
Versionが4の頃と5になってからではバイト順が変わってしまった気がするけど。

302 :デフォルトの名無しさん:03/02/14 14:12
#include <stdio.h>
int main(){
unsigned int i, z, w;
i=*(unsigned int *)"A\0\0";
w=(i&0xff)<<8;
i=(i>>8)|w;
z=*(unsigned int *)"Z\0\0";
w=(z&0xff)<<8;
z=(z>>8)|w;
for(; i<=z; i++)
{
printf("%02x%02xH, %c%c\n", i>>8, i&0xff, i>>8, i&0xff);
}
}

携帯だから確認できん、だれか試して。


303 :デフォルトの名無しさん:03/02/14 14:17
わざわざ引っくり返さなくてもprintf()で順番変えればいいじゃん。

304 :デフォルトの名無しさん:03/02/14 14:18
>>303
forの時にヤバイのよ。

305 :デフォルトの名無しさん:03/02/14 14:24
どうせ実装依存なんだから、
i += 256;
でいいと思ったり。

306 :デフォルトの名無しさん:03/02/14 14:28
リッチなカニチャーハンの本の誤植?は改訂版でも修正されてないですか?


307 :デフォルトの名無しさん:03/02/14 15:54
>>302
お、できた。
ありがとう。

308 :デフォルトの名無しさん:03/02/14 16:14
3連文字って誰が使うの? インド人?
メヂャーな国で使うとこってあるの?
スペーンとかフランスとか、、、


309 :デフォルトの名無しさん:03/02/14 16:19
strdupってC999から標準になった?
なったよね?


310 :デフォルトの名無しさん:03/02/14 16:23
>>308
北欧各国で使うんでない?

311 :デフォルトの名無しさん:03/02/14 19:27
forkはC9999から標準になる予定


312 :デフォルトの名無しさん:03/02/14 19:29
C9999なんて要らん。C9989で十分。

313 :デフォルトの名無しさん:03/02/14 19:30
C99999から文字列型stringを標準サポート

314 :デフォルトの名無しさん:03/02/14 19:34
その前にガベコレ

315 :デフォルトの名無しさん:03/02/14 19:39
 ぬ  る  ぽ

316 :デフォルトの名無しさん:03/02/14 19:41
>>315
ガッ

317 :デフォルトの名無しさん:03/02/15 02:16
ここって初心者の質問でもOKでしょうか。

int hage[3000];
という配列の hage[1901]からhage[2030]までを値を代入して初期化したいのですが、
hage[]={ 1,2,3,4,5,6,7,8,9 ・・・・・};
みたいなふうにして、1901から値を代入することってできますか。
方法があれば教えてください。
今は、別配列にいったん入れてからコピーしています。


318 :デフォルトの名無しさん:03/02/15 02:19
初心者の質問しか受け付けません

>>317
入れる値がばらばら(規則性がない)なら一つずつ入れるかあなたの言うようにmemcpyなどで別配列からコピーするしかない。

319 :デフォルトの名無しさん:03/02/15 02:22
>>317
年を入れるつもりなのだな。
それなら、int hage[130]で宣言して、i+1901で参照すればいいのでは?


320 :317:03/02/15 02:51
回答ありがとうございまふ
入れる値は規則性は、厳密に言えば無くはないんですが、複雑で別プログラムで計算したものを
代入しています。
やっぱり方法はないんですか。
配列は最終的には、3000全部使う予定なので>>319さんの方法ではだめなんです。

int hage[1900]=[1,2,3,4,5,6,・・・];
みたいに書くことができれば理想なんですが。


321 :デフォルトの名無しさん:03/02/15 03:14
C言語は、どのくらいで習得できますか?

322 :デフォルトの名無しさん:03/02/15 03:22
>>321
そのうちに習得できます

323 :デフォルトの名無しさん:03/02/15 03:22
>>321
大体1週間くらいあれば十分かな。


324 :デフォルトの名無しさん:03/02/15 03:26
>>321
この週末だけで習得可能 

325 :デフォルトの名無しさん:03/02/15 03:28
http://ime.nu/3.141592653589793238462643383279502884197169399375105820974944592.jp/

326 :デフォルトの名無しさん:03/02/15 03:50
>>320
コンパイラが耐えられるのであれば、何らかのプログラムで
初期化する式(コード)を生成して、それをソースにするという手はある。
PerlとかRubyとかawkとかいったスクリプト言語系ならお手軽だろう。


327 :デフォルトの名無しさん:03/02/15 03:55
>>287
宿題スレに行け

328 :デフォルトの名無しさん:03/02/15 07:18
union {
 int a[3000];
 struct{
  int b[1900];
  int c[2100]={1,2,3,3,5,6};
 };
};

ってのは無理なのですか?


329 :デフォルトの名無しさん:03/02/15 07:46
>>328
名前の無い構造体って作れたっけ?

330 :デフォルトの名無しさん:03/02/15 07:52
>>329
問題はそこでなく、配列を途中から初期化することで、、

331 :デフォルトの名無しさん:03/02/15 09:35
>>328
・書式が間違っている。
・1900+2100は4000だろう。計算はできるだけ自分でするな。
・こうすりゃできるけどやっぱり面倒だぞ。

#define SEC1LEN 1900
#define SEC2LEN 1100

union {
 struct {
  int sec1[SEC1LEN];
  int sec2[SEC2LEN];
 } sec;
 int all[SEC1LEN + SEC2LEN];
} data = {{{0,}, {1, 2, 3, 4, 5,}}};


332 :デフォルトの名無しさん:03/02/15 11:05
まぁ、何にせよ memcpy か for かで代入するのが一番いいと思うが。

333 :デフォルトの名無しさん:03/02/15 15:02
->これウザくない?
strub point *p;
p->x

p.x
ってかけるようにしてくれよ。
構文上あいまいになることもなさそうだし。

334 :デフォルトの名無しさん:03/02/15 15:10
p->xはたしか
(*p).xって書くのがめんどいからあるんじゃなかったっけ

335 :デフォルトの名無しさん:03/02/15 15:10
>>333
. と -> の優先度は同じだが?
巨大な構造体を関数に渡す時はポインタを使った方が効率が良いんじゃないか?

336 :デフォルトの名無しさん:03/02/15 15:19

p->xとp.xは違うデアリマス。セグメンテーションフォールト起こしそうであります。

337 :デフォルトの名無しさん:03/02/15 16:01
構造体の配列

338 :デフォルトの名無しさん:03/02/15 17:43
プログラム談議に花を咲かせているところ申し訳ないが、
今日はどうしてもみんなに言っておかなければならないことがあるんだ。
そしてみんなも、この言葉を胸に深く刻み込んで、
これからの人生を力強く生きていって欲しい。


 貧 乳 マ ン セ ー !


339 :デフォルトの名無しさん:03/02/15 19:13
デバッグができません!!!!!!!!
助けてください!!!!!!!!!!!!!!

340 :デフォルトの名無しさん:03/02/15 19:27
>>338
氏ね。

だが貧乳マンセーにはもげしく同意。

341 :デフォルトの名無しさん:03/02/15 19:42
>>333
CではいいがC++がとんでもないことになるのでやめてくれ

342 :デフォルトの名無しさん:03/02/15 20:10
なんでCではいいんだよ。


343 :デフォルトの名無しさん:03/02/15 21:29
↑仮定の話だという事が理解できないヤシ

344 :デフォルトの名無しさん:03/02/15 21:38
リトレンディアンと
ビッゲンディアン
どっちが好き?
漏れはリトレンディアンかな。
MIDIとかネットでメンドイけどね…

345 :デフォルトの名無しさん:03/02/15 21:41
ポインタの場合は参照先を、
そうでない場合はそれ自身を使う、
という仕様で何か問題ある?

::, ., -> は全部 . に統一しる!

346 :デフォルトの名無しさん:03/02/15 21:41
>>343
仮定・・・?

347 :デフォルトの名無しさん:03/02/15 21:42
>>345
Dではそうなってるよ

348 :デフォルトの名無しさん:03/02/15 21:44
>>347
struct HOGEEE **pの場合はどうするんだろ。
二回間接参照するのか?

349 :デフォルトの名無しさん:03/02/15 21:54
'.'と'->'を統一しろなんて言ってる香具師は、
きっと「漏れ2重ポインタも理解できます」なんて面接で言っちゃうんだろうなぁ。

350 :デフォルトの名無しさん:03/02/15 22:08
>>348
Dでダブルポインタ使うメリットってあんまり無いぞ。

351 :デフォルトの名無しさん:03/02/15 22:13
>>347
>>350
Dの話ならスレ立てて勝手にやってくれ。

>>349
この前「ダプルポインタは理解できますがトリプルポインタは自信がありません」と言った奴がいたよ。

352 :デフォルトの名無しさん:03/02/15 22:14
じゃあ変数もvar型で統一して、整数も文字列も代入・演算できるようにすれば?


353 :デフォルトの名無しさん:03/02/15 22:22
>>345
アロー演算子が嫌なら (*p).hoge とでもやっとけば?

354 :デフォルトの名無しさん:03/02/15 22:35
トリプルポインタは
漏れもちょっと自身がないな。


355 :名無しさん:03/02/15 23:02
そもそもポインタは一つだけにすべし。二回以上の参照は悪。
char *argv[] だ。

356 :デフォルトの名無しさん:03/02/15 23:06
やさしいCのファイルに文字を出力するところでつまずいてるので、
助けていただけませんか?
ファイルをオープンして、それに書き込むところの
fputs("Hello!\n", fp);
の処理なのですが、このfpはいったい何を指してるのでしょうか?
なぜfpが必要なのでしょうか?教えていただけませんか?

もし、全体のソースコードが必要なら載せます。
では、よろしくおねがいします。

357 :デフォルトの名無しさん:03/02/15 23:06
ポインタ配列はどうなるんだ?

358 :デフォルトの名無しさん:03/02/15 23:11
>>356
その本に書いてあるはずだが。

359 :356:03/02/15 23:12
>358
読んでも、FILE *fpはファイルポインタ、ということしか書いてなく、
fputs("Hello!\n", fp);のfpの意味がわからないのです・・・。
どうか教えていただけませんか?

360 :デフォルトの名無しさん:03/02/15 23:13
>>356
ファイルハンドルに決まってる堕炉。

361 :デフォルトの名無しさん:03/02/15 23:14
>>359
ならば聞こう。
fpを渡さずにどうやって書き出すファイルを識別するんだ?

362 :デフォルトの名無しさん:03/02/15 23:17
>>356
FILE* fp = fopen("hogehoge", "w");
fp->fputs("hogehoge");
と言う事だ、わかったか?

363 :デフォルトの名無しさん:03/02/15 23:18
>>362
> fp->fputs("hogehoge");

ちょっとまて。


364 :デフォルトの名無しさん:03/02/15 23:19
ぬるぽ

365 :356:03/02/15 23:24
あぁ、理解できました。その書き出すファイルを識別するためのものなのですね。
で、もうひとつ質問です。
私今自分が書いた文字をテキストに書き出そうとしてるのですが
char memo[100];
scanf("%s",memo);
でmemo[]に格納した文字があるとしますよね?
そしたら、その文字をtxtファイルに書き出すときfputsで
どのようにすればいいのでしょうか?
今までは
printf("%s",memo);
でできたのですがfputsでやる場合はどうすればいいのか・・・

fputs("%s",memo,fp);
かなと思ってやってみたところできなく、fpとは何かの質問をしたわけです。
どうかよろしくお願いします。

366 :デフォルトの名無しさん:03/02/15 23:26
ぶっぶー。
fputsのプロトタイプ
int fputs(char * buf, FILE * fp);

367 :デフォルトの名無しさん:03/02/15 23:27
おおっと、const忘れてたぜ。

368 :デフォルトの名無しさん:03/02/15 23:27
>>365
fputsのソースを読めば解る

369 :デフォルトの名無しさん:03/02/15 23:31
fputs(memo,fp)




370 :356:03/02/15 23:32
う〜ん、わかりません・・・。
char memo[100];
scanf("%s",memo);
で入力した文字をテキストに書き出すのは
fputs()でもできるんですよね?

371 :356:03/02/15 23:37
>369
ありがとうございました。
その方法でできました。
どうもありがとうございました。

372 :デフォルトの名無しさん:03/02/15 23:38
> char memo[100];
> scanf("%s",memo);
うお!こっこれは、噂のノーガードパターン??

373 :デフォルトの名無しさん:03/02/15 23:40
> 今までは
> printf("%s",memo);
> でできたのですがfputsでやる場合はどうすればいいのか・・・

この前提が間違っている。
fputs() と対であるのは printf() ではなく puts() だ。
printf() と対なのは fprintf()。

374 :デフォルトの名無しさん:03/02/15 23:43
DOSで、ひらがなや漢字をキーボードから入力したいのですが
それはどうやればいいのでしょうか?
IMEが使えないし・・・
教えていただけないでしょうか?


375 :デフォルトの名無しさん:03/02/15 23:43
fopen成功したかチェックとfcloseも忘れるな

376 :デフォルトの名無しさん:03/02/15 23:50
>>374
Cとは関係ない

377 :デフォルトの名無しさん:03/02/15 23:54
>>374
いまどきDOSなんか使わないでWindows使いなよ。
コマンドプロンプトもあるんだし。


378 :デフォルトの名無しさん:03/02/15 23:54
本当にみなさんありがとうございました。
>>373
いえ、そういう相対的な意味ではなく、
「今まではDOS窓にprintf()でできた。ファイルに書き込むのはどうやるんだ?」
という意味です。まだ入門書レベルなのでfprintf()やputs()等は知りません。

>>375
それは大丈夫です。
しっかりとfclose(fp);をつけてますので。

379 :374:03/02/15 23:56
いや、
char hoge[10];
gets(hoge);
等で文字を入力するとき、DOS窓から漢字などを入力したいのです。
どうか教えていただけませんか?


380 :デフォルトの名無しさん:03/02/15 23:57
IMEが使えないなんてウソだろ。
C:\>dosime
C:\>selkkc
とか試したか?


381 :デフォルトの名無しさん:03/02/16 00:01
何でどの参考書もわざわざクセのあるprintf scanf から教えるんだろう。
gets puts から始めりゃいいんじゃねぇの?
getsの文句はとりあえずおいといて

382 :デフォルトの名無しさん:03/02/16 00:01
メモ帳からコピペが簡単

383 :374:03/02/16 00:01
>380
それはやってないですが、
char hoge[10];
gets(hoge);
のようなばあい、それは使えませんよね?
いきなり文字入力画面になるので。

384 :デフォルトの名無しさん:03/02/16 00:04
だからWindowsでアプリ組めって

385 :デフォルトの名無しさん:03/02/16 00:04
>>381
printf scanf はデバッグに便利

386 :デフォルトの名無しさん:03/02/16 00:05
>>383
Alt + 半角/全角キー
押しても出てこないのか?
普段マウスでIME使う人?


387 :デフォルトの名無しさん:03/02/16 00:09
>>383
gets()は使うな。

388 :デフォルトの名無しさん:03/02/16 00:10
>>386
374じゃないけど、Alt + 半角/全角で出たよ
普段は半角/全角だけでやってる
Alt + 半角/全角はWin95以来使ってない

389 :デフォルトの名無しさん:03/02/16 00:11
>>378
fclose()のエラーチェックも忘れるなよ。

390 :374:03/02/16 00:12
>384
Windowsの文字入力ダイアログのようなものを作れってことですか?
それが一番やりたいんですけど、本にも載ってませんし
作り方がわからないんですよ。
Javaスクリプトなどなら簡単なのですが・・・。
Cでダイアログ形式はできないんです。

391 :356:03/02/16 00:14
>>389
エラーチェックとは何をすればいいんですか?
main関数の最後にfclose(fp)をつけるだけじゃだめなのですか?


392 :デフォルトの名無しさん:03/02/16 00:17
>>390
BCC DeveloperとBCCForm and BCCSkeltonを拾ってきなさい。


393 :デフォルトの名無しさん:03/02/16 00:19
>>356

fclose()の戻り値をちゃんと確認すること。
勿論、fputs()の戻り値もちゃんと確認しろよ。
ちなみに、どっちも正常終了なら0だ。

394 :374:03/02/16 00:22
>392
VisualStudio.NETではできないのですか?
同じようなことを。

395 :デフォルトの名無しさん:03/02/16 00:23
>>390
猫逝け。以上。

396 :デフォルトの名無しさん:03/02/16 00:24
>>394
VC++もってるならVC++のダイアログエディタを使いなさい。
VC++ならMFC使ってちょちょいのちょいで出来るでしょ?

397 :374:03/02/16 00:30
>395
モニタ通して見るの疲れるんで、明日本買ってきます。

>396
わかりました。まだVisualStudio内のVisualC++で
コンソールアプリの製作しかしたことないんで・・・。
ダイアログエディタ、使ってみます。
便乗質問ですが、VisualStudioの使い方覚えるのに
VisualC++の本を買うのは正解でしょうか?
やめといたほうがいいですか?


398 :デフォルトの名無しさん:03/02/16 00:33
>>397
ヘルプで十分

399 :374:03/02/16 00:37
>398
わかりました。

というか・・・
ついさっきVisualStudio→新規プロジェクト→VC++→MFCアプリで
やってみたのですが、ダイアログエディタなんて見当たらないのですが・・・。
ツールバー一式を見ても見当たらないし・・・
どこにあるんですか?

400 :デフォルトの名無しさん:03/02/16 00:40
リソース

401 :デフォルトの名無しさん:03/02/16 00:50
C言語に勉強にVisualStudioですか?んったくおめでてーなー。

402 :374:03/02/16 00:51
リソースビューのことですか?
それならMFCアプリではなくてもありますね。

でも・・・何もない・・・。
MFCアプリとして新規プロジェクトを作ったらリソースビューにも
いろいろあってわかったのですがコンソールアプリとして作った場合、デフォルトでは
何もないんです。
やっぱり全然使いこなせてないなぁ。


403 :デフォルトの名無しさん:03/02/16 00:52
>>401
黙れ小手川

404 :374:03/02/16 00:56
すいません。
やっぱり、自分で手探りでやってみます。
わからなくても、それが自分のためになると思ったので。
今までの自分の書き込みを見たら教えて厨丸出しだったので。
どうもすいませんでした。

405 :デフォルトの名無しさん:03/02/16 05:05
>>348
* か [ ] してから . だろうな。

406 :デフォルトの名無しさん:03/02/16 18:14
>>404
KKCFUNC.SYS
COMMAND.COM
MSIME.SYS
MSIMED.SYS
MSIMEK.SYS
ADDDRV.EXE
MSIMEKEY.INI
MSIMER.DIC
MSIME.DIC
DOSIME.SYS
を用意してpathを通す。


//バッチファイルでDOSIME.SYSを組み込む
ADDDRV DOSIME.SYS

//DOSIME.SYSの記述
devicehigh=KKCFUNC.SYS
devicehigh=msimek.sys /A3 /SB32 /SD32
devicehigh=msime.sys /D*msimer.dic /C1 /N /A3 /Dmsime.dic
//スイッチはネット調べるよろし。


407 :374=404:03/02/16 18:19
>>406
ん?それは私に対してのレスですか?

408 :デフォルトの名無しさん:03/02/16 18:26
>>406
入力用ダイアログ作るって事になったんだから、もう良いじゃんよ。

409 :デフォルトの名無しさん:03/02/16 18:28
スレ違いも甚だしいな

410 :404:03/02/16 18:35
今ダイアログエディタの使い方を覚えて、
文字の入力できるダイアログを作ろうとがんばってます。

411 :デフォルトの名無しさん:03/02/16 19:51
超初心者の質問ですがすいません。
今、cygwinと言うソフトを使ってCの勉強を始めようと思ったのですが、
メモ帳で書き込んだファイルを読み取ってくれません。
(cygwinの表示画面にls、CATなどを打ちこむと、
 NO SUCH FILEとか出てしまいます。)
どうすれば良いか、わかる方いらっしゃいませんか?
スレ汚しすいません。 sage

412 :デフォルトの名無しさん:03/02/16 20:17
>>411
それはC以前の問題だ。
cygwinスレいけ(あるかどうかしらんが)

413 :デフォルトの名無しさん:03/02/16 20:36
関係ないけど>404の行動ができるやつは
2chにどれくらいいるんだろう

414 :デフォルトの名無しさん:03/02/16 21:04
>>413
本人の書き込みであって欲しいけどね。

415 :デフォルトの名無しさん:03/02/16 21:07
>>412
むしろPC初心者板。
hello.c.txtなどというファイルを作ってるに5120ウォン

416 :デフォルトの名無しさん:03/02/16 21:12
>>413
むしろああいう書き込みは不愉快^^;

417 :404:03/02/16 21:30
>413
>414
ありがとうございます。

>416
なんでですか?

418 :デフォルトの名無しさん:03/02/16 21:54
で、できたの?

419 :デフォルトの名無しさん:03/02/16 21:59
>>418
ありがとうございました。

420 :404:03/02/16 22:01
いえ、まだです。
ダイアログエディタで作ったダイアログを.rcファイルとどう絡ませればいいのか
わからないんです。
作った.exeを起動したら、win文字入力ダイアログが出てきて、
文字を入力、保存。
すると保存した文字はmemo.txtに保存され、TClockのツールチップとして表示・・・。
こんなんを作りたいんですが・・・。
.cのソースはできたんですけど、DOSで開かないでWinで開くのにはどうしたらいいのか・・・

421 :デフォルトの名無しさん:03/02/16 22:18
>>420
どっちかというと
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/
向けかと。
コンソールアプリとWin32APIアプリと使いわけてる?

422 :404:03/02/16 22:36
>>421
いえ、使い分けてません。
VisualStudioで、新規プロジェクト、VisualC++、コンソールアプリ、
の手順で作成しましたから。
そっちのスレにいって聞いたほうがいいですか?

423 :デフォルトの名無しさん:03/02/16 22:37
質問する前に基本的なことぐらい勉強しとけ

424 :デフォルトの名無しさん:03/02/16 22:42
VC++ なら Windows スレじゃなくて VC++ スレだろ

425 :デフォルトの名無しさん:03/02/16 22:49
よっしゃ、教えてくれ!
rubyはなぜ.でつなぐんだ?


426 :デフォルトの名無しさん:03/02/16 22:53
>>425
まことに遺憾ながら、あなたの発言を原因に地球が滅ぼされる事が決定されました。

427 :デフォルトの名無しさん:03/02/16 22:53
>>404
MFCはMFCのAppWizardで作れって。

428 :デフォルトの名無しさん:03/02/16 23:08
愛子様のご成長を見守るスレ

429 :デフォルトの名無しさん:03/02/16 23:43
しつもん。
char *p = "Hello, C";
printf("%s\n", p);
この場合、
pの指す値("Hello, C")はどこにあるのですか。
そしてこいつの内容は"Hello, C"であるといつまで保証されていますか。

ぼくにはわかりません。

430 :デフォルトの名無しさん:03/02/16 23:51
>>429
その餌じゃ大漁は無理ぽ

431 :デフォルトの名無しさん:03/02/16 23:51
>>429
>どこにある
どこか。それはコンパイラが知っている。
>いつまで
必要なだけ。書き換えなければいつまでもそのままだろ。

432 :429:03/02/17 00:00
わりとまじめに質問してるんですけど。

char *p = "Hello, C";
(何らかの処理)
printf("%s\n", p);
とした場合、
printfでpが参照されている時点では、pが指す値は"Hello, C"であると保証されているのですか?

433 :デフォルトの名無しさん:03/02/17 00:06
>>432=429
何らかの処理の間に書き換えてしまう可能性は常にある。
だから、誰も保証はしないだろ。
何らかの処理の間に書き換えてさえいなければ大丈夫だ。

434 :デフォルトの名無しさん:03/02/17 00:16
文字列リテラルが書き換え可能である保証はない。
たぶん不可能な処理系の方が多いのでは。

435 :デフォルトの名無しさん:03/02/17 00:46
FAQ だな。
C FAQ 読んできてよ。

436 :429:03/02/17 00:48
>>433
あ、そらそうですよね。
たとえば、
void foo(){
char str[] = "Hello, C";
char *p = "Hello, C";
(何らかの処理。p,strの指す内容の書き換えは行わない)
printf("%s\n", str);
printf("%s\n", p);
}
という場合、配列strの内容については、
こちらが明示的に書き換える処理を行わない限り"Hello, C"
でありつづけることが保証されているように思えます。
といいつつ、本当はよく知りません。

pの指す内容については明示的に領域を確保していませんよね。
この場合、どのように扱われるのでしょうか。
一時的にメモリのどこかに確保されるとは思うのですが、
そこから先どういう扱われ方をするのかわかりません。
その内容はいつ破壊されていてもおかしくない。ということなのでしょうか。


437 :デフォルトの名無しさん:03/02/17 00:55
>>434
仕様上は不可能。
constがついていないのは過去のソースとの互換性のためかと。
char *p="ぬるぽ"; これでいちいち警告を出されたらたまらん。


438 :デフォルトの名無しさん:03/02/17 01:15
>>436
pの指す内容はコンパイラがどっかに確保してくれてる。
というか、文字列で明示的にどこかを指すように保証してるじゃないか。

んでも、厳密に文字列リテラルがどこにあるかを知ってるのは
コンパイラじゃなくてリンカだろうな。リンク時に確定するはず。

439 :デフォルトの名無しさん:03/02/17 01:17
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>437

440 ::03/02/17 01:20
ぽ

441 :デフォルトの名無しさん:03/02/17 01:20
pが指す"Hello, C"文字列の内容が書き換えられないことは仕様で決まっていても
pがいつまでも"Hello, C"を指してる保証はまったくないわけだが

442 :デフォルトの名無しさん:03/02/17 01:24
>>441
誰がそんなこといった??

443 :デフォルトの名無しさん:03/02/17 01:50
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>440

444 :デフォルトの名無しさん:03/02/17 02:14
>>442
*p = 'a'; は出来ないが、p = NULL; は出来るって事だろ。

445 :デフォルトの名無しさん:03/02/17 02:22
>>444
できるけど、誰も「できない」とは言っていないでしょ?
ひとりごと

446 :デフォルトの名無しさん:03/02/17 06:24
>>436
"Hello, C" と "%s\n" はどっちもリテラル
だからこれは両方とも同じ結果になる
char *p = "Hello, C";
printf("%s\n", p);

char *p = "Hello, C\n";
printf(p);


447 :デフォルトの名無しさん:03/02/17 09:19
void tst1(){
char *p= "Hello, C\n";
char a[] = "Hello, D\n";
p=a;
*p='B';
printf(p);
}

void tst2(){
char *p = "Hello, C\n";
printf(p);
}

void tst3(){
char *p = "Hello, C\n";
*p='B';
printf(p);
}


448 :デフォルトの名無しさん:03/02/17 10:14
void test(){
 char a[];
 char *b;

 printf("%d %d %d\n", a[0], a, &a);
 printf("%d %d %d\n", *b, b, &b);
}

(´∀`)なんじゃこりゃ

449 :デフォルトの名無しさん:03/02/17 10:41
>>446
>"Hello, C" と "%s\n" はどっちもリテラル
>だからこれは両方とも同じ結果になる
>char *p = "Hello, %C";
>printf("%s\n", p);

>char *p = "Hello, %C\n";
>printf(p);

違う結果だ。


450 :デフォルトの名無しさん:03/02/17 10:48
\%C

451 :デフォルトの名無しさん:03/02/17 10:54
%%%%C

452 :デフォルトの名無しさん:03/02/17 12:01
perlを一通り勉強し終えたので
次にc/c++に移りたいと思っているのですが
cを学習してからc++に移るべきか、それとも
c++だけでcの学習は無くてもc++の内容を理解できるか、
どなたかお教えいただけませんか。

453 :デフォルトの名無しさん:03/02/17 12:03
>>442,445

432が保証されてるかどうか聞いてるんだから保証されてないと答えるのは当然だと思うが。
それとも誰かが保証されてると答えてからでないと、保証されてないと答えてはいけないのか?

454 :デフォルトの名無しさん:03/02/17 12:20
>>452
俺の経験から行くと、Cの仕様書を読んでからC++をはじめたほうがいい。
多言語経験があればC++から始めてもまったく問題なく使えるが、
一見C++とCの共通項に見えて実はCにしかできないこと、Cにはできないこと、などがあいまいになってしまう。

普通こういうコミュニティとかではCが共通語として使用されるので
Cで書いたつもりになってても、じつはC++にしかない機能を使ってたりなんてことがよくある。

455 :デフォルトの名無しさん:03/02/17 12:48
未だに分からんのだけど、
仕様書と規格書の違いは何?

456 :411:03/02/17 13:07
≫412≫415
遅れましたが、レスどうもです。
言われたとおり初心者板で聞いてみます。
でも、.txt なんて打ってないんですが…。
ありがとうございました!!!

457 :デフォルトの名無しさん:03/02/17 13:52
ANSI規格・JIS規格・ISO規格・IEEE規格

458 :デフォルトの名無しさん:03/02/17 14:57
>>454
レスどうもです。
背中を押して頂きました。
やはり横着をして楽をする訳には
いきませんね。
cから、学習を始めます。


459 : :03/02/17 16:50
浮動小数点がどのように表現されているか知りたくて
Intel Pentium III Xeon , Debian GNU/Linux 3.0r1, GCC 2.95.2 で試してみました。

1)float に適当な浮動小数点を代入。
2)sizeof (float) によると4バイトらしい。
3)メモリに格納されている float をアドレスの小さい方から見てみる。

0.5 => 0,0,0,63
1.0 => 0,0,128,63
2.0 => 0,0,0,64
4.0 => 0,0,128,64
-0.1 => 0,0,128,191

む・・・・規則がわからん。


460 :デフォルトの名無しさん:03/02/17 17:03
符号と仮数部と指数部

461 : :03/02/17 17:12
いや、それはわかるし、 IEEE 標準のフォーマットも知ってるんだけど、
なんでそれで >>459 みたいな表現になるのかと・・・
0.5 と 1.0 の関係とか・・・

462 :sage:03/02/17 17:15
>>459
とりあえず IEEE754 か IEC559 嫁


463 :デフォルトの名無しさん:03/02/17 17:16
>>461
そこまで分かってるなら…
x86はリトルエンディアンだから、アドレスの大きい方から逆順に見ないと
だめだし、10進数のままじゃ理解しにくいだろうから2進で表示したら?


464 :デフォルトの名無しさん:03/02/17 17:18
俺のx86はビッグ円ディ案

465 : :03/02/17 17:19
>>462
単純に 32bit 上位から
符号 1 bit
指数 8 bit
仮数 23 bit
じゃない・・・・のか?
いまから IEEE 754 読む。

466 :デフォルトの名無しさん:03/02/17 17:21
PS2ってビッグなのな。驚いた。

467 : :03/02/17 17:31
PS2 で動く Linux 持ってるのか・・・いいなぁ。
あれって、限定品なんだったっけ?
なんか一時申し込みが殺到したよっていう記事を見た気がする。

468 : :03/02/17 17:31
すまん、 Linux 持ってるなんて書いてなかったな。

469 :デフォルトの名無しさん:03/02/17 17:31
構造体のサイズを知りたいときは
sizeof(kouzoutai)で測れますよね。
それでは、char buf[3000];
という配列をsizeofで計測すると
3000が返ってきますよね?
このbufの中に例えば200バイトしか
入ってなかった場合、そのサイズを求めるには
strlen()を使用するものなのでしょうか?
スペースがbufの中に含まれているので
微妙です。
どなたか御教授お願いいたしますです。

470 :デフォルトの名無しさん:03/02/17 17:32
>>467
違う。公開されている改造コードがそうなっていた。
PSはリトルなんだけど。

471 :デフォルトの名無しさん:03/02/17 17:33
本来はビッゲンディアンの方が標準だろ?
インテル系は昔の奴の互換するためになってるんだろ?
昔は16bitだったし…

472 :デフォルトの名無しさん:03/02/17 17:33
>>470
Linux持ってるけどリトルエンディアンだったよ>PS2


473 :デフォルトの名無しさん:03/02/17 17:33
>>469
入れた覚えがなくても、なにかしら入っている。
文字列の長さを知りたかったらstrlen

474 :デフォルトの名無しさん:03/02/17 17:37
PDP11がCの最初だからいいのでは?
ワードマシン?

475 : :03/02/17 17:42
BIAS かよ!
http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html
ありがとうマイクロソフト。

476 :デフォルトの名無しさん:03/02/17 17:44
昔は何で逆になるんだよ!とリトルエンディアンをキモがってたんだが、
一般に使われてる数字の表記法に問題があるだけだと気づいてからは
今は同じ理由でビッグエンディアンがキモイ。

まぁ、普段はどっちだろうと気にしないんだけどな、
クロスプラットフォームのデータは意識的にどっちかにあわせないといけないからめんどいな。

477 :デフォルトの名無しさん:03/02/17 17:50
>>476
お前がいなくても世間は動いているけどな。

478 :デフォルトの名無しさん:03/02/17 17:54
>>476
はっきりいってお前は、親から世間を
教えてもらえなかったのがまずかったのかな。
普通の日本人は理解しているぜ。

479 : :03/02/17 17:56
CORBA とか COM とかなら
どっちかに決まってるんだったっけ?

480 :デフォルトの名無しさん:03/02/17 17:56
ウチはミドルエンディアンやで。


481 :448:03/02/17 17:57
volatileつけたらうまく動きました。
くだらないこと聞いてすみませんでした。。。

482 :デフォルトの名無しさん:03/02/17 17:59
うちはナイスミドルエンディアンだが

483 :デフォルトの名無しさん:03/02/17 18:03
1 little
2 little
3 little endian


484 :デフォルトの名無しさん:03/02/17 18:10
ビッグエンディアン厨ウザイ

485 :デフォルトの名無しさん:03/02/17 18:15
黙れRuby厨

486 :デフォルトの名無しさん:03/02/17 18:20
Pearl>>>Ruby≧その他

487 :デフォルトの名無しさん:03/02/17 18:23
>>479
決まってません。というか、どちらでも平気。
基本的に送信側が送ってきたバイトオーダーに従う。

そいやDCE RPCはPDPエンディアンの記述もあったな〜

488 :デフォルトの名無しさん:03/02/17 18:37
>>486
真珠?

489 :デフォルトの名無しさん:03/02/17 18:40
>>488
コイツ は パール を 知らねぃのか? プ

490 :デフォルトの名無しさん:03/02/17 18:40
Perlはその他の中に入っているもよう

491 :デフォルトの名無しさん:03/02/17 18:42
>>489
プ

492 :デフォルトの名無しさん:03/02/17 18:43
真珠を買うお金もないのね。

493 :デフォルトの名無しさん:03/02/17 18:45
真珠がなければるびぃを買えばよいのではなくって?

494 :デフォルトの名無しさん:03/02/17 18:46
assertはリリース時には消す?NDEBUG定義してそのままにする?

495 :デフォルトの名無しさん:03/02/17 19:02
>>494 VCの話?

496 :デフォルトの名無しさん:03/02/17 19:18
Version Controlはあまり関係ない

497 :デフォルトの名無しさん:03/02/17 19:43
#define printf(hoge)#define puts()

int main()
{
 printf("ぬる");
 puts("ぽん");
 return 0;
}

これでprintfとputsは中身まで含めてちゃんと消える?
どっちかダメ?

498 :デフォルトの名無しさん:03/02/17 19:45
文字列を入力させる時に、バグの温床になりやすいscanfを使わず、
sscanfとfgetsでチェックしながら入力させる・・・・・・ということを聞き、
早速、

char str[20];
char buf[20];
for (i = 0; i < MAX; i++){
  while (1){
   fgets(buf, MAX, stdin);
     if (sscanf(buf, "%s", str) == 1);
       break;
   printf("もう一度入力して下さい。\n");
}

みたいな感じで実践してます。ここで疑問に思ったんですが、文字列だけでなく
数値を入力させる際にも気をつけておくべき「定石」みたいな方法があると思うんです。
こういったエラーを防ぐときに、みなさんが実務で使われている方法ってどんなものなんでしょうか?
上の改良すればいけるんじゃないかとは思ってるんですが・・・・

499 :デフォルトの名無しさん:03/02/17 19:49
>>497
> #define printf(hoge)#define puts()
#define printf(hoge)
#define puts(hoge)

こうしないとエラーになる。
しかし、printf()は可変引数だから一般的にはこれだけじゃダメ

500 :498:03/02/17 19:50
ちょっと追加です。
数値を入力する際の、型のサイズ越えとか、間違えて文字列を入力してまった、とか
そういう部分でのエラー検出方法ですね。

501 :デフォルトの名無しさん:03/02/17 20:06
おれはぬるぽエンディアン

502 :デフォルトの名無しさん:03/02/17 20:09
int? if(BOOL b);

if()の戻り値ってint型なの?

503 :デフォルトの名無しさん:03/02/17 20:12
if*文*に戻り値などない

504 :デフォルトの名無しさん:03/02/17 20:27
>>498
・fgets()の使い方が変。
fgets()用バッファとサイズを揃えるのが一般的。
なので、
char buf[20];
fgets(buf, sizeof(buf), stdin);
とするか、
#define TMP_BUF_LEN 20
fgets(buf, TMP_BUF_LEN, stdin);
などとする。
・全体のロジックは不明だけど少なくとも{}がアンマッチ。

505 :デフォルトの名無しさん:03/02/17 23:17
JISAKU(char *buf, char *buf2){
char hoge;
sscan(buf,"%02x",buf2);
hoge = *(int *)buf2;
*str +=3;
}
上記のような関数があってmain側で呼び出す際に
char hogeを利用したのですが、いかようにすればよろしいの
でしょうか?初心な質問で申し訳ございませんが
御教授お願い致します。


506 :デフォルトの名無しさん:03/02/17 23:18
return hoge;

507 :デフォルトの名無しさん:03/02/17 23:25
>>499
#define printf
#define puts

引数に副作用が無いならコレで OK

508 :デフォルトの名無しさん:03/02/18 07:00
hoge1.txt, hoge2.txt, ...
という複数のファイル編集を下のような方法で行っているのですが、
もっと標準的な方法はあるのでしょうか?

char filename[12];
for(int i=1;i<=MaxNumberOfFiles;i++){
sprintf(filename,"hoge%d.txt",i);
fp=fopen(filename,"w");
/* 編集 */
fclose(fp);
}

509 :デフォルトの名無しさん:03/02/18 07:06
それ、漏れもマジにビビッタよ。
本当に凄い奴だと思った。
http://homepage3.nifty.com/digikei/ten.html

510 :デフォルトの名無しさん:03/02/18 07:08
朝からくだらない質問でスイマセン。
main(){
int i,a[10]={35,67,28,19,83,98,71,58,5,90}
int max,min;
max=a[0]; min=a[0];
for(i=1;i<10;i++){
if(max<a[i]) max=a[i];
if(min>a[i]) min=a[i];
}}
このプログラムの中間コードと目的コードを教えて欲しいのです。
また、UNIXコマンドで生成できるのであればそのコマンドを
教えていただけませんでしょうか・・。m(__)m

511 :デフォルトの名無しさん:03/02/18 07:22
>>508
標準的な方法は知らないが、すくなくともおれだったら
fopenからfcloseまでの部分を別の関数にまとめる。

512 :デフォルトの名無しさん:03/02/18 07:27
>>510
質問の意味がよくわからない。中間コードとはなんだろう。
目的コードとは? UNIXコマンドで何を生成したいんだろう。

処理系がgccだとして、-save-tempsが求める答えなのかな。

513 :デフォルトの名無しさん:03/02/18 07:32
>>510
cc -S
cc -c

514 :デフォルトの名無しさん:03/02/18 07:52
>>512
ttp://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2002/1/lecture1.pdf
みたいなもの、らしいです(自分もよく理解してないっす)

>>513
サンクスです。
えと、 cc -Sが中間コードでcc -cが目的コードでしょうか?
googleで検索しても英文字のせいかうまく検索できないっす。。。。泣

515 :デフォルトの名無しさん:03/02/18 07:54
>>514
AcrobatReader入っていないから読めないんだけど、なんて書いてある?

516 :デフォルトの名無しさん:03/02/18 08:00
http://www.google.co.jp/search?q=cache:K0xJA_ZnwfkC:www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2002/1/lecture1.pdf+&hl=ja&ie=UTF-8&inlang=ja

中間コードの出力のしかたはわからないや。


517 :510:03/02/18 08:09
>>515
こっちのほうがわかりやすいかも
ttp://www.hi.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/10th.html

プログラムのアセンブリコードを最適化したのが中間コード・・らしいです。
昨日からずーっと目的コードを調べてるのに一向に理解できない(TωT)



518 :デフォルトの名無しさん:03/02/18 08:16
>>510
スレ違いじゃないか、とは思わないか?
コンパイラの本でも読めば?

519 :デフォルトの名無しさん:03/02/18 08:22
>プログラムのアセンブリコードを最適化したのが中間コード
はぁ?
なんか、物凄く一般的でない話になってないか?

520 :デフォルトの名無しさん:03/02/18 08:29
中間コードねえ。処理系によるけど構文木やPコードやバイトコードかね。
gcc の場合は gasm に落として最適化するから、
それが中間コードと言えなくもない。

521 :デフォルトの名無しさん:03/02/18 09:54
>>520
gasmってなんでつか?


522 :510:03/02/18 09:55
うーん 確かにスレ違いっぽいですね。報告です。

今、なんとか中間コードを生成するコマンドを発見しました。

gcc -S test.c でアセンブリコード生成
gcc -O2 -S test.c 最適化されたコード(中間コード?)を生成

egcsをインストしてようやくできました。

523 :デフォルトの名無しさん:03/02/18 10:16
中間コード
 オブジェクトファイルやらアセンブラコード等
 Winなら *.obj *.s *.asm 等

目的コード
 ロードモジュール
 Winなら *.exe *.dll

↑なんじゃないの?

524 :デフォルトの名無しさん:03/02/18 10:28
そういう用語ってまぎらわしいな
人によって呼び方が違ったり訳し方が違ったり・・・
objectには目的という意味がある
コンパイルで生成するobjファイルを目的ファイルと言ったりする
それをライブラリとかとリンクして実行ファイルにするから
objファイルは中間ファイルとも言うし中間コードとも呼ぶ

目的プログラムとも呼ぶのか・・・・
http://www.geocities.co.jp/SiliconValley-Oakland/4509/information/report_01/j025.html

525 :デフォルトの名無しさん:03/02/18 10:52
いろいろなところで見かける
ASC2
ってなんのことですか?


526 :デフォルトの名無しさん:03/02/18 10:53
>>525
> いろいろなところで見かける
ど こ だ ?

527 :デフォルトの名無しさん:03/02/18 10:55
ASOUなら知ってるが

528 :デフォルトの名無しさん:03/02/18 11:02
それは ASCII だ

529 :デフォルトの名無しさん:03/02/18 11:06
>>522
おいおい…
>gcc -S test.c でアセンブリコード生成
>gcc -O2 -S test.c 最適化されたコード(中間コード?)を生成

-O2をつけると最適化はされるけど、吐き出すのはつけないとき同様アセンブリコードじゃないのか?
っていうか、それで違うものが吐き出されたら不気味だぞ。

>>521
gasmはアセンブラね。
上記-Sをつけたときに出力されたコードやプログラマが書いたコードをアセンブルするツールだ。
例外があることを承知で書けば、

cソース
↓cプリプロセッサ
↓パーサ
↓ジェネレータ
アセンブリコード
↓アセンブラ
オブジェクトモジュール
↓リンカ
ロードモジュール

って流れになる。

530 :初心者(2日目):03/02/18 11:23
ほんまに初歩的な質問です。
数字を表示するときに、1を01、というふうに2桁で表示されるには
どうしたらいいいんでしょうか? 10は10でいいんです。

教えてください。

531 :初心者(2日目):03/02/18 11:25
(誤)で表示される
(正)で表示させる
です。

532 :デフォルトの名無しさん:03/02/18 11:26
>>530 printf

533 :初心者(2日目):03/02/18 11:31
>532 いや。。printfで、どのように。。。
小数点の桁合わせはWebページで見つけたんですが、
整数のほうがわからなくて。スミマセン


534 :デフォルトの名無しさん:03/02/18 11:37
>>530 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html

535 :デフォルトの名無しさん:03/02/18 11:38
gcc -dr で中間言語をはく

536 :デフォルトの名無しさん:03/02/18 11:40
Java仮想マシンをターゲットにできる
C Compilerにはどのようなものがありますか?


537 :初心者(2日目):03/02/18 11:46
>>534
ありがとうございます。読んでみます

538 :デフォルトの名無しさん:03/02/18 13:08
>>536
.NET環境をターゲットにできるCコンパイラならあるけど?
Java仮想マシンをターゲットにするならC言語やめてJavaにするしかないでしょ。

539 :デフォルトの名無しさん:03/02/18 13:37
上のほうにも似た質問があるんですが、標準入力から文字列を入力する際、
入力された文字列が配列の範囲を越えてしまった時に、警告を出した上で
もう一度入力させるにはどうすればいいでしょうか?

void main(void){

 int i, j;
 char str[5][20];
 char buf[20];

 for (i = 0; i < 5; i++){
  while (1){
   fflush(stdin);
   fgets(buf, sizeof(buf), stdin);
   if (sscanf(buf, "%s", str[i]) == 1)
    break;
   printf("もう一度入力して下さい。\n");
 }
}

今はこんな感じで作ってます。
空白だけを入れた場合の警告は出るようにしています。
しかし、配列の上限を越えた入力をチェックする方法が解からず、
しょうがないのでループの先頭でバッファに溜まった分を切り捨てるようにしています。
これを解決するスマートな方法ってないですかね。。。

540 :デフォルトの名無しさん:03/02/18 13:45
>>539
そんな対話志向な設計、標準Cでできましたっけ?

541 :デフォルトの名無しさん:03/02/18 13:49
>>539
bufを大きく取った上で、超えた分は捨てていいならfflush()は妥当じゃない?
私ならbufの最後に改行コードが入ってなければ読み捨てるようにするけど。

542 :デフォルトの名無しさん:03/02/18 14:08
>>539
fflush()をstdinに対して実行した結果は、処理系依存です。

543 :デフォルトの名無しさん:03/02/18 14:36
>>529
gasなら知ってるんだが…。
GASMってのもあるとは知らなかった。全然読めんが。
ttp://gasm.cjb.net/


544 :デフォルトの名無しさん:03/02/18 15:16
int WAKARAN(char *str,char *str2){
int piyo;
char dmy[512];

printf(" str = %s\n", str);
sscanf(str, "%02x",piyo);
*str2 = piyo;
return 0;
}
main(int ac, char *av[]){
FILE *ifp,
char buf[512],tmp[512];
int x,res;
if ((ifp = fopen(av[1], "r")) == NULL);exit(1);
fgets(buf,512,ifp) !=NULL;
for( x=0; x < 16; x++){
res = WAKARAN(s,hoge);
if ( res != 0 ){
printf("Fmq_ipTRSF56:Error\n");
break;
}
DATA->usr[x] = *hoge;
*hoge +=3;
}
printf("usr = %s\n",DATA->usr);
こんなプログラムあるんですが、実行するとエラー(core)してしまいます。
構造体の存在は書ききれなかったので省略しています。
なぜウゴカナイのかご指導いただけると幸いです。お願い致します。

545 :デフォルトの名無しさん:03/02/18 15:19
>>544
引数つけたか?
つければ即終了すると思うぞ。

546 :デフォルトの名無しさん:03/02/18 15:24
>sscanf(str, "%02x",piyo);
間違い

>}
dmyが使われていない

>main(int ac, char *av[]){
戻り値の型がない

>if ((ifp = fopen(av[1], "r")) == NULL);exit(1);
パラメータがないときに異常終了しそう

>fgets(buf,512,ifp) !=NULL;
条件判断の結果が捨てられている

>res = WAKARAN(s,hoge);
sもhogeも宣言されていない

>DATA->usr[x] = *hoge;
DATAが宣言されていない

>printf("usr = %s\n",DATA->usr);
main()が終了してない

547 :デフォルトの名無しさん:03/02/18 15:46
>>546
実行できているんだから文法エラーになるようなことは指摘するなよ。


548 :544:03/02/18 16:14
みなさん、ありがとうございます。
虫食いしてみたところ
>>546さんのおっしゃる通り
sscanf()がぁtぃぃようです。。。
何がおかしいのでしょうか?
ご指摘頂けると幸いです。
お願いいたします。

549 :デフォルトの名無しさん:03/02/18 16:28
>>548
それはscanfが戍ァィ、して、ョトケキユだからだよ。

550 :デフォルトの名無しさん:03/02/18 16:32
・書式の間違い
・引き数の間違い

551 :デフォルトの名無しさん:03/02/18 17:02
関数の宣言についてですが、あれはソースを読みやすくするだけですか?
それとも何か動作に影響があるのでしょうか?
よろしくお願いします。

552 :デフォルトの名無しさん:03/02/18 17:03
>>551
プロトタイプ宣言のことならコンパイル時の引数及び型チェックを厳密にするため。


553 :デフォルトの名無しさん:03/02/18 17:04
天罰が下ります

554 :デフォルトの名無しさん:03/02/18 17:10
>>551
宣言すると>>552の言うようにチェックを厳密にしてくれるだけでなく、
暗黙の型の格上げを行わなくなる場合もあるので要注意。

555 :551:03/02/18 17:21
ありがとうございました。
普段は宣言しておいたほうがよさそうですね。

556 :デフォルトの名無しさん:03/02/18 17:36
「プログラミングWindows第5版(上)」のP.53にこんな記述がありました。

配列が大域的であれば(つまり、関数の外で定義されていれば)、
文字列配列は次のような文で初期化できる。

char a[] = "Hello!";

この配列を関数の局所変数として定義する場合には、
次のようにstatic変数として定義しなければならない。

static char a[] = "Hello!";


なんでだー!!
関数が呼ばれるたびに、文字列が配列にコピーされるのを防ぐためですか?
でも、「定義しなければならない」って……。

557 :デフォルトの名無しさん:03/02/18 18:09
http://www.st.rim.or.jp/~phinloda/cqa/cqa9.html
の最後のQAをみるといい。

558 :デフォルトの名無しさん:03/02/18 18:12
>>556
つまり、過去の文章を引き摺っているわけやね。

559 :556:03/02/18 18:28
>>557-558
あ、なるほど。納得しました。
ありがとうございました。

560 :デフォルトの名無しさん:03/02/18 18:35
今C言語でプログラムを作っているのですが、
2次元配列のメモリを動的変数で確保するにはどうすればいいのですか?
調べたところ、for文を使って1次元配列みたいなものを繰り返し作成して
確保していたのですが、一般的にはどうするのですか?
よろしくお願いします。

561 :デフォルトの名無しさん:03/02/18 18:38
>>560
このスレを読めばわかる。

562 :デフォルトの名無しさん:03/02/18 18:40
char piyo[512]
こんな配列があって要素をひとつ
ずらしたい場合ってどうすればよろしいのでしょうか?
ポインタだったら、*p++って感じですよね?
それが配列の場合はどうなるんでしょう、、、
御教授お願いイタします。

563 :デフォルトの名無しさん:03/02/18 18:43
>>562
memmove()

564 :デフォルトの名無しさん:03/02/18 18:52
>>556-559
ジエン気味やな。

565 :デフォルトの名無しさん:03/02/18 18:53
>>561
すいませでした。それとありがとうございました。

566 :562:03/02/18 19:16
>>563さそ
ありがとうございます。
memmoveを使用する。。。
ワタシの想像で
for ( i=0; i <32; i++){
.....HOGE->mona[i] = piyo[i];
こんな感じを想像していたのですが
memmoveで実現できるのでしょうか?


567 :デフォルトの名無しさん:03/02/18 19:16
>>562
char base[10000];
char *piyo = base + 5000;

568 :デフォルトの名無しさん:03/02/18 19:33
なんでみんな適当な変数名に「hoge」ってつけるんだろう・・・。
ホゲってなんだ?

569 :デフォルトの名無しさん:03/02/18 19:34
>>568
fooとかbarの日本語版だと思われ。

570 :デフォルトの名無しさん:03/02/18 19:38
http://hoge.com/

571 :デフォルトの名無しさん:03/02/18 19:39
適当な変数名
hoge
geko
ugo
だんだん苦しそうになっていく…


572 :デフォルトの名無しさん:03/02/18 19:52
かれこれ5年ぐらい前からhoge使ってるやついた

573 :デフォルトの名無しさん:03/02/18 19:53
>>566
> for ( i=0; i <32; i++){
> .....HOGE->mona[i] = piyo[i];
そういうのは要素をずらすとは言わないと思うが、いったい何をやりたい?

574 :566:03/02/18 20:20
>>573サソ
31 32 33 34.....
こんなテキストファイルを読み込んで
sscanfで%02xでとり、構造体の配列に
ひとつづついれていきたいのです。。。
まじアタマから煙でそうっす。
御教授くだせぇぇぇ。。。

575 :デフォルトの名無しさん:03/02/18 20:46
sscanf()のフォーマットに"%02x"は間違い。

1行に16進文字列が固定数入っているなら、寧ろstrtol()を使ったほうが楽かも。

576 :デフォルトの名無しさん:03/02/18 21:21
Cで標準ライブラリだけを使って安全に文字列入力するにはどうしたらいいのでしょうか?

577 :デフォルトの名無しさん:03/02/18 21:23
fread

578 :デフォルトの名無しさん:03/02/18 21:24
getc 一択

579 :デフォルトの名無しさん:03/02/18 21:27
>>578
fgetcを使わないでgetcを使うことのメリットは?

580 :デフォルトの名無しさん:03/02/18 21:36
>>579
君はその2つの違いを理解しているのかね?


581 :デフォルトの名無しさん:03/02/18 21:44
gets 以外は
正しく使えば安全だよ


582 :デフォルトの名無しさん:03/02/18 21:45
>>580
getcはマクロかもしれないってだけじゃないの?

583 :デフォルトの名無しさん:03/02/18 21:48
#define getc fgetc
#define putc fputc


584 :デフォルトの名無しさん:03/02/18 22:03
漏れはC言語が好きだが、
貧乳の方がもっと好きだ。


585 :デフォルトの名無しさん:03/02/18 22:06
漏れはC言語が嫌いだが、
貧乳の方がもっと嫌いだ。


586 :デフォルトの名無しさん:03/02/18 22:08
Ruby≧貧乳>>>Pearl>C>>>巨乳

587 :デフォルトの名無しさん:03/02/18 22:11
>>576
そんなことやめとき。しんどいだけや。

588 :574:03/02/18 22:13
>>575サソ
ご指摘ありがdございますた!

ボキも貧乳好きだ。

589 :デフォルトの名無しさん:03/02/18 22:14
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/kaorin/

590 :デフォルトの名無しさん:03/02/18 22:18
実数の加減算を行うプログラムを作れ。
例123.45+67.89=191.34
ただし入力には、getchar()を使い、char型として1文字ずつ受け取る。
解釈できない文字が含まれた場合、それが入力された時点でそこまでの計算するものとする。
できなければエラーを表示して打ち切りでもよい。冒頭の0をゆるしてもよい。
scanfやatoi関数など既存の関数は使わないこと。

意味不明、焼肉定職


591 :デフォルトの名無しさん:03/02/18 22:21
>>590
出題者に何でそんな無意味な制限を付けるのですかって文句を言えば良い。

592 :デフォルトの名無しさん:03/02/18 22:36
kprintfって標準?

593 :デフォルトの名無しさん:03/02/18 22:38
なんじゃそれ?

594 :デフォルトの名無しさん:03/02/18 22:39
k = kernel

595 :デフォルトの名無しさん:03/02/18 22:40
>>591
無意味じゃないだろ。
学習段階なら、atoi()などのライブラリ関数がどうやって
文字列から数値に変換しているかを一度は自分で試すべき。

596 :デフォルトの名無しさん:03/02/18 22:48
>>590
宿題マル投げなら、専用のスレあるから。
そっち逝け。

597 : :03/02/18 23:00
argv を main 以外の場所で取得できる?
もしできるなら方法を教えてください。

598 :デフォルトの名無しさん:03/02/18 23:01
char hoge[128];
この配列を
switch(なんでもいい){
case A:
for ( i=0; i <16; i++){
 hoge[15]までなんらかの処理}
その次に同じように
case B:
for ( i =0; i <16; i++){
hoge[16]からhoge[31];まで処理する}

こんな風にしたいんですが
case Bのfor文の記述がわかりません。
case Aではhoge[0]からhoge[15]
case Bではhoge[16]からhoge[31]という仕様にしたいと思っています。
ベタで書くことができないので、ウマイ処理がございましたら
御教授頂きたいです。おながいします。

599 :デフォルトの名無しさん:03/02/18 23:05
>>597
argvをどっかに保存しる。

600 :デフォルトの名無しさん:03/02/18 23:07
>>597
VC++なら__argvで。
_argvじゃないよ。
二個ね

601 :デフォルトの名無しさん:03/02/18 23:08
☆★暇な人!荒らしがやりたい人!ここへ逝こう!ってか逝って。★☆
管理人がクソ厨なブタ野郎だからいじり倒してサイトを閉鎖させちゃえ!
閉鎖できた人は「荒らし王」の称号が手に入る!さぁ!荒らせ!!!!!

http://www.geocities.co.jp/Bookend/6473/

602 :デフォルトの名無しさん:03/02/18 23:11
>>595
floatだのdoubleだのに直すのに標準ライブラリの
力を借りないと思いっきり移植性が…とか一瞬思ったんだが、
べつにそんなの使わなくても計算できることに気づいた。
いい問題かも、これ。


603 :デフォルトの名無しさん:03/02/18 23:15
>>599 >>600
thx


>>599
argv をどっかに保存って、グローバル以外に良い方法はありますか?


604 :デフォルトの名無しさん:03/02/18 23:17
シングルトンクラスがあるじゃないか

605 :デフォルトの名無しさん:03/02/18 23:26
数値の前を0で埋めたいのだが、その桁数を変える方法ってわかりますか?
具体的には、
char hoge[10];
int i;
sprintf(hoge, "%03d", i);
みたいなので、「3」を場合によっては4とか5とかにしたいのですが。。。



606 :デフォルトの名無しさん:03/02/18 23:28
シングルトンクラス?

607 :デフォルトの名無しさん:03/02/18 23:33
>>598
for (i = 16; i <= 31; i++) {
 処理(hoge[i]);
}

for (i = 0; i < 16; i++) {
 処理(hoge[i + 16]);
}
じゃダメなの?

>>603
グローバルに持たずにパラメータで渡せないの?
ex.)
void 下請け(char **argv);

int main(int argc, char **argv)
{
 下請け(argv);
}

void 下請け(char **argv)
{
}

608 :デフォルトの名無しさん:03/02/18 23:34
>>605
sprintf()のマニュアルをよく読もう。

sprintf(hoge, "%0*d", len, val);

609 :デフォルトの名無しさん:03/02/18 23:35
2次元配列から片方の配列のみを取り出す方法ってありますか?
つまり、配列 a[i][j] のjの部分のみを取り出したいんです。
また、その逆も行いたいんですがわかる方いたら教えていただけないでしょうか

610 :デフォルトの名無しさん:03/02/18 23:35
>>605
char format[] = "%03d";
format[2] = digit - '0';
sprintf(hoge, format, i);

611 :610:03/02/18 23:37
>>608
ネタより先に正しい答えを出しちゃイヤン


612 :605:03/02/18 23:37
>>608
ありがとうございます。

613 :デフォルトの名無しさん:03/02/18 23:37

int n = 6, m = 2;
char format[10];
char hoge[10];

sprintf( format, "%%0%dd", n );
sprintf( hoge, format, m );



614 :デフォルトの名無しさん:03/02/18 23:40
>>609
二次元配列の片方って考え方が既に間違っている。
よく判っていないなら、配列の要素を一つずつコピーすべし。

>>611=610
ごめん。たまたまリロードしたら見えたんで。

>>613
以下同文。

615 :デフォルトの名無しさん:03/02/19 00:05
>>603
typedef struct {
 int argc;
 char ** argv;
} MAINARG;

MAINARG * get_mainarg() {
 static MAINARG arg;
 return &arg;
}

/* これをmainで呼ぶ */
void init_mainarg(int argc, char ** argv) {
  MAINARG * arg = get_mainarg();
  arg->argc = argc;
  arg->argv = argv;
}

・・・素直にグローバルに置いた方が良いと思ふ。

616 :デフォルトの名無しさん:03/02/19 00:17
だからwindows.hをインクルードすればはじめから __argv がグローバルにあるってば。

617 :デフォルトの名無しさん:03/02/19 00:29
Win厨は消えてくれい

618 :デフォルトの名無しさん:03/02/19 00:31
stdlib.hっしょ?

619 :デフォルトの名無しさん:03/02/19 01:08
何でargvがグローバルだと嫌なの?
グローバルで確保しても良い(問題無い)変数の1つだと思うけど?

620 :598:03/02/19 01:51
>>607サソ
アリガdであります。
char hoge[128]にどこまで入っているかは
わからない状態なんです。仕様記載漏れすみません。
んーどうしたもんなんでしょう、、、

621 :デフォルトの名無しさん:03/02/19 02:00
>>620
訳が分からない
もっと分かり易く説明汁

622 :デフォルトの名無しさん:03/02/19 02:46
x-0.2xからx+0.2x(xはfloat型の変数)までの範囲の乱数を
発生させる場合どうかけばいいのでしょうか?
例えばx=0.0000100なら0.0000080から0.0000120までの乱数です。

623 :デフォルトの名無しさん:03/02/19 02:54
((0から0.4の乱数)+0.8)*xじゃだめなの?

624 :622:03/02/19 03:02
>>623
ransu=(((float)rand%5*0.1)+0.8)*x
こんな感じでしょうか?間違ってたら訂正おねがいします・・・

625 :622:03/02/19 03:37
ransu=((float)rand()/RAND_MAX*0.4+0.8)*x;
でできました!スレ汚しすいませんです・・・

626 :デフォルトの名無しさん:03/02/19 06:04
標準じゃないが
get_commandline()
とかそんなのが大概用意されてるだろ?
それ使えよ。
どうせ(略)クソコードだろ

627 :†♥:03/02/19 10:59
gcc-cygwinを最近つかいはじめた初心者です
疑問に思ったんですがそもそもコンパイラってDOSとかUnixと
ペアで出来てる物なんですか?
それともcygwinだけですか?

628 :デフォルトの名無しさん:03/02/19 12:32
>>627
Cコンパイラ=C言語ソースプログラムを機械語へ翻訳する機械
歴史的にCコンパイラはunixという土壌でOSと共に発展してきた
経緯で強い影響を受けてはいるが、一般的にコンパイラと
OSには”ペアで出来ている”という関係はない。
世の中にはOSがないマイコン向けCコンパイラも、コンパイラの
動作OSとは違うマシンで動くコードを生成するコンパイラだってある。

629 :628:03/02/19 12:40
書いてみたけど読めば読むほど>>627の意図がよくわからん。
見当違いっぽいな。すまそ。

630 :†♥:03/02/19 12:52
>>628
ありがとうございます
ずうずうしくもう壱つ質問
catとかlsとかのコマンドは
一般的に何をみなさん使ってるんですかね?
やっぱDOSが多い…ですか?

631 :デフォルトの名無しさん:03/02/19 12:55
>>630
いわれたことを全く理解してない香具師ハケーン

632 :デフォルトの名無しさん:03/02/19 13:07
>>628
確かにコンパイラを作成する理論はOSとは独立だけど、
C言語の場合、Unixの開発ときっても切り離せない関係にあるのでは?
C言語でUnixを書き、そのUnixの上でC言語コンパイラとその改良
を行って、そのC言語で再び改良されたUnixを書く。この繰り返しが
初期のUnixの開発では良く行われた。
逆に言えば初期の言語がアセンブラ並にプリミティブじゃなきゃ
そのコンパイラを動かしてくれるOSなんて皆無だったし、コンパイラが
ある程度OSの機能を代替できなければ実装不能な机上のものだった。
コンパイラがOSと独立するようになったのは、もうコンパイラそのもの
の開発よりも、OSの洗練、アプリケーション管理とかライブラリ管理とか
が重要になった1970年代後半以降の話でしょう。

633 :デフォルトの名無しさん:03/02/19 13:09
一般的に、と断った上で書いているようだが、さて

634 :デフォルトの名無しさん:03/02/19 13:09
あるマシンで別のマシンのソフトの開発を行うことを
「クロス開発」といいます

cat,lsはUNIXのコマンド
dirはdos、UNIX両方にあるようですね。

Cygwinということは、WINDOW用のソフトですよね。
ゲームですか?

635 :†♥:03/02/19 13:34
>>631>>634

テキスト系エディタ

ソースプログラム
  ↓
コンパイル
  ↓
実行形式
  ↓
  実行
この流れを
みなさんDOSを使って
やっているのかな?って思ったんですよ
それともなんですか?音声認識でやってるんですか?
実はマウス使うのがやっととか?
Unixとの関係が上がってますがそんなのCの参考書の
(はじめに)の所に書いてあってわかってます
…って言うか誰も聞いとらん



636 :デフォルトの名無しさん:03/02/19 13:36
>>635
お前の質問のレベルがその程度ってことだよ

637 :デフォルトの名無しさん:03/02/19 13:38
>>635
難しく考えすぎ
>>全
初心者にしては話がわかるな…
と思ったのは俺だけか?この初心者のレス開始から順に読んで
行けばわかりそうだけどな


638 :デフォルトの名無しさん:03/02/19 13:43
若Verに
カキミダサレださださ

639 :デフォルトの名無しさん:03/02/19 13:50
>>635
もしかしてコマンドプロンプトのことをDOSと勘違いしている馬鹿?

640 :デフォルトの名無しさん:03/02/19 13:52
>>635
とりあえず意味は分かるけど「DOS」というと普通はMSDOSを
指すんで紛らわしいから使わんほうがいいと思われ。
実際には「コマンドプロンプト」とか「コンソール」のつもりで
云ってるんだよね?
コンパイラ、リンカをどのように実行させるかは人による。
例えばVC++のような統合開発環境ではエディタ、コンパイラ、リンカ、
デバッガなどは全てGUIの統合開発環境上で実行できるので、そもそも
コンパイルのフェーズを意識する必要もあまりないが、別にcl.exeやlink.exe、
nmake.exeを直截実行しても構わないし、ソースコードは単なる
テキストファイルに過ぎないのだから、どのようなテキストエディタ
を用いても構わない。それどころか
C:\> type con >test.c
のような方法であってもさしあたりは構わない。
ただしnotepad.exeはファイル名の拡張子の
付け方について多少おせっかいなところがあるので止めた方がよい。


641 :デフォルトの名無しさん:03/02/19 13:52
>>635
よくわからんが士ね。といいたくなった。

642 :デフォルトの名無しさん:03/02/19 13:58
みなさんDOSを使って
みなさんDOSを使って
みなさんDOSを使って
みなさんDOSを使って

643 :†♥:03/02/19 14:18
>>639
ありえない
プログラム初心者=バカ 違う
>>640
ありがとうございます
Visual C++6.0SPは持ってるんでけどね
>全員
でも一つ分った事はプログラムが出来ないだけでみなさん
ものすごく卑下するんですね
感じ悪
(結果>cygwin は Unix コマンドだと何かと簡単だからと一言欲しかった)

644 :デフォルトの名無しさん:03/02/19 14:22
>>643
なにが「ありえない」だか
ではどういう意図で「DOS」と書いたのか説明してみろ

それと「卑下」する、とは自分を低く扱う事

645 :デフォルトの名無しさん:03/02/19 14:28
>>635
> それともなんですか?
以降のほうが感じ悪。



646 :デフォルトの名無しさん:03/02/19 14:35
>>644
Windowが立ち上がる前のDOSで一連の流れを実行する事は可能
又低水準であるがゆえWindousをおっぴろげ無い方がより効率的に
処理速度をかせげるから?と言いたいんじゃないの?
卑下はヒゲって意味で言ったんじゃないの?

647 :デフォルトの名無しさん:03/02/19 14:37
Cで質問なんですが、
->
ってどういう処理なんでしょうか?

img1->data = (char *)pdata1;

という処理で使われていて、
img1はX-windowのXImage

pdata1は

pdata1 = (unsigned short*)mmap(0, X_SIZE*Y_SIZE*2, PROT_READ|PROT_WRITE
, MAP_SHARED, *video, 0);

こんなかんじで処理されています。

648 :デフォルトの名無しさん:03/02/19 14:38
逝っちゃったよ多分…>>643

649 :デフォルトの名無しさん:03/02/19 14:43
>>647
マニュアル嫁、構造体や共用体のポインタからメンバを選択する演算子

650 :デフォルトの名無しさん:03/02/19 14:48
char** get(){
   char *a[] = { "age", "sage" };
   return a;
}
ってなことやりたいんだけど、これだとローカルのアドレスだから
static char *a[] = { "age", "sage" };
でOKなんだけど、実際はリテラルじゃない文字列の配列なので、
可変長の文字列の可変長の配列を作って返したいんですけど、
こういう場合ってどうしてます??
mallocの場合はどっかで開放が必要なんですよね。

651 :デフォルトの名無しさん:03/02/19 15:02
>>650
別にmalloc使えばいいべ。freeを忘れなければよいし、すぐに終了する類の
プログラムであって、mallocの量がそれほどでもない場合は一切freeしない
という手も有る。
Bohem GCのようなGCライブラリ使うってのも手だが、それぐらいなら
C++使っちゃったほうがいいよな。。。


652 :デフォルトの名無しさん:03/02/19 15:12
>>650
> 可変長の文字列の可変長の配列を作って返したい
どれがいいと思う?
・C++を使う。
・mallocを使う。
・C++のStirng, Vectorを真似て実装する。


653 :デフォルトの名無しさん:03/02/19 15:26
strlen()でスペースと"#"を無視して
レングスを測りたいんすけど、
いかようにすればよろしいでしょうか?
ごきょうじゅお願いします。

654 :デフォルトの名無しさん:03/02/19 15:33
>>653
> strlen()でスペースと"#"を無視して
strlen()じゃできないと思うが、全部無視したいのか?

> レングスを測りたいんすけど、
ところでなんでカタカナ?


655 :デフォルトの名無しさん:03/02/19 15:33
>>653
spaceと#を取った文字列作るか、
その長さからspaceと#の数引けばいいんじゃない

656 :デフォルトの名無しさん:03/02/19 15:37
レスありがd
strlen()じゃできないっすかー。
どんなもの使うべきでしょうか?

カタカナに特にいみはないっす。

657 :デフォルトの名無しさん:03/02/19 16:24
自分で関数書く

658 :デフォルトの名無しさん:03/02/19 16:40
誰か2バイト文字の検索系詳しい人居る?
OpenNap-NGのsearch.cを2byte文字に対応させたいのだけど・・・
さっぱり・・・


http://220.37.152.5/opennap-ng-0.46.tar.bz2
一応ソースね


659 :デフォルトの名無しさん:03/02/19 16:41
例えば、『あああ』というキーワードで『あああいいうえ』をヒットさせたいのですが・・
トークン1つ1つ切るしかないのでしょうかね?

わかる人書いてくれるとうれしいです。


660 :デフォルトの名無しさん:03/02/19 16:44
strstr()で何か問題が?

661 :デフォルトの名無しさん:03/02/19 16:48
ワイド文字で処理する

662 :デフォルトの名無しさん:03/02/19 17:23
>>660
素朴なstrstr()ではいわゆる「Overlap」の問題が起きる。
1) マルチバイト文字の片割れと別の文字がマッチしてしまう
2) マルチバイト文字が二つ並んでいる状態で、1文字目の2バイト目と
2文字目の1バイト目の並びに別の文字がマッチしてしまう
UTF-8は1)2)が発生しないように設計されている。SJISやEUC-JP
では発生する。
>>658
別に詳しくは無いが...
見たところ素朴なcharのインクリメントやtolower()のようなものを
使っているようだが、通常そういう箇所は軒並み書き換える必要が有る。
エンコーディング方式がわからんが、内部コードをUTF-8にすることが
可能なら、↑に挙げた理由により、多少は楽になるよ。UTF-8であれば、
文字列中の任意のバイトについて、
・マルチバイト文字の片割れかどうかを判定する
・それがマルチバイト文字の先頭バイトか後続バイトかを判定する
・「前の文字」に移動する
・「次の文字」に移動する
といったことが極めて容易にできる。逆に、これらの道具(材料)があれば、
何をすればいいかは分かるだろう。
無論、ワイド文字を使えるのなら、その方が楽だが。


663 :デフォルトの名無しさん:03/02/19 17:35
マルチバイト文字をマルチバイト文字で検索するのであればバッティングすることはない
よって余計なことを考える必要はない

664 :デフォルトの名無しさん:03/02/19 17:36
EUCだとバッティングする

665 :デフォルトの名無しさん:03/02/19 18:23
なぁ、なんで引数をとらない関数の宣言or定義で
func(void)
と書かずに
func()
と書くの?


666 :デフォルトの名無しさん:03/02/19 18:50
昔からの書き方

667 :デフォルトの名無しさん:03/02/19 18:55
C言語からプログラミング始めてるんだけどCの本以外にアルゴリズムの本も必要ですか?
必要なら評調べて買うんで

668 :デフォルトの名無しさん:03/02/19 19:01
何でCから始めるのかその理由を聞きたい。

669 :デフォルトの名無しさん:03/02/19 19:03
CスレでCから始める奴を質問する理由を聞きたい。

670 :デフォルトの名無しさん:03/02/19 19:04
Cは避けて通れないって本にかいてありました

671 :デフォルトの名無しさん:03/02/19 19:05
アルゴリズムは文法みたいな物でCの本は単語みたいな物って書いてあったので
必要なのかなって

672 :デフォルトの名無しさん:03/02/19 19:11
>>653
size_t strlen(const char *s)
{
  size_t cnt = 0;
  for(;*s != '\0'; s++)
    if(*s != ' ' && *s != '#')
      cnt++;
  retrun cnt;
}

673 :デフォルトの名無しさん:03/02/19 19:15
>>671
用もないのに読んでも実際使う頃には忘れてる
とりあえずどんなアルゴリズムがあるか
名前と概要だけ知ってればいい

674 :デフォルトの名無しさん:03/02/19 19:17
reallocでアドレスが変わった場合も、中身はコピペされるんだよね?

675 :デフォルトの名無しさん:03/02/19 19:18
うん。だから何?

676 :デフォルトの名無しさん:03/02/19 19:18
される

677 :デフォルトの名無しさん:03/02/19 19:19
>>675
死ね

678 :デフォルトの名無しさん:03/02/19 19:22
>>671
http://www.cs.u-gakugei.ac.jp/~miyadera/LECTURE/algo2/program.html

679 :665:03/02/19 19:26
>>666
標準委員会的にはどうなのよ。
int func(...)

func(...)
って書くのと同じくらいスッキリしないんだけど。

それとも、JAVAやC++のクラスメソッドでいうところの
暗黙の*thisの存在故にvoidとは書かない、てのが
Cでも何となく習慣化してるということ?


680 :デフォルトの名無しさん:03/02/19 19:28
>>673
>>678
わかったサンクス
とりあえず本買わないでHPで学習してくるよ

681 :デフォルトの名無しさん:03/02/19 19:28
Cでは
func()

func(void)
は意味が違うくないか?

682 :デフォルトの名無しさん:03/02/19 19:30
>>681
プロトタイプ宣言ではな。

683 :デフォルトの名無しさん:03/02/19 19:30
ある値より大きくて一番近い2のべき乗を返してくれる標準関数みたいなのありますか?

684 :デフォルトの名無しさん:03/02/19 19:31
>>683
そんな使い道のなさそうな関数が標準関数にあるわけないだろ。
自分でかけ

685 :デフォルトの名無しさん:03/02/19 19:31
知らない

686 :デフォルトの名無しさん:03/02/19 19:39
あ、C言語ってべき乗も無かったんだけ。めんどう。
pascalなら ^ だYO!

687 :デフォルトの名無しさん:03/02/19 19:40
じゃ、GNUなんかでべき乗なんかが入ってるソース希望。

688 :デフォルトの名無しさん:03/02/19 19:41
>>686
べき乗ならpow()

689 :デフォルトの名無しさん:03/02/19 19:44
powはpowerのことだけど、読み方はポウだよね。

690 :デフォルトの名無しさん:03/02/19 19:44
powってdoubleっしょ。
組み込みにはきついな。

691 :デフォルトの名無しさん:03/02/19 19:46
自分で ipow でも作れ
師ね

692 :デフォルトの名無しさん:03/02/19 19:46
>>691
なんでlpowじゃないんだよ。
しね

693 :デフォルトの名無しさん:03/02/19 19:48
>>692
int で十分だろうが
SHINE

694 :デフォルトの名無しさん:03/02/19 19:55
VB挫折したのでCに戻ってきました・・・・
またよろしくお願いします。

695 :デフォルトの名無しさん:03/02/19 19:55
>>687
整数の(オーバーフローを無視した)べき乗なら、書くのは簡単だろ。
K&Rにも乗ってるが
int power(int base, int n)
{
  int res = 1;
  while (n-- > 0)
    res *= base;
  return res;
}



696 :692:03/02/19 19:57
>>695
K&Rもintかよ(激怒)

697 :デフォルトの名無しさん:03/02/19 20:18
695のようなやつで、オーバーフローの把握が出来るものがあったらな...

698 :665:03/02/19 20:20
static const unsigned short Pow[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
// assume 16bit short

そんなことよりvoid引数の見解を述べてくれよ。


699 :デフォルトの名無しさん:03/02/19 20:22
Cだけでオーバーフロウの検出ってどうやるの?
前回の結果よりも小さかったらオーバーフロウとか?

700 :デフォルトの名無しさん:03/02/19 20:22
>>698
ANSI C以前はvoidがなかったから。
終了。


701 :デフォルトの名無しさん:03/02/19 20:24
>>697
正確にはunsignedにするだけでオーバーフローは発生しないことになるが
多分そういうことを云いたいんじゃないよな。
多倍長計算ができるライブラリでも使ってみたら?


702 :デフォルトの名無しさん:03/02/19 20:27
strtolはきちんとオーバーフローを発見するよね(^o^)

703 :デフォルトの名無しさん:03/02/19 20:29
>>701
突然負の値になったりはしないけど、桁落ちはするからオーバーフローするっていわない??
オーバーフローってそういうものじゃないとか?

704 :デフォルトの名無しさん:03/02/19 20:35
>>665
プロトタイプ宣言がANSIで導入された機能であることは知ってるんだよな。
K&R流の書き方では

定義:
double func(a, b)
 int a;
 double b;
{
  :
}
宣言:
double func();

となるが、宣言が無い場合は戻り値はintと仮定されるから
intを戻す関数の宣言は省略可能で、事実省略されることが多かった。
ANSIの規格でK&R風の書き方を許しているのは単なる妥協の産物だろ。

ANSI Cで仮引数リストが書かれていない場合は、引数が空という意味ではなく
"引数は、なんでもよい(K&R風宣言と見なし、チェックしない)"
という意味だから、voidと同じではない。そういう意味ではANSI C
のプロトタイプ宣言の機能を利用するなら、voidは省略するべきではない。


705 :デフォルトの名無しさん:03/02/19 20:39
>>703
本来は
>突然負の値になったり
することを云う。K&Rあたりにはunsigned演算ではオーバーフローは
発生しないとちゃんと書いて有るから、持ってるなら読んでみ。
機械のレベルではキャリーフラグが立ったりする訳で
asmならチェックするのも簡単だが、Cでは簡単・高速・移植性のたかい
方法でチェックする方法は存在しないだろう。


706 :デフォルトの名無しさん:03/02/19 20:42
>>705
おーそうなのか。サンクス。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtoul.3.html
このstrtoulの説明でも範囲外と言っているだけで、オーバーフローとは言っていないな。

707 :デフォルトの名無しさん:03/02/19 21:08
ダビスタ製作してるのですが馬生産部分のアルゴリズムを
どうしていいか解りません。いい方法ありませんか?


708 :665:03/02/19 21:14
>>704
サンクス。

ok、要するにC++(のメンバ関数)で仮引数リストを空のままにすることとは
意味が違うということだな。
これまで、Cのソースではvoid指定してきたから安心できたよ。

スレ違いだが、C++の場合はどうなのよ。
>>679に書いた理由でvoid指定しないのがスタンダードなの?
それともみんな単に省略してるだけ?


709 :デフォルトの名無しさん:03/02/19 21:17
プロ言C++に書いてないのか

710 :デフォルトの名無しさん:03/02/19 21:23
禿はそんな細かいことまで書かない

711 :デフォルトの名無しさん:03/02/19 21:25
>>708
C++ではK&R風の宣言は許していないし、引数リストを省略した場合の意味は
voidと同じになる。この点はC++とANSI Cの異なるところで、
引数リストを(K&R風の意味で)省略したCのソースをC++から使う場合は
注意が必要。


712 :665:03/02/19 21:42
>>709
書いてない。

EC++, More EC++, Accelerated C++, その他の教本も当たり前のように
func()
だ。プライマーは見てない。

唯一のヒントは、虎本の
「引数を取らないメソッドは、voidを付けずに空の括弧だけで宣言するという点で、
 JavaとCとは異なります(C++とは似ています)。」
という一節だが、理由までは言及していない。

じゃぁstaticメンバ関数とかグローバル関数はvoid付けるのかというと、
C++3版でも当たり前のように空括弧だ。


713 :デフォルトの名無しさん:03/02/19 21:51
C++ではfunc() = func(void)
動的メンバも静的メンバもネームスペースレベルの関数も同じ
thisは関係無いと思うが

714 :デフォルトの名無しさん:03/02/19 22:30
C++で()か(void)は趣味の問題程度
あるいは、もしコーディング規約があるなら従うくらい

715 :665:03/02/19 23:16
>>713
>>714
わかった。
大衆に迎合して、今まで通り空括弧でいくよ。

しかしint戻り値の省略の廃止やプロトタイプ宣言の厳格化など厳しくなったC++で
なんでこの点だけアバウトのままにしたかね。
パラメータ宣言の省略は禁止にすればよかったのに。互換性の問題か?


716 :658:03/02/20 00:35
レスくれた方サンクス

非常に参考になりました。
ただ、自分にコードが書けるかどうか・・・(汗

とりあえず、今からぼちぼちやっていきます。


717 :デフォルトの名無しさん:03/02/20 00:54
>>715
引数がないんだから、何も書かないのは当然。
にもかかわらず、引数に void が書けるのは C との互換性のため。

718 :デフォルトの名無しさん:03/02/20 01:01
>>715
引数がないんだから、何も書かないのは当然。
にもかかわらず、引数に void が書けるのは日下部陽一のファンだから。

719 :デフォルトの名無しさん:03/02/20 02:10
デコンストラクタのような元々引数を渡せない関数の場合は空括弧にして、
普通に引数は渡せるけど使わないときは(void)にしてる。

720 :デフォルトの名無しさん:03/02/20 02:54
>>719
いい事を教えてやろう。
食パンににんにくを擦り付けてトーストにし、オリーブオイルを塗って醤油
をちょっとかけて食べると、うまい。

ところでデコンストラクタって何?

721 :プログラムってなんじゃ(゚Д゚)ゴルァ:03/02/20 03:29
プログラム書いてる友人にC言語やりたいんだけどと、話したら
「( ゚Д゚)ハァ?、初心者はVisual Basicしとけ」といわれました。
プログラムについて何にも知らない香具師が
C言語にチャレンジするのは無謀なんでしょうか・・・
スレ違いだったら吸いません

722 :デフォルトの名無しさん:03/02/20 03:39
>>721
( ゚Д゚)ハァ?と言い返しておきましょう。ていうか折れCしか知らんし。

723 :デフォルトの名無しさん:03/02/20 04:06
>>721
Javaにしとけば?とCスレで言ってみるテスト。

724 :デフォルトの名無しさん:03/02/20 04:47
>>723
死ね 糞言語薦めるな

>>721
Rubyがいいよ

725 :デフォルトの名無しさん:03/02/20 04:52
ANSIでCの規格を策定する際、過去との互換性のためにかなり議論したそうじゃない。
リッチーもこんなに広く使われると予想したならば最初からもうちょっとましな仕様にしたのかな。


726 :デフォルトの名無しさん:03/02/20 05:46
>>725
C++は過去との互換性を多少犠牲にして論理性を向上しているね。
でも元がCだけに文法的に相当無理をしていると感じられる部分が
たくさんあり、C++はとても文法が汚くなってしまったのではないか。

C99はCのマイナーチェンジだよね。根本的には何も変わっていない。

727 :デフォルトの名無しさん:03/02/20 06:29
初心者にお勧めする言語
Scheme, Ruby, Python, Java

日本でコミュニティが一番大きいのはRubyかなあ…
別に上に挙げたのでなくてもいいけど、
きっちり使えるようになったら別の言語に手を染めてみるべし。
二番目に手を出すならCがお勧め。

Lisp系は一度やっとくといいと思うよ。

728 :デフォルトの名無しさん:03/02/20 08:40
Lispは基本教養だからな

729 :デフォルトの名無しさん:03/02/20 08:59
Cはunix系の鯖借りたりアカウント取ったとき便利だよ
Cならデフォルトで使えると思っていい
Cが使えないのは例外的な場合

マイナーな言語はインストールされてないんじゃないの?
root権限なくてインストールできなくて使えない
使えない言語覚えてもしょうがない

Lispは基本教養なの?
Unixの入門書じゃ見かけないよ


730 :デフォルトの名無しさん:03/02/20 09:41
プログラマとしての教養

731 :デフォルトの名無しさん:03/02/20 09:56
教養ですか
パソコンスクールとか英会話学校とか資格試験とか
そういうのが好きならいいかもね

732 :デフォルトの名無しさん:03/02/20 09:58
Lispなんざイラネ、emacs使いたきゃ覚えてろ

733 :デフォルトの名無しさん:03/02/20 19:49
初心者君ですみませんが
printf()等で
%*s等の記述に用いられる
*は何を意味するのでしょうか?

734 :デフォルトの名無しさん:03/02/20 19:56
>>733
検索すれば初心者脱出できますよ!

735 :デフォルトの名無しさん:03/02/20 21:22
>>732
教養のない香具師

736 :デフォルトの名無しさん:03/02/20 22:29
電脳クラブみたいな問題だしてるサイト、本、メルマガしらない?

737 :デフォルトの名無しさん:03/02/20 22:59
>>733
マニュアル読もうよ。
一つだけ注意点。
一部の初心者向けの本で、
printf()系のフォーマットとscanf()系のフォーマットは「同じ」と
嘘を書いてある場合があるので要注意。
#そんな本なら捨ててしまえ。


738 :デフォルトの名無しさん:03/02/20 23:00
>>733
iomanipのsetw()と似ている

739 :デフォルトの名無しさん:03/02/21 00:33
教えて下さい。
・サブネットアドレス(1〜32)を数値(例えば24なら0xFFFFFF00)に変換するような
効率の良いコーディング方法はありますか?
・あと、ある文字列に対し、ビット誤り率が与えられて(例えば0.008)文字列を
ビット誤り(ランダム、バーストどっちでも良い)させてくれる効率の良い
方法はありますか?

二つもあつかましいですが、よろしくお願いします。


740 :デフォルトの名無しさん:03/02/21 00:54
>>739
#define SUBNET(bit) (unsigned int)(((int)0x80000000)>>(bit-1))
こんなんでどうだ?
一応、漏れの書き方は処理系依存だと思うが。

後者はパス。酔ってっから。

741 :739:03/02/21 01:06
>>740
ありがとうございます。
しかしこの方法では、例えばbit=2なら0x40000000となるんじゃないでしょうか??


742 :740:03/02/21 01:09
>>741
処理系は?
一応gcc3.1(PPC)では、bit=2の時、0xc0000000になるよ。
その為に(int)して符号付きにしてっから。

743 :740:03/02/21 01:14
って、答えを待たずに寝るんだけどね。

皆様、良い仮眠を。

744 :739:03/02/21 01:21
>>740
あっ、gccっす。
私も明日試してみます。
おやすみなさい。。


745 :デフォルトの名無しさん:03/02/21 01:21
#define SUBNET(bit) (0xFFFFFFFF&~(~0ul<<(32-(bit))))

746 :デフォルトの名無しさん:03/02/21 01:27
#define SUBNET(bit) (0xFFFFFFFF&~(~0ul<<(( ;゚Д゚)))))) ガクガクブルブル

747 :デフォルトの名無しさん:03/02/21 01:33
>>739
#define SUBNET(bit) (0xFFFFFFFF^(((unsigned)0xFFFFFFFF)>>bit))

748 :デフォルトの名無しさん:03/02/21 01:52
sizeof(int)==32ならば、、、
#define SUBNET(bit) (((unsigned)~0)<<(32-(bit)))

749 :デフォルトの名無しさん:03/02/21 01:56
>>748
256bitマシン(・∀・)イイ!!

750 :デフォルトの名無しさん:03/02/21 01:58
>>749
あるの?
>>745とかぶったな・・・マスクして下位32bitを取り出せばいいのか。

751 :デフォルトの名無しさん:03/02/21 02:00
>>745
なんで結果を反転させているの??

752 :デフォルトの名無しさん:03/02/21 02:49
>>749
256bit以上で256とは限らないけど(・∀・)イイ!!
>>748==750
>>749
(sizeof(int)==4&&CHAR_BIT==8)の間違いに対する突っ込み

753 :748:03/02/21 03:31
おいおい、指摘されるまで気づかなかったぞ(恥恥恥
なにがsizeof(int)==32だ
(sizeof(int)*CHAR_BIT)==32だろ

>>749>>752
サンクス

754 :デフォルトの名無しさん:03/02/21 05:00
islowerは大抵マクロだけど、tolowerは関数なのか。

755 :721:03/02/21 09:50
遅くなりましたが、レスして頂いた方々ありがとうございました。
非常に勉強になりました。皆さんのレスを参考に勉強してみようと思います。
皆さんのような初心者に助言出来る漢に早くなりたいです。
恥ずいので、sage(´Д`;)

756 :デフォルトの名無しさん:03/02/21 14:08
サブネットアドレスで、/2なんてみたことねー

757 :デフォルトの名無しさん:03/02/21 15:34
typedef struct HOGE hoge;

struct HOGE{
 int n;
 char buff[INT_MAX];
};

この順番でもいいの?
未定義の識別子とかエラーにならない?


758 :デフォルトの名無しさん:03/02/21 15:39
FreeBSEとNetBSEではどちらがオススメですか?


759 :デフォルトの名無しさん:03/02/21 15:42
私メル友がすっごくすっごく欲しくってー、\(⌒∇⌒)/
探してたら(◎_◎)なんとっ!☆彡(ノ^^)ノ☆彡ヘ(^^ヘ)☆彡(ノ^^)ノ☆彡
素敵な掲示板♪を発見!!!!(^o^)//""" パチパチパチ
あやしい所とか…{{ (>_<;) }} ブルブルすごい数の掲示板がありますけど、
これ全部1人の方が管理しているんですか?(@@;)すごすぎ …
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘφ(`∇´)φカキコカキコ♪
メル友に、なってくれるよねっ。(*^-^*) お・ね・が・い♪(* ̄・ ̄)ちゅ♪ッ
アドレスpeacelove@bitcoop.com


760 :デフォルトの名無しさん:03/02/21 15:46
Free Bovine Spongiform Encephalopathyでしか?

761 :デフォルトの名無しさん:03/02/21 15:54
>>757
typedefではstruct HOGEという型にhoge_tを割り当てるだけ。
struct HOGEをこの段階で参照しているわけではないので問題なし。
そうでないとこう言うことができない。
typedef struct HOGE hoge_t;
struct HOGE {
int n;
hoge_t *pNext;
};

それはいいけど、INT_MAX個の配列の方が(文法上問題なくても)無理っぽ。

762 :デフォルトの名無しさん:03/02/21 16:40
int a=2;
a *= 1.5;

の結果ってコンパイラによって違うんですか?
LSI-C86だと a == 2
LightCだと a == 3
になるんですが。

763 :デフォルトの名無しさん:03/02/21 16:50
LSI-C86は、標準では整数型の範疇で処理しようとするので要注意。
普通のコンパイラなら、doubleの演算を行なうので3になるはず。

764 :デフォルトの名無しさん:03/02/21 16:53
>>762
gccでオプティマイズしたら、
int a = 3;
と同じコードを出力してきた。

765 :デフォルトの名無しさん:03/02/21 16:53
つられつられて、母を訪ねて三千里。
gcc,と,bcc,と,mscとか,あんしcを比べてみれば?

766 :デフォルトの名無しさん:03/02/21 17:10
char s[512], hoge[512];
struct AHYA{
unsigned char piyo[2];
}
printf( "s =%s\n", s);
$3438 /* 文字列 */
sscanf( s, "%x", hoge );
printf( "hoge =%x\n", *(int *)hoge);
$3438 /* "34""38"の2バイト */
このhogeの中身を
AHYA.piyoに格納したいのですが
どうにもいれることができません。
童貞だったときに、あせって尻の穴に
ティンコを挿れようとし、怒られた気分です。
どなたか御教授くださいませ。
おながいします。。。

767 :デフォルトの名無しさん:03/02/21 18:09
>>766
structの定義の仕方を勉強し直してらっしゃい。

768 :762:03/02/21 18:25
>>763
ありがとうございます。
ちょっとLSI-Cのマニュアル見てみたんですけど、これに関する記述は見つからなかったです。
「標準」というのがどういう場合かわからなくて不安です。

769 :766:03/02/21 18:35
>>767サソ
スマソ・・・
変数定義し忘れておりますた。
スマタスマタ・・・(;´Д`) ハァハァハァハァハァハァハァ
struct AHYA{
} sumata;
ということで、再度御教授おながいいたします!!

770 :デフォルトの名無しさん:03/02/21 19:14
質問の意味がわかりません。
他の人お願いします。

771 :デフォルトの名無しさん:03/02/21 19:30
>>768
LSI-Cの代入演算子は、代入されるべき型へのキャスト後に演算を行なう仕様だったかと。
即ち、
int a = 2;
a *= 1.5;

通常のcが
a = (int) ((double) a * (double) 1.5);
と解釈してdoubleで乗算を行なうのに対してLSI-Cでは
a = a * (int) 1.5;
と解釈してintで乗算を行なう。
なので、代入演算子には注意が必要。


772 :デフォルトの名無しさん:03/02/21 20:24
K&R読んでたんだが
添点の読みかた教えてください
てんてん?そてん?


773 :デフォルトの名無しさん:03/02/21 20:29
>>772
添点ソエテ

774 :デフォルトの名無しさん:03/02/21 20:30
茶道だと、点前(てまえ)とかいうもんな。

775 :デフォルトの名無しさん:03/02/21 22:51
野点(のだて)というのもある。

776 :デフォルトの名無しさん:03/02/22 00:58
>>773
ATOK14じゃ変換できねーぞおい。

777 :デフォルトの名無しさん:03/02/22 01:03
777

778 :デフォルトの名無しさん:03/02/22 01:13
>>773
goo国語辞典でも出てこない罠。

つーかおまいら、ここはC言語スレですよ?

779 :デフォルトの名無しさん:03/02/22 01:15
K&Rの何頁だい?

780 :デフォルトの名無しさん:03/02/22 01:30
C言語は日本語の基礎を理解していないと習得できない。
1978,Brian W. Kernighan

781 :デフォルトの名無しさん:03/02/22 01:34
K&Rは、日本語の基礎を理解していたのか・・・

782 :デフォルトの名無しさん:03/02/22 02:02
>>781
日本語の勉強はしていたらしいとマゾレス


783 :デフォルトの名無しさん:03/02/22 02:08
蟹飯って名前いいよね

784 :デフォルトの名無しさん:03/02/22 02:12
>>782
K&R日本語第2版の訳者前書きにそういうエピソード出てくるよね。

785 :デフォルトの名無しさん:03/02/22 05:28
ベテランはCの標準関数は全く使わないんだってね!!

786 :デフォルトの名無しさん:03/02/22 07:16
そう。ベテランはクラスライブラリを利用する。

787 :デフォルトの名無しさん:03/02/22 10:18
C言語スレで何言ってるの

788 :デフォルトの名無しさん:03/02/22 10:35
ベテランはハンドコンパイルしてハンドリンクする。

789 :デフォルトの名無しさん:03/02/22 12:50
本の話になるのですが
独習CとK&R、買うんだったらどっちがいいでしょうか?
もしよければ、みなさんのオススメの本も教えてくらさい

790 :デフォルトの名無しさん:03/02/22 12:51
プログラミング初心者なら独習
それ以外ならK&R

791 :デフォルトの名無しさん:03/02/22 12:57
なるほど
じゃあ自分は初心者だから独習かな
返答ありがとうございました

792 :デフォルトの名無しさん:03/02/22 13:24
毒手C言語

793 :791:03/02/22 13:26
それと、790さんの答えをいただいて
もう1つ質問なのですが
どんなことが出来れば上級者で
どんなことが出来なければ初心者なのでしょうか?
愚問スマソ

794 :デフォルトの名無しさん:03/02/22 13:29
定義が存在しない以上、そんなことを判断することは出来ない

795 :デフォルトの名無しさん:03/02/22 13:36
事前の設計無しに無理なく10万行のコードを書き上げられること。

796 :デフォルトの名無しさん:03/02/22 13:38
プログラミング技術とC言語利用術を区別できれば初心者脱出。

797 :デフォルトの名無しさん:03/02/22 13:39
>>795
クズコーダーの方ですか?

798 :デフォルトの名無しさん:03/02/22 13:54
>>797
嫉妬ですか:-)

799 :デフォルトの名無しさん:03/02/22 14:23
上級者とか言ってて恥ずかしくならないか?
そんなに級がほしけりゃパソコン検定でも受けてろ

800 :デフォルトの名無しさん:03/02/22 14:30
おれはPG初段だけどね

801 :デフォルトの名無しさん:03/02/22 15:01
さーて、これから憂鬱本でも読むとするか。

802 :デフォルトの名無しさん:03/02/22 16:12
>>795
まともに設計して 30K ステップ程度のものを
100K ステップ書いたのだとしたら相当無能ですが。

803 :デフォルトの名無しさん:03/02/22 16:37
ANSI/ISO準拠のCのパーサを空で書ける奴は間違いなくCのベテラン。
コンパイラ書きでもなければ、Cという言語自体のベテランである必要はない。






804 :デフォルトの名無しさん:03/02/22 16:41
>>795
> 事前の設計無しに

(・∀・)ニヤニヤ
( ´,_ゝ`)プッ
(゚Д゚)ハァ?

805 :デフォルトの名無しさん:03/02/22 17:55
ステップって何?
行数との違いは?

806 :デフォルトの名無しさん:03/02/22 18:09
>>805
正確な定義はしらん。というか多分無いだろう。
構文規則で云うところの「文(statement)」のような気もするが、
複文(compound-statement)のように、他のstatementを(再帰的に)含む
文の扱いが自明でないので、違う気もする。
現実的にはコメントや空白のみの行、空行等を除いた行数を「ステップ数」
と云っていることが多いと思われ。



807 :805:03/02/22 18:19
>>806
即レスありがとう御座いました。

808 :デフォルトの名無しさん:03/02/22 21:08
独習って無駄なことがだらだら書かれてあんなに量が多くなってるんだと
おもうけど
それは間違い?

809 :デフォルトの名無しさん:03/02/22 21:18
毒手って無駄などくがだらだら染みこんであんなに手が黒くなってるんだとおもうけど
それは間違い?

810 :デフォルトの名無しさん:03/02/22 22:59
黒人差別か

811 :デフォルトの名無しさん:03/02/22 23:01
学校のほうでLinux上でC言語のプログラムを組んでるんですが
Linuxでは動くプログラムがBorlndのコンパイラではコンパイルはできるのですが
実行ファイルが正常に動かないんです。何か解決方法あれば教えていただけないですか

812 :デフォルトの名無しさん:03/02/22 23:03
それだけでわかるかよ。
リンクできたのならLinux独自の関数(各種システムコールとか)を使っているせいではないだろうし。

813 :デフォルトの名無しさん:03/02/22 23:03
>>811
コードによってはコンパイラ毎に動作が異なることがあるし
バグがあった場合その症状が出たり出なかったりすることもある。
単純にバグだと思ってBorland Cでデバッグしなよ。

814 :デフォルトの名無しさん:03/02/22 23:12
>>813
即レスありがとうございます.
やはり、コンパイラが異なるからからですか。とりあえずやってみます。

815 :デフォルトの名無しさん:03/02/22 23:14
>>814
コンパイラのせいにするな。

816 :デフォルトの名無しさん:03/02/22 23:16
Linuxでは初回のmallocが0fillされてて初期化し忘れてもちゃんと動いて
それをWinに移植するとちゃんとバグってくれる。フフフフフ

817 :デフォルトの名無しさん:03/02/22 23:21
>>811
単に gcc 拡張を使っているんじゃないのか?
それか、もとのLinuxでも、警告が出ているのを無視しているとか。
他のコンパイラだと警告レベルのものを、Borlandだとエラーで止めることがある。

818 :デフォルトの名無しさん:03/02/22 23:22
>>817
コンパイルもリンクもできたと言っているが。

819 :デフォルトの名無しさん:03/02/22 23:28
同名関数の挙動の違いによるものに一票

820 :デフォルトの名無しさん:03/02/22 23:30
不正な領域に書き込みしているに一票

821 :デフォルトの名無しさん:03/02/22 23:31
UnitTestをしていないのが悪いに一票

822 :デフォルトの名無しさん:03/02/22 23:32
エラーチェックしていないだけとか・・・

823 :デフォルトの名無しさん:03/02/22 23:32
ぬるぽが悪いに一票

824 :デフォルトの名無しさん:03/02/22 23:33
ファイルをfopen("/home/giko/mona.txt", "r")みたいに指定してるとか。

825 :デフォルトの名無しさん:03/02/22 23:34
>>824
かつエラーチェックしていないってやつね。

826 :デフォルトの名無しさん:03/02/23 00:05
1byte余計に書き込んでいるバグを2年も気づかず、ある日思い出したように
(ソース変更してないのに)プログラムがクラッシュしだした。
Windowsでの実話。俺が悪いんだが、Windowsって不思議なOS。



827 :Y.Kusakabe:03/02/23 00:24
>>826
よくありますね。そういうこと。

828 :デフォルトの名無しさん:03/02/23 00:24
環境かえるとバグを発見しやすいからgcc&linuxのプロジェクトでも
いっつもVCでビルドとおるようにしてるよ。VSの方が使いやすいって事もあるけど。

829 :デフォルトの名無しさん:03/02/23 00:57
どうせこんなの改行コードの違いとか程度のことじゃねーの?


830 :デフォルトの名無しさん:03/02/23 01:04
p = malloc(0);

↑0バイトの領域確保しても問題ないですか?
常にNULLでぃすか?

831 :デフォルトの名無しさん:03/02/23 01:20
>>830
0バイトでも問題無いんじゃねーの?
0バイトの時に、*pに大して全く参照も代入もしないんであれば。

但し常にNULLとも、NULLで無いとも言えない。
処理系に依存してたと思う。
心配なら、mallocする前に引数チェックしる。

832 :デフォルトの名無しさん:03/02/23 01:25
え〜っと、自分の頭が悪いに一票

833 :怒り:03/02/23 03:01
質問でございます。
どうあがいても、コンパイラにプロトタイプ宣言のない関数の呼び出しって
怒られます。すげーむかついてます。
なんででしょうね?不思議ですね。
考え得る原因はなんでしょうか。

834 :デフォルトの名無しさん:03/02/23 03:08
>>833
プロトタイプ宣言が無いから。

835 :デフォルトの名無しさん:03/02/23 03:15
>>833
本当に足掻いたか?
足掻いたソースを見せてみろ。

836 :怒り:03/02/23 03:16
やっぱりそうきたかー
なんか怒られつつも実行できたから、余計にむかついてるんです
すざけんな!

837 :怒り:03/02/23 03:19
836は>>834への返答です
足掻くというのはなんでしょうか?
何度もすみません。

838 :怒り:03/02/23 03:21
あと”ふざけんな!”ってのは(すざけんなになってるけど
俺が使ってるボーランドのコンパイラに向けての叫びです。
何度もすみません。

839 :デフォルトの名無しさん:03/02/23 03:26
>>833

int main()
{
func();
return 0;
}

こういうのがいけない。
funcの呼び出しの前にint func(void);など(もちろん実際の関数定義と同じもの)と書いておく。Cならエラーにならないけど、C++だとエラーになる。
ちなみに通常printfなどで警告がでないのは、それのプロトタイプがかかれたファイル(stdio.h)をインクルードしているから。

840 :怒り:03/02/23 03:27
「足掻く」で「あがく」って読むんですね、、。
どうか見捨てないでください。ソース書きます。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


/* 定数 */
#define GAME_COUNT 5 //ゲーム回数
#define INITIALIZE_POINT 10 //得点の初期値
#define NOT_USED 0 //未使用カード
#define USED (-1) //使用済みカード

/* グローバル変数 */
int computer_card[3];
int computer_point;
int player_card[3];
int player_point;
int card[4][13];

/* プロトタイプ宣言 */
void showpoint();
void shuffle();
int getcard();
void showcard();
void judge();

int main(){
て感じですが、、、


841 :デフォルトの名無しさん:03/02/23 03:30
>>840
肝心の「プロトタイプ宣言のない関数の呼び出し」の部分を書かないとだめでしょ(^_^;)

842 :841:03/02/23 03:34
多分stdio.h,stdlib.h,time.hにない関数を使っているんじゃないかなぁ。

843 :怒り:03/02/23 03:36
はい。main関数の中で
for(i = 0; i < GAME_COUNT; i++){
showpoint();//現在のプレイヤの得点を表示
shuffle();//カードを初期化

computer_card[0] = getcard();//コンピュータにカードを1枚配る

player_card[0] = getcard();
player_card[1] = getcard();//プレイヤにカードを2枚配る

showcard();//カードを表示
の部分のshowpoint(), shuffle, getcard()及びこのあとの関数全部に
警告が出ます。もちろんいっちゃん下のほうで全関数を定義してるんですけども
うぅぅ、、、


844 :デフォルトの名無しさん:03/02/23 03:38
悪いこと言わんからプロトタイプ宣言はやっとけ。
ちゃんと動いてるというのがたまたまちゃんと動いているように見えるだけかもしらんし。
プロトタイプ宣言があればそういう危険性はかなり減らせるぞ。
(あくまで減るだけな。なくせはしない)

845 :デフォルトの名無しさん:03/02/23 03:39
mainを一番下に移動しろ

846 :デフォルトの名無しさん:03/02/23 03:40
>>840
この問題とは関係ないけど、Cの場合、プロトタイプの引数リストの省略はやめた方がいい。voidならvoidとかく。


847 :デフォルトの名無しさん:03/02/23 03:43
>>843
問題なさそうだが・・・・

848 :デフォルトの名無しさん:03/02/23 03:45
プロトタイプと関数の定義に食い違いがあるとか?

849 :怒り改め開放感:03/02/23 03:48
>>844-846様方
>>845様のいうようにmainを一番下に移動しても
警告が出て、きれました。
そこで、>>846様のいうように引数を全てvoidに書き換えた所、
問題なくコンパイルできました。
感動しました。
今後もこのプログラム技術板にくだらない質問を投げかける可能性があります。
そのときも、どうか今回のような暖かい対応をしてやってください。
まじでありがとうございました。
やっと寝れそうです。

850 :デフォルトの名無しさん:03/02/23 03:50
警告メッセージを書いてくれるとよかったとおもいます

851 :デフォルトの名無しさん:03/02/23 03:52
>>849
え?BCCってそういう挙動をするの?
gccじゃならないけど(^_^;) 多分VC++でも。
どちらが正しいんだろう。

852 :デフォルトの名無しさん:03/02/23 03:53
>>850
書いてあるぞ。

853 :怒り改め開放感:03/02/23 03:53
>>850
はい。警告メッセージは、

警告 W8065 bj.c 162: プロトタイプ宣言のない関数
'showpoint' の呼び出し(関数 main)

でございました。
何度もすみません。

854 :デフォルトの名無しさん:03/02/23 03:55
BCCは

/* プロトタイプ宣言 */
void showpoint();
void shuffle();
int getcard();
void showcard();
void judge();

これらをどう見ているんだろう。


855 :851:03/02/23 03:57
VC++6.0でもならなかった(もちろん/W4はつけた)。

856 :デフォルトの名無しさん:03/02/23 09:12
/* プロトタイプ宣言 */
void showpoint();
どう解釈されるか、だな。
cの場合、()の場合は引き数の宣言の省略と見做される。
つまり、プロトタイプ宣言にさえなっていない。
c++の場合、()の場合はvoidの省略と見做される。
つまり、引き数がないことの宣言とか解釈される。

どっちみち、cなら(void)って書いておけ。

857 :デフォルトの名無しさん:03/02/23 09:42
プロトタイプ宣言にはなってるだろ。
Cであれば、 void showpoint(); は void showpoint(...); と見倣される。

858 :デフォルトの名無しさん:03/02/23 09:48
>>857
なってません。
任意の引数がOKというのと引数に関する情報がないというのは別。
そもそも...単独というのはCでは許されない。


859 :デフォルトの名無しさん:03/02/23 10:00
これだからc++だけ齧ってc知らない奴は……

860 :デフォルトの名無しさん:03/02/23 10:07
多分ボーランドのコンパイラのバグだと思うぞ

861 :デフォルトの名無しさん:03/02/23 10:51
void main(void)の場合は正常、
main()の場合はエラー
bccはこのようなことになるのに
gccだとエラーがでないのは何故ですか?
どちらが正常ですか?


862 :デフォルトの名無しさん:03/02/23 10:58
void main じゃなくて int main が正解

863 :デフォルトの名無しさん:03/02/23 11:02
少なくとも、エラーと警告の区別もつかない>>861以外。


864 :デフォルトの名無しさん:03/02/23 11:04
>>861
お前のコーディングが間違っている
コンパイラがエラーに厳しいか甘いかの違い


865 :デフォルトの名無しさん:03/02/23 11:04
void* main(void)

866 :デフォルトの名無しさん:03/02/23 11:06
int mainだと警告になりましたbccでやると
void mainだと正常

正解はint mainでしたか 
なかなか基本的な部分で違いがあるので混乱しますね
レベルが低いということでしょうか
この程度も統一できないということは

867 :デフォルトの名無しさん:03/02/23 11:10
>>866
レベルが低いということでしょうか
この程度も理解できないということは


868 :デフォルトの名無しさん:03/02/23 11:11
正常ならばいちいち警告を出す必要は無いと思うが、、、
cとc++の違いによるものですか?


869 :デフォルトの名無しさん:03/02/23 11:11
main の return 忘れてるだろ

870 :デフォルトの名無しさん:03/02/23 11:14
BCCはデフォルトでいろいろ警告がウザいのは事実ではあるが。

871 :デフォルトの名無しさん:03/02/23 11:17
main()
みたいに戻り値を省略したらintを返すと解釈される
だからintを返さないとエラー

872 :デフォルトの名無しさん:03/02/23 11:35
#include <stdio.h>
int main(void)
{
printf("c\n");
return(0);
}

#include <stdio.h>
void main(void)
{
printf("c\n");
}
この二つはどちらが正常ですか それともどこが間違っていますか?


873 :デフォルトの名無しさん:03/02/23 11:43
>>872
>>1からリンクされてるものをみましょう。

874 :デフォルトの名無しさん:03/02/23 11:44
いや、
char * main(void)
{
printf("c\n");
return "successful";
}
が正解だろ。

875 :デフォルトの名無しさん:03/02/23 11:58
書籍を3冊見たら3冊とも違うパターンでした
872のような二つと単なる main() だけの記載のものと
三者三様でした


876 :デフォルトの名無しさん:03/02/23 12:00
>>875
↓これが正解
FILE *main(double argc,size_t *argv[])


877 :デフォルトの名無しさん:03/02/23 12:03
>>875
>>1からリンクされてるものをみましょう。

878 :デフォルトの名無しさん:03/02/23 12:12
11.15:
僕がいつも使っている『ほんとおの馬鹿向けのC』には、いつもvoid main()と書いてる。

A:

たぶんその本の著者は自分も対象読者の一人に数えているのだろう。 不思議なことに、例題のコードでvoid main()と書いてる本は多い。 そういう本は間違っている。



879 :デフォルトの名無しさん:03/02/23 12:25
>>859
いやー、ごめんね。普段Cなんていう化石使ってないから・・・

880 :デフォルトの名無しさん:03/02/23 12:43
わかりました
わかる人が誰もいないということですね

881 :デフォルトの名無しさん:03/02/23 12:47
ANSI規格的には int main() が正しい

882 :デフォルトの名無しさん:03/02/23 12:51
わかりました int main() でやります

883 :デフォルトの名無しさん:03/02/23 12:55
MSDNライブラリのサンプルもvoid main()になっているよね。

884 :デフォルトの名無しさん:03/02/23 13:03
mallocしたヒープ領域を明示的にfreeせずにmainを抜けた後に
OSが自動的に開放してくれることを期待したコードを書いても大丈夫ですか?
それとC言語のgotoってどのようなケースで使われるのでしょうか?

885 :デフォルトの名無しさん:03/02/23 13:05
>>884
gotoはifと組み合わせてwhileのかわりに使う。

886 :デフォルトの名無しさん:03/02/23 13:10
>>884
そのOSでfreeせずに抜けるコードを作ってためしゃいいのでは?

887 :デフォルトの名無しさん:03/02/23 13:26
int mainの次はfreeかよ

888 :デフォルトの名無しさん:03/02/23 13:29
freeの次はdeleteかよ

889 :デフォルトの名無しさん:03/02/23 13:42
過去ログ検索って何ですか?

890 :デフォルトの名無しさん:03/02/23 13:44
>>889
C言語と関係あるんですか?

891 :デフォルトの名無しさん:03/02/23 13:46
>>889
HANDLE FindPastLog(LPCTSTR lpszName, DWORD dwReserved);

892 :デフォルトの名無しさん:03/02/23 13:48
残念ながら間に合いませんでした。

893 :デフォルトの名無しさん:03/02/23 13:53
>>884
breakもreturnも、言ってみれば飛び先の確定しているgoto。
つまり、関数分けを使いたくないときに使われることがたまにある。

ex)
void func(void)
{
 初期処理();
 if (条件) {
  goto end;
 }
 本処理();
 end:
 終了処理();
 return;
}
この場合、条件判断を本処理に入れればgotoは不用になる。
或いは、次のように書いてもいい。
void func(void)
{
 初期処理();
 if (!条件) {
  本処理();
 }
 終了処理();
 return;
}


894 :デフォルトの名無しさん:03/02/23 14:10
(・∀・)チンポ!! (・∀・)

895 :デフォルトの名無しさん:03/02/23 14:24
(・∀・)ヌルポ!! (・∀・)

896 :デフォルトの名無しさん:03/02/23 14:27
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >.__Λ∩
  _/し' //. V・∀・)/
 (_フ彡        /  ←>>895

897 :デフォルトの名無しさん:03/02/23 14:38
int arr[3][3][3];
int *(*ptr)[3][3];
のとき、ptr が arr[1][1][1] を指すようにする方法を教えてください。

898 :デフォルトの名無しさん:03/02/23 14:39
ptr = &arr[1][1][1];

899 :897:03/02/23 14:46
訂正です。
誤 ) int *(*ptr)[3][3];
正 ) int (*ptr)[3][3];

>>898
それだと、int * から int (*)[3][3] に変換できない。といわれます。

900 :デフォルトの名無しさん:03/02/23 14:48
>>897
その定義では ptr はサイズ[3][3]の int型へのポインタの配列を
指しているから、キャストするだけでは無理。

901 :デフォルトの名無しさん:03/02/23 14:50
>>900
ptr = (int (*)[3][3])&arr[1][1][1];

902 :デフォルトの名無しさん:03/02/23 15:01
>>901
期待する結果が出ました。ありがとうございました。
単にキャストするだけでよかったのですね。
ptr = arr + 1 + 3 + 9;
などとやっていました。

903 :デフォルトの名無しさん:03/02/23 17:14
>>364
ガッ

904 :デフォルトの名無しさん:03/02/23 19:43
>>893
gccだとラベルのアドレス取得とポインタへのgoto使えるから、
関数内ジャンプテーブルなんてことも出来るんだけどね。

これってC99でも仕様に取り込まれてないよね?

905 :デフォルトの名無しさん:03/02/23 19:47
>>904
ない。

906 :デフォルトの名無しさん:03/02/23 20:13
変数a、bを入れ替える場合、こういうのでいいんですか?

int a,b;
int hoge;
hoge = a+b;
a = hoge-b;
b = hoge;

これでいいのでしょうか?
もっとうまく、見やすくする方法とかないですか?
単純なことですがどうかよろしくお願いします。

907 :デフォルトの名無しさん:03/02/23 20:15
int tmp=a;
a=b;
b=tmp;

908 :デフォルトの名無しさん:03/02/23 20:15
int a, b;
int tmp;

tmp = a;
a = b;
a = tmp;



909 :906:03/02/23 20:17
あぁ、そういうやり方がありましたか。
どっちも>906より見やすいですね。


910 :621です:03/02/23 20:19
基本的なしつもんなのですが…

C言語でファイルを読み込む際、途中から読み込むにはどうしたらいいのでしょうか?

(例) test.txtに保存されてある情報
-----------------------------------------
name:takasi
age:20
kao:c:\windows\デスクトップ\data\kao1.bmp

name:taro
age:22
kao:c:\windows\デスクトップ\data\kao2.bmp

name:yasiro
age:25
kao:c:\windows\デスクトップ\data\kao3.bmp
-----------------------------------------
とあった場合、test.txtをopenした時、先頭の行から読み込むのではなく、「taro」だけの部
分を読み取りたいのですが…
(具体的にはtaroとageの部分とkaoの部分を一緒にテキストファイルから取得したい)

どういうふうにCにすればいいのかでまた困っている状態ですので教えてください



911 :デフォルトの名無しさん:03/02/23 20:20
すいません、621ですという名前、間違いです。
ただの名無しなのでこのスレ中の621さん、スマソ つД;)

912 :デフォルトの名無しさん:03/02/23 20:20
>>910
"name:taro" が出てくるまで普通に読め。

913 :デフォルトの名無しさん:03/02/23 20:21
('A`)fseek

914 :デフォルトの名無しさん:03/02/23 20:27
>>910
Windows 専用で良ければ、ファイルを以下のように直した後
-----------------------------------------
[takasi]
age=20
kao=c:\windows\デスクトップ\data\kao1.bmp

[taro]
age=22
kao=c:\windows\デスクトップ\data\kao2.bmp

[yasiro]
age=25
kao=c:\windows\デスクトップ\data\kao3.bmp
-----------------------------------------
const char *inifile = "test.txt";
const char *section = "taro";

int age;
char kao[MAX_PATH};

age = (int)GetPrivateProfileInt(*section, "age", 0, inifile);
GetPrivateProfileString(section, "kao", "NUL", kao, sizeof(kao), inifile);

>>913
どこにシークしろと

915 :デフォルトの名無しさん:03/02/23 20:28
>>910
FILE *f = popen("sed -n '/^name:taro/,/^$/{//q;p;}' test.txt", "r");
fgets(name, sizeof name, f);
fgets(age, sizeof age, f);
fgets(kao, sizeof kao, f);


916 :デフォルトの名無しさん:03/02/23 20:30
sedかっこいい。

917 :デフォルトの名無しさん:03/02/23 20:31
fseek だと固定長にするしかないな。

918 :デフォルトの名無しさん:03/02/23 20:49
> 基本的なしつもんなのですが

一体どういう意味でこれを書いたのか教えてもらいたい。

919 :デフォルトの名無しさん:03/02/23 20:52
基本的なつけもんなのですが

920 :デフォルトの名無しさん:03/02/23 21:07
根源的な質問なんですがどうしてC言語使いは性格の歪んだ人が多いのでしょうか?
初心者ですので懇切丁寧に教えてください。

921 :デフォルトの名無しさん:03/02/23 21:09
> C言語使いは性格の歪んだ人が多いのでしょうか?

その事をどうやって知り得ましたか?

922 :デフォルトの名無しさん:03/02/23 21:15
>>921
自分がそうなりました。

923 :デフォルトの名無しさん:03/02/23 21:15
>>920
頑固なジジイなんだからしょうがないじゃん。

924 :デフォルトの名無しさん:03/02/23 23:54
公文的なポケモンですが・・・しまった、後が続かない。

>>910
typedef struct USER {
 char name[20];
 int age;
 char kao[200];
} User_t;
とでもしておいて、

User_t *getUserData(FILE *fp);
んな関数作って、

User_t *pUser;
FILE *fp = fopen("test.txt", "r");
do {
 pUser = getUserData(fp);
} while (strcmp(pUser->name, "taro") != 0);
fclose(fp);
printf("%s の年齢は %d、顔は %s を見ろ。\n", pUser->name, pUser->age, pUser->kao);

とでもすればいいんでないの?

925 :デフォルトの名無しさん:03/02/24 00:30
教えて下さい。
#define MSG(p) ("test" + p + "\n")
というようなマクロを作りたいのですが、
うまくいきません。
pには文字列を入れる場合と、数値の場合があるのですが、
それぞれどのようなマクロを作ればよいでしょうか?


926 :デフォルトの名無しさん:03/02/24 00:35
文字列リテラル用
#define MSG(str) "test" str "\n"

定数用
#define MSGi_(n) MSG(#n)
#define MSGi(n) MSGi_(n)


927 :925:03/02/24 00:40
>>926
ありがとうございました。

定数用の#nはどのように使うのですか?


928 :デフォルトの名無しさん:03/02/24 00:47
MSGi()は正確には定数用じゃなくてなんであろうと文字列化して"test"と"\n"
と連結するマクロだが、MSGi_()はwork用のマクロなので直接使うものではない。


929 :デフォルトの名無しさん:03/02/24 04:52
賢い人!教えてください。
int main()
{
  FILE *fp;
  char c;
  fp = fopen("c:\\hoge.txt", "wb");
  c='.';
  fwrite(&c, 1, 1, fp);
  fwrite(&c, 1, 1, fp);
  ??
  fclose(fp);

   return 0;
}
2バイト目を削ってサイズが1バイトのファイルとしてクローズさせるには
どんな関数を使えば良いのでしょう?

930 :デフォルトの名無しさん:03/02/24 04:55
freopen()

931 :デフォルトの名無しさん:03/02/24 04:59
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/wara/

932 :デフォルトの名無しさん:03/02/24 05:11
>>929
ftruncate()とかchsize()

933 :デフォルトの名無しさん:03/02/24 05:24
>>932
天才!まさに、これがやりたかったのです。
fseekじゃあ移動するだけでした。(汗

934 :デフォルトの名無しさん:03/02/24 06:28
>>933
そんなもん使うなんて設計がおかしくねぇの?

935 :デフォルトの名無しさん:03/02/24 06:44
flock使う時は必用になることがある

936 :デフォルトの名無しさん:03/02/24 11:38
素直に必要な部分だけのファイルを作って
renameがおすすめ。

937 :デフォルトの名無しさん:03/02/24 12:04
/* ファイルを単純に切り詰める。 */
void truncFile(char const *file, size_t len)
{
FILE *fpOrg;
FILE *fpTmp;
char *pBuf;
char const *pTemp;

pBuf = malloc(len);

fpOrg = fopen(file, "r");
fread(pBuf, 1, len, fpOrg);
fclose(fpOrg);

pTemp = tmpnam(NULL);
fpTmp = fopen(pTemp, "w");
fwrite(pBuf, 1, len, fpTmp);
fclose(fpTmp);

rename(pTemp, file);

free(pBuf);
return;
} /* きたねぇコードだ */

938 :デフォルトの名無しさん:03/02/24 12:07
おっと忘れた。
len = fread(pBuf, 1, len, fpOrg);
にすればlenがファイルより長くても安心だな。
勿論、malloc()、fopen()、fwrite()、(write後の)fclose()、rename()の
戻り値のチェックも忘れずに。

939 :デフォルトの名無しさん:03/02/24 12:13
同名ファイルがあってもrenameできるのか?

940 :デフォルトの名無しさん:03/02/24 12:14
最後の return; ってなんでしか

941 :デフォルトの名無しさん:03/02/24 12:25
>>939
マニュアルページを見る限りできるように思う。
できなきゃremove()するまで。
>>940
真面目に戻り値を返す意図があった名残。

942 :デフォルトの名無しさん:03/02/24 12:53
Cにtmpnam()というライブラリ関数があるので、テンポラリファイルには
この関数を使って名前作成しよう。

943 :937=938=941:03/02/24 12:56
>>942
使ってますが何か。

944 :デフォルトの名無しさん:03/02/24 12:57
int rename( const char *oldname, const char *newname );

戻り値
成功すると 0 を返します。エラーが発生すると 0 以外の値を返し、
グローバル変数 errno に以下のどちらかの値を設定します。

EACCES
 newname で指定したファイルまたはディレクトリが既に存在するか、
 パスが無効で作成できない。
 あるいは、oldname がディレクトリであるのに、newname で別のパスを指定した。
ENOENT
 oldname で指定したファイルまたはパスを検出できない。
EINVAL
 名前に無効な文字が使われている。

945 :デフォルトの名無しさん:03/02/24 12:58
> マニュアルページを見る限りできるように思う。
どういう読みかたしたのか知らんが出来ない

> できなきゃremove()するまで。
最初からそうしとけ

946 :デフォルトの名無しさん:03/02/24 13:00
>>944
環境は?

947 :デフォルトの名無しさん:03/02/24 13:03
>>946
関数    必要なヘッダー      互換性
rename  <io.h> または <stdio.h>  ANSI, Win 95, Win NT

948 :デフォルトの名無しさん:03/02/24 13:04
>>942
|説明
|   tmpnam() 関数は、ファイル名に使える文字列へのポインタを返す。この名前を持つファイル
|   は、ある時点では存在していなかった。従って幼稚なプログラマはこの文字列がテンポラ リ
|   ファイルのファイル名として適していると考えるかもしれない。
それに同じファイルシステム上に作られるという保証はない。

>>945,947
一般的にUNIXでは可能。


949 :デフォルトの名無しさん:03/02/24 13:04
>>947
注:古いMSDNライブラリ

950 :デフォルトの名無しさん:03/02/24 13:06
renameなんて関数が標準ライブラリにあったんだな・・・

951 :デフォルトの名無しさん:03/02/24 13:10
よく分からないんだけど tmpnam() は使わずに自作しろってこと?

952 :デフォルトの名無しさん:03/02/24 13:11
てか問答無用で(removeして)renameするなら、
> fpTmp = fopen(pTemp, "w");
この時点で目的のファイル名にしておけば

953 :デフォルトの名無しさん:03/02/24 13:20
ところで、UNIX上でrenameして
指定されたnewnameのファイル/ディレクトリが既に存在していた場合どうなるの?
既存の方は消される?
あるファイル名を既存のディレクトリ名にrenameしたら、そのディレクトリは消える?
Windowsだと同名のファイルとフォルダは共存出来ないけど…

954 :デフォルトの名無しさん:03/02/24 13:23
unixでもディレクトリはアンリンクされませんよ。
ファイルはアンリンクされるけど、
他のプロセスがそのファイルをオープンしている限りディスク上からは消えない。

955 :デフォルトの名無しさん:03/02/24 13:27
>>953
> 指定されたnewnameのファイル/ディレクトリが既に存在していた場合どうなるの?
> 既存の方は消される?
removeはターゲットがファイルの場合はunlink, ディレクトリの場合はrmdir
相当の処理を行う。よって

> あるファイル名を既存のディレクトリ名にrenameしたら、そのディレクトリは消える?
既存のディレクトリ配下にファイルやディレクトリが存在しない場合は消える。
存在する場合、rmdirも失敗するので、removeも失敗する。

> Windowsだと同名のファイルとフォルダは共存出来ないけど…
Unixでも同じ。

956 :デフォルトの名無しさん:03/02/24 13:30
>>951
mkstemp()とか。

957 :デフォルトの名無しさん:03/02/24 13:32
>>955
ディレクトリもひとつのファイルだしな。

958 :デフォルトの名無しさん:03/02/24 13:36
>>954-955
なるほど、要するに既存の場合はremoveを試みてくれるわけね。
どうもありがとう。

959 :951:03/02/24 13:45
ああ、これですか
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/tmpnam.3.html
>この名前を持つファイルは、ある時点では存在していなかった。
この部分の解説きぼん。。

960 :デフォルトの名無しさん:03/02/24 13:51
tmpnam()を実行した時点ではそのファイル名が存在していなくても、
ファイルを作成しようとした時にそのファイル名が存在しない事は保証されない、
という事かな

961 :デフォルトの名無しさん:03/02/24 13:52
>>959
tmpnamを呼んだ時点では存在しなくても、その後実際にファイルを作成しようと試みるまでに他のプロセスによって作成されてしまうかもしれない。

ということでしょ?

962 :951:03/02/24 13:56
>>960-961
あーやっぱりそれかあ。どうもです。
mktemp()のほうには書いてあった。
>その名前がすでに存在しているかどうかテストして、そのファイルをオープンする間に競合がある事から


963 :デフォルトの名無しさん:03/02/24 14:21
tmpnamって変な略し方

964 :デフォルトの名無しさん:03/02/24 14:51
tmpnam() は TMP_MAX回を超えて呼び出すとNULLを返すように
なり、はっきり言って全然実用的じゃない。俺は使わない。

965 :デフォルトの名無しさん:03/02/24 22:14
C言語でエディタを作るとき、
while(fgets(buffer,BUFFERSIZE,fp)!=NULL){
}
のBUFFERSIZEを#define BUFFERSIZE 4096
としてるんですが、4096を超えるファイルに対応するには
どうしたらよいですか?

966 :デフォルトの名無しさん:03/02/24 22:18
複数回に分けて読み込んでバッファ的に分かれているけど同一行フラグを立てるとか。

967 :デフォルトの名無しさん:03/02/24 22:18
#define BUFFERSIZE 4294967296 にしろ。


968 :デフォルトの名無しさん:03/02/24 22:34
どうでもいいがエディタを作ろうという奴が>>965のような質問を
すること自体が驚きだ。
内部構造はgapped bufferかlinked listなんでしょ?
同じように動的に行を読めばいいだけの話。



969 :デフォルトの名無しさん:03/02/24 23:48
そういやエディタ作ってるやついたな
作りかけのやつうpして質問してた

970 :デフォルトの名無しさん:03/02/25 00:10
>>968
gapped buffer、linked list
ってなんですか?

971 :デフォルトの名無しさん:03/02/25 00:13
おいおい、そんなことも知らずにエディタ書こうとしているのか?
今時はソフトウェア作法も読まないのかねぇ。

972 :デフォルトの名無しさん:03/02/25 00:24
while( !feof(fp) ){

fread(buffer,sizeof(char),BUFFERSIZE,fp);

fwrite(buffer,sizeof(char),BUFFERSIZE,stdout);
}
こうやってあるバイナリファイルを画面出力するとBEEP音が2回くらい鳴るのですが
どうして?

973 :デフォルトの名無しさん:03/02/25 00:26
>>972
そのファイル中にベルコード(0x7)が含まれているからだろ。

974 :デフォルトの名無しさん:03/02/25 00:28
>>972
\a

975 :デフォルトの名無しさん:03/02/25 00:29
>>972
メーカーにクレーム

976 :739:03/02/25 01:07
>>739でも質問しましたが、再度質問です。
・あと、ある文字列に対し、ビット誤り率が与えられて(例えば0.008)文字列を
ビット誤り(ランダム、バーストどっちでも良い)させてくれる効率の良い
方法はありますか?

どなたか良いコーディング方法がわかる方アドバイスください。

ある関数に引数で、バッファのポインタとバッファ長を渡し、
ビットエラーレート0.008がわかっていて、
ランダムで誤りを生成したいです。
よろしくお願いしますm(__)m


977 :デフォルトの名無しさん:03/02/25 01:24
ある数字を有効数字3けたにかえるにはどうしたらいいでしょう

978 :デフォルトの名無しさん:03/02/25 01:35
次スレ立ててもいい?

979 :デフォルトの名無しさん:03/02/25 01:35
>>978
よろ。

980 :デフォルトの名無しさん:03/02/25 01:36
どうせFAQしかないから過去ログ検索だけで十分だろ。

981 :デフォルトの名無しさん:03/02/25 01:40
>>980
それを言ったら2ch全て(ry

982 :デフォルトの名無しさん:03/02/25 01:49
次スレたてました。移動よろ。

C言語なら、俺に聞け! Part 51
http://pc2.2ch.net/test/read.cgi/tech/1046104909/l50

983 :デフォルトの名無しさん:03/02/25 02:00
ぬるぽ

984 :デフォルトの名無しさん:03/02/25 02:03
>>977
文字列に直して先頭3文字以降を0にして戻すとか。整数の場合ね。


985 :デフォルトの名無しさん:03/02/25 03:44
>1000
おつかれ

986 :デフォルトの名無しさん:03/02/25 03:53
ミノガサナイゼ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >.__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>983

987 :デフォルトの名無しさん:03/02/25 04:01
>>976
質問の意味が理解できない・・

988 :デフォルトの名無しさん:03/02/25 04:02
ぬるっぽ

989 :デフォルトの名無しさん:03/02/25 04:06
>>988  Λ∩
. V`Д´)/←>>988

990 :デフォルトの名無しさん:03/02/25 04:08
stricmpみたいに大文字小文字区別せず処理する標準関数は
他にありますか?

991 :デフォルトの名無しさん:03/02/25 04:10
>>982
モツカレー

992 :デフォルトの名無しさん:03/02/25 04:13
  y               y
   i、   __ _, --- 、_ _  r'
   `ヽ (ノ´ 二ニ二 て) /
     i、,〉'<入_li il_入>tイ、ノ

993 :デフォルトの名無しさん:03/02/25 04:21
>>990
strnicmp

994 :デフォルトの名無しさん:03/02/25 04:43
strcasecmp
strncasecmp
だろ

995 :デフォルトの名無しさん:03/02/25 04:51
>>992
何これ?

996 :デフォルトの名無しさん:03/02/25 04:55
>>995
(=゚ω゚)ノ 蝉の頭部です

997 :デフォルトの名無しさん:03/02/25 04:57
((((;゚Д゚))))ガクガクブルブル

998 :デフォルトの名無しさん:03/02/25 04:58
998!!!

999 :デフォルトの名無しさん:03/02/25 04:59
999!!!!!!!!
!!!!!!!!!!

1000 :デフォルトの名無しさん:03/02/25 04:59
  | M ヽ
  |从 リ)〉
  |゚ ヮ゚ノ| 1000 キタ…
  ⊂)} i !
  |_/ヽ|」
  |

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

213 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)