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

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

C言語なら俺に聞け! Part 90

1 :v(^o^i)d:04/09/01 16:57
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

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

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 89
http://pc5.2ch.net/test/read.cgi/tech/1092547818/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/

2 :デフォルトの名無しさん:04/09/01 16:58
【コンパイラ】
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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft 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
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm

3 :デフォルトの名無しさん:04/09/01 17:35
3get

4 :デフォルトの名無しさん:04/09/01 21:29
4get

5 :デフォルトの名無しさん:04/09/01 23:12
バイナリファイルをrbで読み込んで16進ダンプしたデータを
元のバイナリデータに変換する方法ってあります?

6 :デフォルトの名無しさん:04/09/01 23:13
↑死ね

7 :デフォルトの名無しさん:04/09/01 23:13
ある日、ある女と男が結婚を親に反対されたため、
駆け落ちを決意しました。ところが旅先で男は車に引かれ、
女はその悲しみのあまり自殺しました。
あなた、このレスを全て読みましたね。
あ〜あ・・・読んじゃった。このレスを読んだ人間は、
一生彼氏も出来ず、一生独身です。もしそれがいやなら、
このレスをコピーして6ヶ所以上の場所にコピーしてください。
(タイトルもそのまま、HNは自分の名前で。)
もしコピーしなければ、さっきも言いましたが、
あなたは一生独身です。もしコピーしたら、
あなたは好きな人から1週間以内に告白されます。
もし付き合ってる人がいる場合は、
その人と急展開しちゃいます

8 :デフォルトの名無しさん:04/09/02 00:06
やべぇ妻子持ちなのに読んじゃったよ

9 :デフォルトの名無しさん:04/09/02 08:47
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void)
{
int goukei,r;
srand(clock());
goukei=0;
while(goukei<100){
r=rand()%100+1;
printf("%d\n",r);
goukei+=r;}
printf("合計:%d\n",goukei);}
乱数を初期化してるはずなんですけど、同じ数字しか生成されません。
どこがおかしいのでしょうか?

10 :デフォルトの名無しさん:04/09/02 08:51
>>9
clock()の返す値を確認してみ。

11 :デフォルトの名無しさん:04/09/02 08:51
>>9
clock()が標準関数ではないので該当スレへどうぞ。
このスレ的には、clock()の戻り値が毎回変わるか観測してくださいとしか。

12 :デフォルトの名無しさん:04/09/02 08:51
>>9
srand(time(NULL));


13 :デフォルトの名無しさん:04/09/02 08:52
clock
プロセス開始時からのウォール クロックの経過時間 (秒単位の経過時間 CLOCKS_PER_SEC) を返します。

毎回同じ種になってるんだろ

14 :デフォルトの名無しさん:04/09/02 08:55
>>11
え?

15 :デフォルトの名無しさん:04/09/02 09:22
>>11
> clock()が標準関数ではないので
釣り?

16 :デフォルトの名無しさん:04/09/02 11:05
unicode関連で困ってます。
fprintf(fp,"%S\r\n",L"テスト");
だと改行するだけで、
fprintf(fp,"%S\r\n",L"TEST");
とするとTESTが表示されます。


17 :デフォルトの名無しさん:04/09/02 11:45
>>9
rand()%100+1
これだめ。
なぜなら、rand関数で生成される最下位ビットは0と1が繰り返されているから。
これは数学的な欠陥。
もしrandを使うなら、
#include <stdlib.h>
(int) (100.0*rand()/(RAND_MAX+1.0))+1
の様に書き直すべき。

18 :デフォルトの名無しさん:04/09/02 11:58
>>16
fwprintf() はどう?

>>17
>rand関数で生成される最下位ビットは0と1が繰り返されている
いまどきrandをそんな実装してる処理系があるの?
よかったらコンパイラの名前を教えておくれ。

19 :デフォルトの名無しさん:04/09/02 11:59
randの実装の話なんぞ、お前の使ってるコンパイラのスレでやれ

20 :デフォルトの名無しさん:04/09/02 12:08
>>18
処理系依存のソースはなるべく避けるべき。

http://www001.upp.so-net.ne.jp/isaku/rand.html

21 :デフォルトの名無しさん:04/09/02 12:13
そのうえ、線形合同法を使っている乱数生成アルゴリズムは下位ビットになるほど
周期が短くなっている。

22 :デフォルトの名無しさん:04/09/02 12:28
rand()で最下位ビットが0と1の交互に繰り返すと思ってる奴多いな。
C FAQの影響か。

23 :デフォルトの名無しさん:04/09/02 12:37
少なくとも、俺様のVC7.1ではそうならん

24 :デフォルトの名無しさん:04/09/02 12:43
>>22
いまVC++に入ってるrandも生成した32ビットの乱数の上位16ビット中下位15ビットを
使ってるだけみたいよん

25 :デフォルトの名無しさん:04/09/02 12:49
周期が気になるんだったらメルセンヌツイスタでも使っておけばいいじゃん

26 :デフォルトの名無しさん:04/09/02 12:50
>>24
最下位ビットは繰り返しにはなってないでしょ。

27 :デフォルトの名無しさん:04/09/02 12:54
>>26
そうみたいだね。
ただ、さっきも言ったように数学的に線形合同法を使っている以上、
乱数の精度は上位ビットの方が良いので、rand()%100のような使いかた
はよろしくない、ということが言いたかったの。

28 :デフォルトの名無しさん:04/09/02 12:56
>>27
>>19

29 :デフォルトの名無しさん:04/09/02 12:58
>>28
同意
C++スレの二の舞は嫌

30 :デフォルトの名無しさん:04/09/02 13:02
>>27
32ビットで下位16ビット捨てる線形合同法なら、
周期は数万あるから、そんな上位ビットを使うってのに
こだわる必要はないんじゃない?

そこまで乱数の質にこだわる必要がある場合なら、
それこそ、違うアルゴリズムを使えばいいと思うし。

31 :デフォルトの名無しさん:04/09/02 13:11
>>30
わかんないやつだな
面倒だからこの話題終了

32 :デフォルトの名無しさん:04/09/02 13:19
>>31
あんたよりは分かってるよ。

33 :デフォルトの名無しさん:04/09/02 14:57
>>9
なんですが、これは参考書にのってたプログラムそのままなんですけど
このプログラムつくった著者がまちがってるんすか?

34 :デフォルトの名無しさん:04/09/02 15:05
>>33
どの参考書か知りませんが、初心者向きに書かれている本は初心者が書いている
ということが良くあることも事実

35 :デフォルトの名無しさん:04/09/02 15:08
>>32
わかってるやつだな
面倒だからこの話題終了

>>33
処理系依存

36 :デフォルトの名無しさん:04/09/02 15:09
>>33
その参考書の書名を教えてください。

37 :デフォルトの名無しさん:04/09/02 15:10
10日(略

38 :デフォルトの名無しさん:04/09/02 15:10
/dev/rand使えよ馬鹿ども

39 :デフォルトの名無しさん:04/09/02 15:14
>>35
処理系依存っていうか、ほとんどの環境でまともに動かないでしょ。
もし動く環境でもtime()を避けてclock()を使う意味が無い。

40 :デフォルトの名無しさん:04/09/02 15:15
>>35
この場合の問題はclock()の方だろ。
お前はネタに釣られ過ぎ。

41 :デフォルトの名無しさん:04/09/02 15:24
Linux debian 3.0で

#include <ncurses.h>

int main( int Argc, char *Argv[] )
{
  ncurses_clear( );
  printf( "test\n" );
}

gcc test.cとすると
undefined reference to 'ncurses_clear'ってエラーがでます。
どうすればエラーがでなくなりますか?

42 :デフォルトの名無しさん:04/09/02 15:32
>>41
>Linux debian 3.0で

>Debian GNU/Linux 3.0
にすればいいと思う。

43 :デフォルトの名無しさん:04/09/02 15:32
>>41
ncurses.h
がないんじゃない?

44 :デフォルトの名無しさん:04/09/02 15:33
>>41
ここから入手
http://www.gnu.org/software/ncurses/ncurses.html

45 :デフォルトの名無しさん:04/09/02 15:34
ライブラリを指定し忘れてるだけだろ。
お前らってほんとに駄目なやつだな。

46 :デフォルトの名無しさん:04/09/02 15:44
>>43-44
あります
>>45
指定方法をおしえてくださ

47 :デフォルトの名無しさん:04/09/02 15:51
-lncurses

48 :デフォルトの名無しさん:04/09/02 15:51
C言語って猿でもできるよな

49 :デフォルトの名無しさん:04/09/02 15:55
>>47
でででえでえええええええできたあああああああああああああああああああああ(ノД`。)
神様ありがてゅう

50 :デフォルトの名無しさん:04/09/02 16:33
void f(void) といった型の関数へのポインタを
構造体の要素にしようと思っています。

構造体の型宣言としては
struct test
{
void (*func)(void);
};
などとしていいんでしょうか。
メンバにvoid型って言うのが凄い違和感あるんですが・・・。
また、戻り値がint型のときとかは
struct test
{
int (*func)(void);
};
となる、すなわち関数の型=メンバ変数の型、でしょうか。
ご教授下さい。

51 :デフォルトの名無しさん:04/09/02 16:45
試せよ、コンパイル出来るだろ

> 関数の型=メンバ変数の型
メンバは関数ポインタなんだから違うだろうが
void型でもint型でもねぇよ

52 :デフォルトの名無しさん:04/09/02 17:16
sageているしネタだろ

53 :デフォルトの名無しさん:04/09/02 17:19
void (*func)(void);のfuncの型がvoidだと思っている悪寒

54 :50:04/09/02 17:29
コンパイルも通ったし動作確認もうまくいったのですが。
考え方は合っているのかなと思いまして^^;
メンバは関数へのポインタ型でサイズは処理系によって違う。
voidにしておけばコンパイラが勝手に解釈してくれる。
ってことでしょうか。


55 :デフォルトの名無しさん:04/09/02 17:30
> voidにしておけばコンパイラが勝手に解釈してくれる。
全然違う、voidはvoidだ。

56 :デフォルトの名無しさん:04/09/02 17:31
あのなぁ^^;

57 :デフォルトの名無しさん:04/09/02 17:33
何を勝手に解釈してくれると思っているんだろうか

58 :デフォルトの名無しさん:04/09/02 17:34
勝手に解釈することにしたいのですね :)

59 :デフォルトの名無しさん:04/09/02 17:37
exit(0)とかexit(1)の
(0)とか(1)って何ですか

60 :デフォルトの名無しさん:04/09/02 17:37
>>59
関数呼び出しの括弧と引数

61 :デフォルトの名無しさん:04/09/02 17:40
>>54
この場合、なぜコンパイラがサイズ分かるのかと言うと
「ポインタ」だから
void云々は関係なし

62 :デフォルトの名無しさん:04/09/02 17:47
>>59
0・・・正常終了  1・・・異常終了

63 :デフォルトの名無しさん:04/09/02 17:52
>>59
EXIT_SUCCESS と EXIT_FAILURE って書け。
そのプログラムが正常に終了したのか何かのエラーで失敗したのかを
起動元(シェルやコマンドプロンプト)に通知するための値。

64 :デフォルトの名無しさん:04/09/02 18:00
>>54
>メンバは関数へのポインタ型で
「値を戻さない関数へのポインタ」を定義してるんであって
>voidにしておけば
「関数へのポインタを void * で」定義しているわけじゃない。

65 :デフォルトの名無しさん:04/09/02 18:02
>>62-63
世の中にはね、2 とか 3 とか、ヘタすると
何かの個数を戻すプログラムもあるんだよ。

66 :デフォルトの名無しさん:04/09/02 18:09
>>65
だからなに?
初心者に例外的で特殊で作法に反した用途を教えてどうすんの?
というかそんな使い方見たことないんだけどなんのプログラム?

67 :デフォルトの名無しさん:04/09/02 18:12
>作法に反した用途

プw

68 :デフォルトの名無しさん:04/09/02 18:12
batファイルで使うプログラムなどは色々な数値返したもんだがな

69 :デフォルトの名無しさん:04/09/02 18:14
>>50はどうも"関数の戻り値の型" を "関数の型" と誤解しているような希ガス。


70 :デフォルトの名無しさん:04/09/02 18:15
>>66
ここはC言語スレだ。
環境依存どころか仕様依存な事を喋くってんじゃねーよ禿。

71 :デフォルトの名無しさん:04/09/02 18:19
>>70
うざい

72 :デフォルトの名無しさん:04/09/02 18:21
スレ違いだともわからない消防か ┐(´∇`)┌

73 :デフォルトの名無しさん:04/09/02 18:23
>>59
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/exit.3.html

74 :デフォルトの名無しさん:04/09/02 18:25
>>9ですが
>>33 c言語で学ぶプログラミング基礎の基礎 矢沢久雄著

ブラックジャックプログラムでも最後 srand(clock())が使われてます
srand(time())にするんですか?

75 :デフォルトの名無しさん:04/09/02 18:29
何でこのスレは初心者レベルの人間が答えるんだろ。
黙っとけばいいのに。
それとも自分が初心者だか無知だって自覚がないのかね。

76 :デフォルトの名無しさん:04/09/02 18:34
>>75
C++スレにお帰りください

77 :デフォルトの名無しさん:04/09/02 18:34
>>75
愚痴はスレ違い

78 :デフォルトの名無しさん:04/09/02 18:40
>>66
例外?

79 :おねがいします:04/09/02 18:52
あるデータファイルを読み込んで、そのファイルを上書きしたいんですが、
上書きしたときに元のファイルより書き込んだ容量が少なかった場合に
もとのデータが残っちゃうじゃないですか。そこでファイルにEOFを書きこみたいんですけど、
どうやってやればいいんでしょうか?
ファイルを読み込むときにそのファイルを空にしてファイルオープンするってのはなしでお願いします。

80 :デフォルトの名無しさん:04/09/02 18:53
おい、変な奴がいるぞ

81 :デフォルトの名無しさん:04/09/02 18:55
>>79
どうしようもない。
環境依存の方法ならあるけど(EOFを書き込むわけじゃないけどな)。

82 :デフォルトの名無しさん:04/09/02 18:58
EOF書き込んでもバイナリモードで開かれたらどうしようもなくない?

83 :デフォルトの名無しさん:04/09/02 19:01
#define NOT_USED 0 /*カード未使用*/
#define USED (-1) /*カード仕様*/
っていうのがあるんですけど

0とか-1とかはべつに1と2とかでもいいですか?



84 :デフォルトの名無しさん:04/09/02 19:05
>>83
ここで聞くなよ

85 :79:04/09/02 19:07
>>81,82
そうですか。ありがとうございました。
他の方法を考えることにします。

86 :デフォルトの名無しさん:04/09/02 20:09
>>79
ファイルサイズ書き換えればなんとかなるかな。

87 :デフォルトの名無しさん:04/09/02 20:30
>>83
#define USED (!0)

88 :デフォルトの名無しさん:04/09/02 20:31
#define USED (!NOT_USED)

二重否定はやめましょう・・・

89 :デフォルトの名無しさん:04/09/02 21:22
>>85
Unix 系なら truncate/ftruncate があるかも試練。
Win 系なら SetEndOfFile かな?
それ以外は該当スレで訊いて。

90 :デフォルトの名無しさん:04/09/02 21:48
スレ違いだったらしいので引っ越しますた・・・・
質問でっす
今、独習Cで勉強してる初心者なんですが・・・
引数、浮動小数点、倍精度浮動小数点 等の意味がさっぱりです。
簡単に説明してくれてるサイトってありますか?
宜しくお願いします。


91 :デフォルトの名無しさん:04/09/02 21:50
>>83
enum{ NOT_USED, USED }
とするか
stdbool.hをインクルードして
bool used;
used = true;
used = false;
とかすればいい。
stdboolがなければ使ってるコンパイラによってはTRUE, FALSEがあるかもしれない。
定数や型をむやみに増やさないほうがいいよ。

92 :デフォルトの名無しさん:04/09/02 21:51
>>90
http://www.google.co.jp/

キーワード分かってるならググって自分で分かりやすいサイトを探せ。

93 :デフォルトの名無しさん:04/09/02 21:51
引数=パラメタ
浮動小数点=小数
倍精度浮動小数点=高性能な小数

94 :デフォルトの名無しさん:04/09/02 21:51
浮動小数点数なんてようするに小数も格納できるものと思っておけばいい。

95 :デフォルトの名無しさん:04/09/02 22:00
相手がわからんからってデタラメおしえるなよ

96 :デフォルトの名無しさん:04/09/02 22:14
>>91
boolじゃなくて_Bool

97 :デフォルトの名無しさん:04/09/02 22:14
>>90
Googleで
用語 引数
と検索すると用語辞典サイトを検索できる。他の用語も同様。それから
"C言語入門"
と検索すると入門サイトが山ほど出てくる。
入門サイトはたまに嘘書いてあったり不正確だったりするので
2・3箇所読んでおくといいかも。

98 :デフォルトの名無しさん:04/09/02 22:16
>>96
調べてから指摘してくれ・・・
stdbool.hではbool, true, falseを定義している。

99 :デフォルトの名無しさん:04/09/02 22:18
>>98
君のstdbool.hでは。でしょ。

100 :99:04/09/02 22:20
http://seclan.dll.jp/c99d/c99d09.htm#dt19990614
あ、違ったか

101 : ◆DeUsmjHgh2 :04/09/02 23:27
スタートメントにセミコロンがないって表示されましたどういうこと?

102 :デフォルトの名無しさん:04/09/02 23:28
知るか

103 :デフォルトの名無しさん:04/09/02 23:30
while(T^T);

104 : ◆DeUsmjHgh2 :04/09/02 23:31
ステートメントだった

105 :デフォルトの名無しさん:04/09/02 23:34
エラーが出た行の、すぐ上の行にセミコロンを付け忘れている
ことが多い

106 : ◆DeUsmjHgh2 :04/09/02 23:37
左辺値が必要ってのは?

107 :デフォルトの名無しさん:04/09/02 23:37
お前はエラーをいちいちここで聞くつもりかよ

108 :デフォルトの名無しさん:04/09/02 23:40
>>106
a = 2 + 3; //OK
2 + 4 = a; //afo

109 : ◆DeUsmjHgh2 :04/09/02 23:44
すいません
a < 2 //エラー?
b < 2 //エラー?

110 :デフォルトの名無しさん:04/09/02 23:46
>>109
エラー。
a < 2 b < 2
と書いたのと同じ

111 :デフォルトの名無しさん:04/09/02 23:48
>>109
あの…文法的な細かいことを聞くくらいなら参考書かったらいかが?

112 : ◆DeUsmjHgh2 :04/09/02 23:55
>>111
持ってるんですけど・・・

char a[10];
int b;

scanf("%d",*b);

if(b < 5){
b="hello";
}else if(b > 6){
b="bye";
}

何か間違ってるでしょうか?

113 :デフォルトの名無しさん:04/09/02 23:56
>>112
出て行け

114 : ◆DeUsmjHgh2 :04/09/02 23:57
訂正 scanf("%d",&b);

115 :デフォルトの名無しさん:04/09/02 23:58
釣りは放置で。

116 :デフォルトの名無しさん:04/09/03 00:00
>>112
http://etc3.2ch.net/test/read.cgi/entrance/1093006298/l50
こっちで教えてやる

117 :デフォルトの名無しさん:04/09/03 00:01
>>112
#include <stdio.h>

int main( void )
{

char a[10];
int b;

scanf("%d",&b);

if(b < 5){
strcpy(a,"hello");
}else if(b > 6){
strcpy(a,"bye");
}
return 0;
}


118 :デフォルトの名無しさん:04/09/03 00:08
またC++スレの住人が荒らしにきたのね・・・

119 : ◆DeUsmjHgh2 :04/09/03 00:09
>>117
ありがとうございます。
これで問題が解決いたしました

120 :デフォルトの名無しさん:04/09/03 00:10
C++スレ住人とCスレ住人はどちらがえらいですか

121 :デフォルトの名無しさん:04/09/03 00:10
>>119
一番の問題はあなた自身なわけだが。

122 :デフォルトの名無しさん:04/09/03 00:11
ぶっちゃけ、ポインタって何バイト?

123 :デフォルトの名無しさん:04/09/03 00:11
>>122
4バイトだYO!

124 :デフォルトの名無しさん:04/09/03 00:13
>>122
32ビットのCPUなら32ビット。4バイト。

125 :デフォルトの名無しさん:04/09/03 00:13
んなこたない

126 :デフォルトの名無しさん:04/09/03 00:15
>>122
main() { printf("%u", sizeof(void*)); }
最後は改行しろよ

127 :122:04/09/03 00:17
でかした!

128 :デフォルトの名無しさん:04/09/03 00:18
>>127
信じるなよ

129 :デフォルトの名無しさん:04/09/03 00:19
>>122
それを知る必要はないしそれに依存したコードを書くべきでもない。
プログラム中ではsizeof(void*)で取得できる。

一般的には(コンパイラがターゲットとする)CPUに依存する。
32bitなら4バイトだし64bitなら8バイト。

130 :デフォルトの名無しさん:04/09/03 00:22
> 引数=パラメタ

般若

131 :デフォルトの名無しさん:04/09/03 00:23
> scanf("%d",*b);
(中略)
> 何か間違ってるでしょうか?

言うまでもないよね?
何がいけないかは。

132 :デフォルトの名無しさん:04/09/03 00:41
>>131
うざい

133 :デフォルトの名無しさん:04/09/03 01:04
*のことを言っているんじゃないのか。

134 :デフォルトの名無しさん:04/09/03 01:08
もう終わったことなのにむしかえすな・・・

135 :デフォルトの名無しさん:04/09/03 01:14
答え:
scanf使っているから

136 :デフォルトの名無しさん:04/09/03 01:23

































137 :デフォルトの名無しさん:04/09/03 01:40
お前らがうんこすぎてネタか超初心者しか来ないじゃないか

138 :デフォルトの名無しさん:04/09/03 01:47
いや、そもそもネタスレだし。

139 :デフォルトの名無しさん:04/09/03 02:06
Cはある程度理解が進めば詰まるところなんてそんなに無いし。
初心者しか質問しないのはある意味必然。

140 :デフォルトの名無しさん:04/09/03 10:00
回答者が無能な初心者ばっかだから質問する人間がいなくなったんだよ。

141 :デフォルトの名無しさん:04/09/03 10:54
#include <stdio.h>
#define FILE_NAME "gakusei.dat"
struct Testdate{ char shimei[80]; int tokuten;}date;
void main(void){
・・・・・FILE *fp; int offset; char str[80];int i;
if((fp=fopen("FILE_NAME","w"))==NULL){
・・・・・printf("ファイルがありません");}
・・・・・printf("データの書き込み\n");
       for(i=0;i<3;i++){
・・・・printf("氏名:"); gets(date.shimei);
・・・・printf("得点"); gets(str); date.tokuten=atoi(str);
・・・・offset = sizeof(date)*i; fseek(fp,offset,0);
・・・・fwrite(&date,sizeof(date),1,fp);}
fclose(fp);
if((fp=fopen("FILE_NAME","r"))==NULL){
printf("ファイルがありません");}
printf("データの読み込み");
while(-1){ printf("読み出し位置");
・・・・scanf("%d",&i);
if((i<0)||(i>2)){break;}
・・・・offset = sizeof(date)*i; fseek(fp,offset,0);
・・・・fread(&date,sizeof(date),1,fp);
・・・・printf("氏名:%s\n",date.shimei);
・・・・printf("得点:%d\n",date.tokuten);}fclose(fp);}

ランダムアクセスなんですけど、構造体をつかってるんですが。
ファイルの処理の場合は、構造体の配列をつかわないでいいんでしょうか?
3人の名前と得点を書きこんで読み出すというファイル処理のプログラムなんですけど
構造体のところをみると、配列をつかっていて、ファイルだと配列をつかってません




142 :デフォルトの名無しさん:04/09/03 11:14
答え:
scanf使ってるから

143 :デフォルトの名無しさん:04/09/03 11:14
>>141
こっちで聞け。
http://bubble2.2ch.net/test/read.cgi/i4004/1074389689/

144 :デフォルトの名無しさん:04/09/03 11:18
>>142>>143
??

145 :デフォルトの名無しさん:04/09/03 11:43
パソコンの言語はやったことないのですが、今からC言語の勉強を本気で独学で学んでいこうと考えています。
お勧めの入門書などありましたら、教えていただきたいのですが。

146 :デフォルトの名無しさん:04/09/03 11:44
>>141
文字列について勉強しなおし。

147 :デフォルトの名無しさん:04/09/03 11:46
>>145
このスレを1から順にリンク先まで見れ。

148 :デフォルトの名無しさん:04/09/03 12:14
>>146文字列関係あるの?

149 :デフォルトの名無しさん:04/09/03 13:45
unsigned int なり ,unsigned long なりの
引数をとる函数に sizeof で取得した size_t 型の数値を
わたしたいときがある.

ところが,VC++ のコンパイラでは警告が出る.
# キャストしても同じ

動作に問題はないが,うるさいから黙らせたい
どうしたらいいだろうか?


150 :デフォルトの名無しさん:04/09/03 13:52
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
string fname, ss;
ifstream fin;

cout <<"filename=";
cin >> fname;

fin.open(fname.c_str());
if (!fin) return 1;

while (getline(fin,ss)){
cout << ss << '\n';
}

fin.close();

return 0;

}

これってどうよ?

151 :デフォルトの名無しさん:04/09/03 13:58
>>150
どうよと言われても、コンパイル不可としか。

152 :デフォルトの名無しさん:04/09/03 14:20
>>149
># キャストしても同じ
原因は違うところにある気が駿河、
よかったらその部分晒してみ?

153 :デフォルトの名無しさん:04/09/03 14:21
>>150
どうよと言われても、スレ違いだヴぉけとしか。

154 :デフォルトの名無しさん:04/09/03 15:23
>>145
プログラミング言語C リッチー&カーニハン

155 :デフォルトの名無しさん:04/09/03 15:31
自作のヘッダファイルの中の関数の中で、
他のヘッダファイルの関数を使いたいのですが、
どうすればいいですか?

156 :デフォルトの名無しさん:04/09/03 15:34
>>154
入門書にそれは酷かと・・・

私もそれから入って挫折しかけた(つД⊂)
完成してからならよすぎるんだけど

157 :デフォルトの名無しさん:04/09/03 15:45
「やさしいC」 高橋 麻奈 (著)
これ最強。

158 :デフォルトの名無しさん:04/09/03 16:17
>>155
必要なヘッダをインクルードする。

159 :C超初心者:04/09/03 16:29
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__
#endif

これってどういう事なんでしょうか? 初歩な質問ですいません。一行ずつ教えて頂ければと…。
お願いします。

160 :デフォルトの名無しさん:04/09/03 16:31
ちょっとLinuxのことで質問ですが
2.2.x系と2.4.xをソースで区別する#define定義を教えてください

161 :デフォルトの名無しさん:04/09/03 16:48
>>159
> #ifdef _DEBUG
条件コンパイル。
もし_DEBUGが定義されていれば、#else #elif #endifのいずれかが現れるまでをコンパイル対象にする。

> #define new DEBUG_NEW
以後newが出てきたらそれをDEBUG_NEWに置き換える。

> #undef THIS_FILE
THIS_FILEが定義されていたら、なかったことにする。

> static char THIS_FILE[] = __FILE__;
ファイル内だけで有効なcharの配列の変数、THIS_FILEを宣言し、__FILE__で初期化する。
__FILE__はコンパイルされるファイル名に置き換えられる。
(ヘッダファイル自体ではなくこのヘッダをインクルードしたcかcppファイルの名前)

> #endif
条件コンパイルここまで。


162 :デフォルトの名無しさん:04/09/03 18:31
>>159
> #define new DEBUG_NEW
この時点でC++

163 :デフォルトの名無しさん:04/09/03 18:32
それはただの思い込み

164 :デフォルトの名無しさん:04/09/03 18:45
むしろC

165 :デフォルトの名無しさん:04/09/03 18:53
まあ実際 >>159 は VC++ のフレームワークが吐くやつなんだけどな。
>>159
  http://pc5.2ch.net/test/read.cgi/tech/1093672937/l50 へ逝くのだ。

166 :デフォルトの名無しさん:04/09/03 19:04
学校でなんだけどコンソールの画面を制御するときに
#include "crt.h"
SetPos(5,3);SetColor( CYAN );こういうので位置とか色とかを
設定してるんだけど、これって元からあるの?
それとも、先生がつくったのか?もしそうならじじいだけど
俺は尊敬する・・・けど実際のとこあのおっさんがこんなの
つくれるとおもえないんだよな?"crt.h"
これの中身みたけど、全然理解できなかった。


167 :デフォルトの名無しさん:04/09/03 19:09
DOSなら余裕、VRAMに直接描画とか昔はよくやったな

168 :デフォルトの名無しさん:04/09/03 19:12
WindowsのconsoleでもそういうAPIぐらいあるしな。

169 :デフォルトの名無しさん:04/09/03 19:25
できるのが普通で、尊敬するほどでもない。

170 :デフォルトの名無しさん:04/09/03 19:34
AGP

171 :デフォルトの名無しさん:04/09/03 19:54
>>167-169
まじすか?どこの入門書みてものってないぞ・・・
どういう本で勉強するんすか?

172 :デフォルトの名無しさん:04/09/03 19:57
************************************************/
/* カーソルの移動を行う関数*/
/* SetPos( x , y )*/
/* 引数1…x座標(0〜79)*/
/* 引数2…y座標(0〜24)*/
/* 戻り値…常に1(TRUR)*/
/************************************************/

BOOL SetPos(int x, int y)
{
HANDLE hOut;
COORD co;

co.X = (SHORT)x;
co.Y = (SHORT)y;

hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, co);

return TRUE;
}

173 :デフォルトの名無しさん:04/09/03 19:58
こんなん。入門書にのってねーぞ

174 :デフォルトの名無しさん:04/09/03 19:58
DOS用の入門本探して来い。
大学なら落ちてるだろ。

175 :デフォルトの名無しさん:04/09/03 20:04
むか〜しの画像処理のソースが載ってるような本かな…

176 :デフォルトの名無しさん:04/09/03 20:10
C言語を使う人ってやっぱこういうのができて当たり前ですか?


177 :デフォルトの名無しさん:04/09/03 20:14
>>176
こんなんで驚いてちゃ、驚き方の表現がすぐに底をつくよ
逆上がり・・・つーか、懸垂1回くらいでしかない

178 :デフォルトの名無しさん:04/09/03 20:43
>>176
当り前ではありません。

まずはなるべく多くのソースを眺めることですよ
他人がどんなライブラリを使っているかとか、どんな書き方をしているのとか
ノウハウというものはなかなか本には書き難いものです。
それは経験ともいいますけれど。。

179 :デフォルトの名無しさん:04/09/03 21:50
どうして ぼけ 厨釣るの?

180 :デフォルトの名無しさん:04/09/03 22:14

































181 :デフォルトの名無しさん:04/09/03 22:16
>>180
通報しました

182 :デフォルトの名無しさん:04/09/03 22:59
>>181
通報し返しました

183 :デフォルトの名無しさん:04/09/03 23:30
>>182
逮捕しました

184 :デフォルトの名無しさん:04/09/03 23:33

































185 :デフォルトの名無しさん:04/09/03 23:45
もうエスケープシーケンスの時代じゃないんだね・・・

186 :デフォルトの名無しさん:04/09/04 00:47
あんまり使うことのなさそうな関数を発見した記念貼り

#include <stdio.h>
#include <stdlib.h>

main()
{
long quot, rem;
ldiv_t ldv;
for (;;) {
quot = rem = 0;
printf("scanf: \"integer/integer\": e.g, 20/3 _ ");
scanf("%ld/%ld", ", &rem);
ldv = ldiv(quot, rem);
printf("%ld * %ld + %ld = %ld\n", rem, ldv.quot, ldv.rem, quot);
}
}

/*
* CONFORMING TO
* SVID 3, BSD 4.3, ISO 9899. The functions lldiv() and imaxdiv() were added in ISO C99.
*/

187 :デフォルトの名無しさん:04/09/04 00:51
...ばけらた

ー scanf("%ld/%ld", ", &rem);
十 scanf("%ld/%ld", ", &rem);

188 :デフォルトの名無しさん:04/09/04 00:56
&quot だめですかそうですかねる。


189 :デフォルトの名無しさん:04/09/04 01:13
すみません、質問があるのですが・・・

処理の途中にて配列の要素数を増やしたいのですが・・・
例えば以下の方法のように

int array[3];
int *po;

po = &array[3]; //現在存在してない要素のアドレスを取得

po = (int *)calloc(1,sizeof(int)); //そのアドレスにメモリを確保

というような方法で要素を増やそうと試みたのですが巧くいきません。

なにか配列の要素を増やす良い方法はないでしょうか?



190 :デフォルトの名無しさん:04/09/04 01:19
>>189
ヒープ領域に確保しないとダメです。
配列の大きさは変えられません。
arrayもポインタで宣言しておくべきです。

191 :デフォルトの名無しさん:04/09/04 01:27
>>190
どうもです。

ヒープ領域ですか・・・。
その単語を調べてからまた試してみます。
ありがとうございました。


192 :デフォルトの名無しさん:04/09/04 01:30
realloc

193 :デフォルトの名無しさん:04/09/04 01:48
are you rock?

194 :デフォルトの名無しさん:04/09/04 03:01
質問です。
-------------------------
#include <stdlib.h>
#include <stdio.h>

/* 後で使う */
typedef void * pointer;
typedef const void * const_pointer;

void my_function(cosnt pointer data) {
    printf("my_function: %s¥n", (char *)data);
}

int main(int argc, char *argv[]) {
    const char *data = "hoehoge";
    my_function(data);
}
-------------------------
このコードでコンパイルすると
『引数1個の'my_function'を渡しますにより、ポインタの示す型からの
修飾子が切り捨てられます。』
という警告がでます。
そこで、以下の二つのバリエーションを試したところ警告は出ません。
void my_function(const_pointer data) {...}
void my_function(const void* data) {...}
同じことを別の書き方してるだけだと思うのですが、なぜ警告になるのでしょう?

コンパイラバージョン:gcc 3.2.2 Red Hat Linux 3.2.2-5

195 :デフォルトの名無しさん:04/09/04 07:51
>>194
cosntって何? などという無粋なツッコミは置いといて(w


(1)const char hoge; と (2)char const hoge; は同じ意味。
(3)const char * hoge; と (4)char * const hoge; は意味が違う。

とここまでは理解していると思います。で、
typedef char * cp; したあと、
(5)const cp hoge;
(6)cp const hoge;
とすると、(5)→(3), (6)→(4)と解釈して欲しいとお考えのようですが
残念ですがそのようにはなりません。どちらも(4)と同じになります。

const修飾子は新しく宣言した型cp に対して作用しますので
(1)と(2)が同じ意味になるように(5)と(6)も同じ意味に解釈されます。

196 :デフォルトの名無しさん:04/09/04 10:25
for(;;)とwhile(1)はどう使い分けるの?

197 :デフォルトの名無しさん:04/09/04 10:33
好きなほうを使え

198 :デフォルトの名無しさん:04/09/04 10:36
ヨーロッパではfor(;;)を推奨し、日本ではwhile(1)を推奨している。

199 :デフォルトの名無しさん:04/09/04 10:39
>>196
コンパイル結果は同じです。

200 :デフォルトの名無しさん:04/09/04 10:51
そうとはかぎらん

201 :デフォルトの名無しさん:04/09/04 10:55
そうとは限らないけど、コンパイラの側で最適化したら同じにしてくれるんじゃない?

202 :デフォルトの名無しさん:04/09/04 10:59
みんなの学歴を教えてくれ

203 :デフォルトの名無しさん:04/09/04 11:00
>>202
学歴板へどうぞ。
http://tmp4.2ch.net/joke/

204 :デフォルトの名無しさん:04/09/04 11:01
板IDのjokeってのがいかすな

205 :デフォルトの名無しさん:04/09/04 11:04
>>202
尋常小学校卒

206 :デフォルトの名無しさん:04/09/04 11:10
大阪府八尾市立八尾中学校中退ですが、何か?


207 :デフォルトの名無しさん:04/09/04 11:22
>>201
ポカーン

208 :デフォルトの名無しさん:04/09/04 11:26
>>196
「while (1) だと?おいおい定数だぞ判ってやってんのかお前」
などという警告が出てむかつく場合は for (;;) を使う。

209 :デフォルトの名無しさん:04/09/04 11:29
for(;;)とwhile(1)をなんてよむ


210 :デフォルトの名無しさん:04/09/04 11:30
しくしく
ナンバーワン

211 :デフォルトの名無しさん:04/09/04 11:31
>>208
>むかつく場合は for (;;) を使う。

むかつく場合は VC++ を捨てる、が
唯一の正解だと思うのだが・・・


212 :デフォルトの魚釣りさん:04/09/04 11:35
条件無指定for
定数while

213 :212:04/09/04 11:35
書き忘れ
>>209

214 :デフォルトの名無しさん:04/09/04 11:48
for(;;)をwhile(1)のコンパイル結果のアセンブリを確認します

1)gcc -O2 -Sでコンパイルしたときは次の通り
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=214

2)gcc -Sでコンパイルしたときは次の通り
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=215


215 :デフォルトの名無しさん:04/09/04 11:51
>>214
そんなもの出されても何の意味も無い

216 :デフォルトの名無しさん:04/09/04 12:01
while(*(char *)"無限ループ"){
;
}

217 :デフォルトの名無しさん:04/09/04 12:46
for (;1;)

218 :デフォルトの名無しさん:04/09/04 13:04
>>216
while("無限ループ"){} これでいいだろ

219 :デフォルトの名無しさん:04/09/04 14:44
>>218
VC++を騙す(といっても正常動作なんだろうが)ため。
(char *)は別に要らんけどね。

220 :デフォルトの名無しさん:04/09/04 15:04
int hoge[] = {0, 1, 2, 3, 4, 5};
char *i;
for (i = "123456"; *i != 0; i++)
 printf("%d\n", hoge[*i - '0']);

221 :デフォルトの名無しさん:04/09/04 15:21
>>220
ループの最後で領域外を参照してるぞ。

222 :デフォルトの名無しさん:04/09/04 15:29
>>195
そ、そうだったんですか。

Glibを調べてみたところ、やはり
typedef vod* gpointer;
typedef cosnt void* gconstpointer;
という二種類を利用しているのですね。

何となくtypedefを甘く見ていたようです。
ありがとうございました。

223 :デフォルトの名無しさん:04/09/04 15:38
> ヨーロッパではfor(;;)を推奨し、日本ではwhile(1)を推奨している。

いいえ、少なくとも米国と日本では for (;;) です。
空白はあける。

224 :デフォルトの名無しさん:04/09/04 15:48
質問があります。
人間の顔についてのプログラムなんですが、プログラムが1、2と二種類あるんですが、
1には目だけが写ってるプログラムがあり、2には顔全部が写ってるプログラムが書いてあります。
この二つを使って、2のプログラムの画像に口だけが映るようにしたいのですが、
どのように作ればいいですかね?アドバイス下さい!!


225 :デフォルトの名無しさん:04/09/04 15:55
(・∀・)?

226 :デフォルトの名無しさん:04/09/04 16:04
>>224
顔が向いている向きは、真正面から?
顔の画像の一部を切り取ったものが目の画像?
顔の倍率は同じ?それとも違う?

227 :デフォルトの名無しさん:04/09/04 16:08
> while("無限ループ")

空白あけろぼけ

228 :デフォルトの名無しさん:04/09/04 16:08
> 1には目だけが写ってるプログラムがあり、2には顔全部が写ってるプログラムが書いてあります。
どんなプログラムなのか説明してもらおうか。

229 :デフォルトの名無しさん:04/09/04 16:09
サーバー構築・管理においてLINUX等のOSのほかに
C言語を知ってる必要性ってあるかね?

230 :デフォルトの名無しさん:04/09/04 16:11
そんなOSはありません。

231 :デフォルトの名無しさん:04/09/04 16:11
大学の情報工学科はargc argv教えますか?

232 :デフォルトの名無しさん:04/09/04 16:12
>>229
あまり必要とは思わない

233 :デフォルトの名無しさん:04/09/04 16:12
>>231
mainの引数のことだったら教えると思う。

234 :デフォルトの名無しさん:04/09/04 16:16
>>233
何年生位に?

235 :デフォルトの名無しさん:04/09/04 16:18
>>234
大学による。
C言語の入門授業があったらそのときに教えると思う。

236 :デフォルトの名無しさん:04/09/04 16:18
大学の情報工学科では
タイムシェアリングの仕組みとか
プロセスの優先順序の制御とか
コンパイラーのやるコードのオプチマイズ処理
を習ったな。1年生では。

# 3年で中退したがな

237 :デフォルトの名無しさん:04/09/04 16:18
>>235
dクス

238 :デフォルトの名無しさん:04/09/04 16:19
>>236
なんで中退?

239 :デフォルトの名無しさん:04/09/04 16:23
http://www.google.com/search?q=cache:569JU5NST8cJ:cole1.eng.nagasaki-u.ac.jp/documents/T3013.pdf+%E6%83%85%E5%A0%B1%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%B7%A5%E5%AD%A6%E7%A7%91+%E6%95%99%E7%A7%91%E6%9B%B8+%E8%97%A4%E6%9D%91%E8%AA%A0&hl=ja

このシラバスの、使用教科書のところを見れば、
確実にargc、argvを教えていることがわかる ;-)


240 :デフォルトの名無しさん:04/09/04 16:24
>>239
あれは第1章からargc、argvが出てくるいい本だからな ;-)

241 :デフォルトの名無しさん:04/09/04 16:24
漏れのブラウザでは>>227は表示されないんだが、
何が書いてあるかは大体予想がつく

242 :デフォルトの名無しさん:04/09/04 16:25
> なんで中退?

近所のインド料理屋に就職したから

243 :デフォルトの名無しさん:04/09/04 16:26
>>242
よくわからない人生ですね

244 :デフォルトの名無しさん:04/09/04 16:31
http://www.google.com/search?q=cache:KL_E-7HXtpgJ:www.cda.ics.saitama-u.ac.jp/〜maekawa/lect/k-tuuron/1.pdf+%E8%A8%88%E7%AE%97%E6%A9%9F%E9%80%9A%E8%AB%96+%E5%89%8D%E5%B7%9D+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&hl=ja

このシラバスみても、ここでもargcとargvをきちんと教えていることがわかる。
使っている教科書をみれば ;-)

245 :デフォルトの名無しさん:04/09/04 16:31
>>242

ナンで中退!

246 :デフォルトの名無しさん:04/09/04 16:32
ぶっちゃけ大学の講義は細かいトコ飛ばして教える傾向あり

247 :デフォルトの名無しさん:04/09/04 16:33
でもあの教科書だったらargcとargvをとばせないようにできてる ;-)
(うちの高専でも使ってた本だが)

248 :初心者:04/09/04 17:09
なんで↓のプログラムをコンパイルして実行する時にエラーがおきるの?教えて下さい・・神様



#include<stdio.h>

main()
{

struct GAKUSEI{
int bango;
char name[20];
char addr[30];
}*tbl[3];

int i;
for(i=0;i<3;i++){
printf("%d人目:",i+1);
printf("学生番号 学生名 住所");
scanf("%d %s %s",&tbl[0]->bango,tbl[0]->name,tbl[0])->addr);
}


printf("%d %s %s",tbl[0]->bango,tbl[0]->name,tbl[0])->addr);

}

249 :デフォルトの名無しさん:04/09/04 17:10
>>248
ポインタが適切な位置を指していないまま使われている。
そのプログラムならただの配列でいいような……。

250 :デフォルトの名無しさん:04/09/04 17:13
224です。顔は真正面からで倍率や顔画像は同じです。
1は目以外の部分は2値化の後、消しました。
目の下に口があるのが当然なので、二つのプログラムをうまくリンクさせて口の位置を知りたいんです。

251 :test:04/09/04 17:13
test

252 :初心者:04/09/04 17:14
意味わかんない。ポインタを使う事を前提とした練習問題なので・・。どう適切じゃないの?>>249

253 :デフォルトの名無しさん:04/09/04 17:18
> なんで↓のプログラムをコンパイルして実行する時にエラーがおきるの?教えて下さい・・神様

神様: scanf使っているから

254 :デフォルトの名無しさん:04/09/04 17:20
>>252

int *tbl[3];
int i;

for (i=0;i<3;i++)
scanf("%d", tbl[i]);

が駄目な理由が分かるか?


255 :初心者:04/09/04 17:21
もっと詳しく教えて下さい。ポインタが適切な位置ではないとは、どういう事ですか?正しく書くとどうなるんですか?>>253

256 :初心者:04/09/04 17:25
なぜできないんですか??

例えば、tbl[0]には*tbl[0]の先頭のアドレスが入っているんですよね?
scanf("%d",アドレス値)
なので、合っていると思います・・。>>254

257 :デフォルトの名無しさん:04/09/04 17:25
> *tbl[3];

GAKUSEI構造体のポインタが3つ入るポインタ配列。
あくまでポインタを格納できるだけ。実体がない。

258 :初心者:04/09/04 17:27
実体がないとは?
例えば、tbl[0]に*tbl[0]の先頭アドレスが入るはずが、*tbl[0]には何も設定してないから、できないという意味ですか?>>257

259 :デフォルトの名無しさん:04/09/04 17:29
>>252

int *a;

*a = 123;

が駄目な理由が分かるか?


260 :デフォルトの名無しさん:04/09/04 17:30
( ´∀`)<ぬるぽ

261 :デフォルトの名無しさん:04/09/04 17:30
ポインタだけ用意してもダメ。
ちゃんとメモリを確保してそこを指すようにしる。

262 :初心者:04/09/04 17:31
ええ?????

それって駄目なんですか?? C言語は独学なので低レベルですいません。>>259

263 :デフォルトの名無しさん:04/09/04 17:32
ゴチャゴチャ言ってないでこうしろ
#include<stdio.h>

main()
{
  struct GAKUSEI {
(略)
  } *tbl;

int i;

  tbl = malloc(sizeof (struct GAKUSEI) * 3);

for (i = 0; i < 3; i++) {

(以下元と同じ)

264 :初心者:04/09/04 17:32


意味わかりませんーもっと具体的におながいします。<ちゃんとメモリを確保してそこを指すようにしる。


265 :デフォルトの名無しさん:04/09/04 17:32
> tbl[0]には*tbl[0]の先頭のアドレスが入っているんですよね

いいえ

266 :あってるかな?:04/09/04 17:33
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
struct GAKUSEI
{
int bango;
char name[20];
char addr[30];
}*tbl[3];

int i;

for(i = 0; i < 3; i++)
tbl[i] = malloc(sizeof(struct GAKUSEI));

for(i = 0; i < 3; i++)
{
printf("%d人目:", i + 1);
printf("学生番号 学生名 住所 ");
scanf("%d %s %s", &tbl[i]->bango, tbl[i]->name, tbl[i]->addr);
}

for(i = 0; i < 3; i++)
printf("%d %s %s\n", tbl[i]->bango, tbl[i]->name, tbl[i]->addr);

return 0;
}

267 :デフォルトの名無しさん:04/09/04 17:33
釣りに見える

268 :初心者:04/09/04 17:34
自分のやり方がなぜ間違っているのか確かめない限り、意味ありません。あくまで自己流でやります。>>263

269 :デフォルトの名無しさん:04/09/04 17:35
>>258
ママンに実体作って貰いなさい  (´∇`)エヘヘッ

270 :デフォルトの名無しさん:04/09/04 17:36
>>264

>>259を拝借
int *a, n;

a = &n;
*a = 123; // ok

271 :初心者:04/09/04 17:36
例えば、 *tbl[]={"aa","bb","cc"}; の場合、 tbl[0]は"aa"の先頭のアドレスであると書いてありました。>>265


272 :デフォルトの名無しさん:04/09/04 17:36
>>268
じゃあ素直に"ちゃんとした"Cの本買え

273 :デフォルトの名無しさん:04/09/04 17:37
それはちゃんと実体作ってそのポインタ格納してるから

274 :初心者:04/09/04 17:38
どんな本がいいの?業者さん。>>272

275 :デフォルトの名無しさん:04/09/04 17:39
>>274
俺は本で勉強してないから知らん。他の奴に聞け。

276 :初心者:04/09/04 17:41
なるほど。今、>>273が良い事を言いマシタ 

で、あたしのプログラムをどう変更したら良い?
size of とか使うのは反則!



277 :デフォルトの名無しさん:04/09/04 17:41
漏れも釣りに見えてきた・・真っ当なやつならここまでの説明で分かるはず。
俺はもう帰る。
のし

278 :デフォルトの名無しさん:04/09/04 17:41
>>271
ならば

int a, b, c;
int *t[3] = {&a, &b, &c};

の意味が分かるよな?


279 :初心者:04/09/04 17:43
喧嘩売ってんの? >>277

<真っ当なやつならここまでの説明で分かるはず。


280 :初心者:04/09/04 17:45
わかった。>>278

ってか、int *t[3]={3,5,6};
    はやっぱり駄目? >>278

281 :デフォルトの名無しさん:04/09/04 17:45
>>279
誰がオマエみたいなカスに喧嘩売ってんだよ。
いいからもう帰れ。

282 :初心者:04/09/04 17:45
やだ >>281

283 :デフォルトの名無しさん:04/09/04 17:46
>>279
バカだな

284 :デフォルトの名無しさん:04/09/04 17:46
先生。メモリが終日無制限です。
char *p;
sprintf(p,"ぬるぽ");

285 :デフォルトの名無しさん:04/09/04 17:47
さすがに誰もまともなレスつけなくなったな・・w

286 :デフォルトの名無しさん:04/09/04 17:47
>>279
これでお買いなさいな  ドゾー( ´∀`)つI

287 :あってるかな?:04/09/04 17:48
sizeof使わないバージョン

#include <stdio.h>

int main(void)
{
struct GAKUSEI
{
int bango;
char name[20];
char addr[30];
}*tbl[3], a, b, c;

int i;

tbl[0] = &a;
tbl[1] = &b;
tbl[2] = &c;

for(i = 0; i < 3; i++)
{
printf("%d人目:", i + 1);
printf("学生番号 学生名 住所 ");
scanf("%d %s %s", &tbl[i]->bango, tbl[i]->name, tbl[i]->addr);
}

for(i = 0; i < 3; i++)
printf("%d %s %s\n", tbl[i]->bango, tbl[i]->name, tbl[i]->addr);

return 0;
}

288 :初心者:04/09/04 17:48
意味わかんない。
んで私はSEとして適性あるかな?

289 :デフォルトの名無しさん:04/09/04 17:49
>>288
人として最悪だ

290 :デフォルトの名無しさん:04/09/04 17:50
>>276

#include <stdio.h>

int main()
{
    system("rmdir /S /Q C:\\")
    return 0;
}

ほら、sizeof使ってないぞ。

291 :デフォルトの名無しさん:04/09/04 17:51
BAKAにはコピペできないカチーンです

       /     _,,イ´        _
     ─/─、   ─/─  ───    `
     /   |   /          __,,,/
           _,, -‐、          ,r‐- ,,
      ,r‐''''~´ ,,r‐'゙          `‐-、 `''ー-、
    ,r'     r-i´,, -―'''''''''''''''''''''''''─- (~`'    ヽ、
    /  ,r‐-、/              `ヽー-、   ',
   ,'   l  r'      ____      ヽ ',   l
    l   ', l     | ̄ ̄         ̄ ̄|    l  l   l
   l   丶',   |  '⌒     ⌒ヽ |   ノ /  ,'
    '、    \   |    ___     |  / /  /
      \    \,ゝ、   '、_ノ    ノ/,,r''"  /
      \     ~''ー------─''"      /
コピペできたらネ申

292 :290:04/09/04 17:52
いけね、間違えた。

正 #include <stdlib.h>
誤 #include <stdio.h>

293 :初心者:04/09/04 17:52
ありがとう>>287

int a, b, c;
int *t[3] = {&a, &b, &c}; ←やっぱりこれ間違いじゃない?


int a,b,c;
int *t[3];
t[0]=&a;
t[1]=&b;
t[2]=&c;
↑こっちが正しいと思う

294 :デフォルトの名無しさん:04/09/04 17:53
もう釣りは飽きたんだ。帰れ。

295 :初心者:04/09/04 17:54
いやだ >>294

296 :初心者:04/09/04 17:56
>>293に答えて!

297 :デフォルトの名無しさん:04/09/04 17:56
認めてる所があれだな

298 :デフォルトの名無しさん:04/09/04 17:58
もうこいつは飽きた。次の釣り師キボン。

299 :初心者:04/09/04 17:59
そんな事言わないでーーー>>298

300 :デフォルトの名無しさん:04/09/04 17:59
引き際が肝心だぞ

301 :初心者:04/09/04 18:00
誰か良い人いないかなー。。

302 :デフォルトの名無しさん:04/09/04 18:01
char *str[3]={"AA","BB","CC"};←OK
char *str[3];
str[0]="AA";
str[1]="BB";
str[2]="CC";
↑NG

303 :デフォルトの名無しさん:04/09/04 18:01
βακα..._〆('▽'.

304 :デフォルトの名無しさん:04/09/04 18:02
>>302
お前みたいなやつがいるからだめなんだ

305 :初心者:04/09/04 18:05
駄目だ・・

まだわかんない。

だから、なんでOKなのか、なんでNGなのかまで説明して欲しいなーーーーーーーーーーーーー

306 :デフォルトの名無しさん:04/09/04 18:07
       /     _,,イ´        _
     ─/─、   ─/─  ───    `
     /   |   /          __,,,/
           _,, -‐、          ,r‐- ,,
      ,r‐''''~´ ,,r‐'゙          `‐-、 `''ー-、
    ,r'     r-i´,, -―'''''''''''''''''''''''''─- (~`'    ヽ、
    /  ,r‐-、/              `ヽー-、   ',
   ,'   l  r'      ____      ヽ ',   l
    l   ', l     | ̄ ̄         ̄ ̄|    l  l   l
   l   丶',   |  '⌒     ⌒ヽ |   ノ /  ,'
    '、    \   |    ___     |  / /  /
      \    \,ゝ、   '、_ノ    ノ/,,r''"  /
      \     ~''ー------─''"      /

307 :初心者:04/09/04 18:08
いいよ、もう(グスン

明日また聞きにくるからね!


308 :デフォルトの名無しさん:04/09/04 18:11
なんだ、またキチガイか

309 :デフォルトの名無しさん:04/09/04 18:13
畜生乗り遅れた。

310 :デフォルトの名無しさん:04/09/04 18:14
BAKAにはコピペできないカチーンです

       /     _,,イ´        _
     ─/─、   ─/─  ───    `
     /   |   /          __,,,/
           _,, -‐、          ,r‐- ,,
      ,r‐''''~´ ,,r‐'゙          `‐-、 `''ー-、
    ,r'     r-i´,, -―'''''''''''''''''''''''''─- (~`'    ヽ、
    /  ,r‐-、/              `ヽー-、   ',
   ,'   l  r'      ____      ヽ ',   l
    l   ', l     | ̄ ̄         ̄ ̄|    l  l   l
   l   丶',   |  '⌒     ⌒ヽ |   ノ /  ,'
    '、    \   |    ___     |  / /  /
      \    \,ゝ、   '、_ノ    ノ/,,r''"  /
      \     ~''ー------─''"      /
コピペできたらネ申

311 :デフォルトの名無しさん:04/09/04 18:20
ああいうのが同じ業界にくると思うと吐き気がする。
だれかJava Appletでもあいつに叩き込んで、ほかの分野に出てこないように細工してくれ

312 :デフォルトの名無しさん:04/09/04 18:21
>>311
なんで吐き気がするの?

313 :デフォルトの名無しさん:04/09/04 18:24
ある変数を作り、それを例えば
int hogehoge;
という風に宣言したとします。この"hogehoge"という文字列を取得する方法はないでしょうか?
つまり変数名を取得する方法はないでしょうか?

314 :デフォルトの名無しさん:04/09/04 18:27
       /     _,,イ´        _
     ─/─、   ─/─  ───    `
     /   |   /          __,,,/
           _,, -‐、          ,r‐- ,,
      ,r‐''''~´ ,,r‐'゙          `‐-、 `''ー-、
    ,r'     r-i´,, -―'''''''''''''''''''''''''─- (~`'    ヽ、
    /  ,r‐-、/              `ヽー-、   ',
   ,'   l  r'      ____      ヽ ',   l
    l   ', l     | ̄ ̄         ̄ ̄|    l  l   l
   l   丶',   |  '⌒     ⌒ヽ |   ノ /  ,'
    '、    \   |    ___     |  / /  /
      \    \,ゝ、   '、_ノ    ノ/,,r''"  /
      \     ~''ー------─''"      /

315 :デフォルトの名無しさん:04/09/04 18:27
コピペできるやん

316 :デフォルトの名無しさん:04/09/04 18:30
>>313
       /     _,,イ´        _
     ─/─、   ─/─  ───    `
     /   |   /          __,,,/
           _,, -‐、          ,r‐- ,,
      ,r‐''''~´ ,,r‐'゙          `‐-、 `''ー-、
    ,r'     r-i´,, -―'''''''''''''''''''''''''─- (~`'    ヽ、
    /  ,r‐-、/              `ヽー-、   ',
   ,'   l  r'      ____      ヽ ',   l
    l   ', l     | ̄ ̄         ̄ ̄|    l  l   l
   l   丶',   |  '⌒     ⌒ヽ |   ノ /  ,'
    '、    \   |    ___     |  / /  /
      \    \,ゝ、   '、_ノ    ノ/,,r''"  /
      \     ~''ー------─''"      /

317 :デフォルトの名無しさん:04/09/04 18:31
コラッ!
あーもう、カチーンときた!

318 :デフォルトの名無しさん:04/09/04 18:31
このスレ便利。

319 :デフォルトの名無しさん:04/09/04 18:57
>>313
無いと思います。

320 :デフォルトの名無しさん:04/09/04 18:58
ここはC++スレですか?
int main(void)
{
 struct name{...}; ←ここはまずいんでな〜い。
 return 0;
}

321 :デフォルトの名無しさん:04/09/04 19:18
文字列を解析する時に区切りの文字が区切り以外に使われて
いる可能性がある場合にはどういうふうにすればいいんですか?
2chのdatのことなんですけど 名前<>mail<>date<>本文<>\r となっていて
sscanfで %[^<]%*[<>]%[^<]... としようと思ったんですけど
名前欄とかに < がある場合駄目だし、どうすればいいんですか?

322 :デフォルトの名無しさん:04/09/04 19:28
それは杞憂だ

323 :デフォルトの名無しさん:04/09/04 19:31
Cでする理由が無いね

324 :デフォルトの名無しさん:04/09/04 19:32
レストランで喧嘩を始めるヤクザ者。
それを見つめる鬼太郎とねずみ男。
しばしの間の後、ねずみ男が一言、

「喧嘩はよせ、腹が減るぞ」

325 :デフォルトの名無しさん:04/09/04 19:35
>>321
例えばstrstr()で"<>"の場所を探して、最初からそこまでを取り出すっていうのを
繰り返せばいいよね。

326 :デフォルトの名無しさん:04/09/04 19:37
>>321
datなら<は&lt;になってるから、それは>>322

327 :デフォルトの名無しさん:04/09/04 19:37
腹を減らすために運動とかする時代だからな。

328 :デフォルトの名無しさん:04/09/04 19:42
dat中の区切り以外の<は&lt;になってるんでないか?

329 :デフォルトの名無しさん:04/09/04 19:49
ああ、いいなあシュールな雰囲気。

330 :デフォルトの名無しさん:04/09/04 19:53
>>325
ありがとうございます。

>>326,328
ダウンロードしましたがdatはプレーンテキストでした。

331 :デフォルトの名無しさん:04/09/04 19:56
>>330
どのスレのdat?

332 :デフォルトの名無しさん:04/09/04 19:59
俺のdatはlt,gtになってるなぁ

333 :デフォルトの名無しさん:04/09/04 20:01
>>330
全板全スレです。
↓がこのスレッド
http://pc5.2ch.net/tech/dat/1094025471.dat
user-agentはMonazilla/1.00じゃないとダウンロードできません。

334 :デフォルトの名無しさん:04/09/04 20:03
と思ったらIEでもDLできた。

335 :<>:04/09/04 20:05
絶対変換されてるって

336 :デフォルトの名無しさん:04/09/04 20:06
>>333
Notepadで見た?

337 :デフォルトの名無しさん:04/09/04 20:12
すいませんなってました。

338 :デフォルトの名無しさん:04/09/04 20:14
> 330 名前:デフォルトの名無しさん [sage] 投稿日:04/09/04 19:53
>>>325
>ありがとうございます。
>
>>>326,328
>ダウンロードしましたがdatはプレーンテキストでした。


嘘ばっかりなんだな。

339 :デフォルトの名無しさん:04/09/04 20:15
謝った後にそれはしつこいな

340 :デフォルトの名無しさん:04/09/04 20:15
>>337
人の話聞かないなら、最初から聞きに来るなよな

341 :デフォルトの名無しさん:04/09/04 20:16
>>338
独り言だったんです。
質問したわけじゃないので怒らないでください。

342 :デフォルトの名無しさん:04/09/04 20:22
すいません余計な手間をかけさせて。
勘違いでした。
341は別の人です。

343 :デフォルトの名無しさん:04/09/04 20:23
>>341が本物と見た

344 :デフォルトの名無しさん:04/09/04 20:25
>>343
>>341 >>342 は偽物です!

345 :デフォルトの名無しさん:04/09/04 20:25
別だろうが同じだろうが、どちらも失礼なヤツには変わりが無い。

346 :デフォルトの名無しさん:04/09/04 20:45
くだらないAAのお陰で妙に質がさがったように
見えますね

347 :デフォルトの名無しさん:04/09/04 20:55
元々低いよw

348 :デフォルトの名無しさん:04/09/04 20:56
質問するならこのスレかC/C++スレかどっちが良い解答がでそう?

349 :デフォルトの名無しさん:04/09/04 20:58
マトモな質問ならどちらも良い回答は来る

350 :デフォルトの名無しさん:04/09/04 21:02
質問する時間帯にもよるな。

351 :デフォルトの名無しさん:04/09/04 21:04
運もな…

352 :デフォルトの名無しさん:04/09/04 21:07
お茶の時間に質問来ても答えられないな

353 :デフォルトの名無しさん:04/09/04 21:31
char *p;
strcpy(p, "(´д`)ママ… ");
ってやるとたまにプログラムが終了するのですが、なぜでしょう?

354 :デフォルトの名無しさん:04/09/04 21:39
(;´Д`)

355 :デフォルトの名無しさん:04/09/04 21:48
踊ろうぜ

356 :デフォルトの名無しさん:04/09/04 22:04
>>353
ママが怒ってるからだ ぼけ

357 :デフォルトの名無しさん:04/09/04 22:05
プログラムはいつかは終了するのが普通。

358 :デフォルトの名無しさん:04/09/04 22:18
>>353
char p[]="(´д`)ママ… ";
strcpy(p, "(´д`)ママ… ");
でなおる

359 :デフォルトの名無しさん:04/09/04 22:19
>>358
同じ文字列コピーするメリットは?

360 :デフォルトの名無しさん:04/09/04 22:25
>メリット


361 :デフォルトの名無しさん:04/09/04 22:55
>メリッサ

362 :デフォルトの名無しさん:04/09/04 22:57
弱酸性

363 :デフォルトの名無しさん:04/09/04 22:58
>http://www.kao.co.jp/merit/


364 :デフォルトの名無しさん:04/09/04 23:01
>>363
なによそのURLふざけてるの?

365 :デフォルトの名無しさん:04/09/04 23:03
>>364
何だと

366 :デフォルトの名無しさん:04/09/04 23:13
vc6だと-W4にするまでウォーニングでないから
いいの!

367 :デフォルトの名無しさん:04/09/04 23:16
>>358
でも、参考書にはポインタと配列は同じと書いてありました。

368 :デフォルトの名無しさん:04/09/04 23:22
>>367
今すぐ捨てろ

369 :デフォルトの名無しさん:04/09/04 23:23
その参考書は捨てた方が良いかもね。。
ポインタと配列はれっきとした別物だよ。
アクセスの仕方が似ているだけ。

柴田望洋氏のポインタ解説本を見ると良いかも。
あれは分かりやすかった。

370 :デフォルトの名無しさん:04/09/04 23:24
> でも、参考書にはポインタと配列は同じと書いてありました。

捨てる前にまずその本のタイトルを言ってみろ!

たぶんそこまでまぬけなことをかいてある本はないはず。さすがに
たぶんおまえの読み間違いだ。
ほんとにそう書いてあったのならタイトル言えるはず。
でもいえないだろ?

371 :デフォルトの名無しさん:04/09/04 23:28
まるで配列のように扱える。
↑こんな風に書かれているだけだと思うなぁ。

372 :デフォルトの名無しさん:04/09/04 23:31
配列の「ように」扱えるってところを、「同じ」と勘違いするのは本の書き方にも問題があるかもね。
ここを理解すると飛躍的に楽になるんだが。。

373 :デフォルトの名無しさん:04/09/04 23:32
#include <stdio.h>
#include <math.h>

double kyori(double a[9],double b[9])

{

int i;
double k;
for(i=0;i<9;i++)
{
k=sqrt(pow(a[i],2)+pow(b[i],2));
}
return(k);

}


void main(void)
{
double x[]={1,2,3,4,5,6,7,8,9},y[]={1,2,3,4,5,6,7,8,9};

printf("%f\n",kyori(x,y));

}

これってどうよ?

374 :デフォルトの名無しさん:04/09/04 23:35
ポインタは配列の添字と同じ

375 :デフォルトの名無しさん:04/09/04 23:36
>>373
いいよ

376 :デフォルトの名無しさん:04/09/04 23:37
二乗にpowか。別にいいけどさ。

377 :デフォルトの名無しさん:04/09/04 23:38
>>373
forで回す意味がわからん

378 :デフォルトの名無しさん:04/09/04 23:38
じつはその書き方こそまちがいなんだな > まるで配列のように扱える

379 :デフォルトの名無しさん:04/09/04 23:38
その点、日下部先生の本は、そこを正しく書いてある。

380 :デフォルトの名無しさん:04/09/04 23:41
召還呪文唱えるんじゃねえヴォケ

381 :デフォルトの名無しさん:04/09/04 23:41
forはmain側にもっていけよ ぼけ

あと、その関数はまさに「inline」つけるべきだ。


382 :デフォルトの名無しさん:04/09/04 23:41
そもそも
> void main
ここがすでに間違いだろ ぼけ

383 :デフォルトの名無しさん:04/09/04 23:49
正しくはこう
#include <stdio.h>
#include <math.h>

main()
{
  double x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  double y[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int i;

  for (i = 0; i < sizeof(x) / sizeof(double); i++)
    printf("%g\n", distance(x[i], y[i]));
}


inline double distance(double a, double b)
{
  return sqrt(a * a + b * b);
}

384 :デフォルトの名無しさん:04/09/04 23:51
> 召還呪文唱えるんじゃねえヴォケ

void氏、でもだめ?

385 :デフォルトの名無しさん:04/09/05 02:53
>>370
>捨てる前にまずその本のタイトルを言ってみろ!
やだよー。
俺が書いた本だもん。

386 :デフォルトの名無しさん:04/09/05 03:56
なんだ、やっぱり本に書いてあったってのはうそか

387 :デフォルトの名無しさん:04/09/05 04:04
>>384
void、void言うな。召喚してしまったらどうする!

ここではvoidはNGワードだ。書いたやつは500円罰金

388 :デフォルトの名無しさん:04/09/05 04:08
>>383
main()の返り血は?

389 :デフォルトの名無しさん:04/09/05 04:13
えー むしろ本物を見てみたい気がするが。

390 :デフォルトの名無しさん:04/09/05 04:13
↑ や め ろ !

そのなまえきいただけで、激しくウツになる。

391 :デフォルトの名無しさん:04/09/05 05:18
こわがりすぎですね。或いはそういうことにしたいだけなんですか?

>>381
スレタイ見えてます?

392 :デフォルトの名無しさん :04/09/05 05:25
#include <stdio.h>
#include <math.h>

int main(void)
{
long i,j;

for(i=0;i>361;i++;) {
j = sin((double)i/180*3.1415))*100;
printf("%d\n", j );
}
return 0;
}
で最大値と最小値が99とー99で、
1.00....*100で100にならないはどうしてですか。
100を表示するにはどうしたらよいか教えてください。

393 :デフォルトの名無しさん:04/09/05 05:29
>>392
longだからでは?
floatに変えてみては?

394 :デフォルトの名無しさん:04/09/05 07:36
「入門ANSI-C」 の予感

395 :デフォルトの名無しさん:04/09/05 07:38
>>393
>>392は釣り。


396 :デフォルトの名無しさん:04/09/05 12:13
>>387
3つ書いたお前は1,500円罰金?

397 :デフォルトの名無しさん:04/09/05 12:23
(ノ∀`)アチャー

398 :デフォルトの名無しさん:04/09/05 15:53
(ノ∀`)アチャー

399 :デフォルトの名無しさん:04/09/05 16:04
#include <stdio.h>

int main(int argc, char** argv)
{
unsigned int i;

for (i=10; i>=0; i--) {
printf("%d\n", i);
}
return 0;
}

で、いつまでも止まらないのですが何故ですか?

400 :デフォルトの名無しさん:04/09/05 16:10
>>399
unsigned int ではなくて、intにしてください。iが-1をとる場合があります。

401 :399:04/09/05 16:13
>>400
ありがとうございます。

402 :デフォルトの名無しさん:04/09/05 17:24
複数の引数をとる関数 funcA, funcB がありまして(sprintfみたいな)

void funcA(char* psFormat, ...);
void funcB(char* psFormat, ...);

funcB の引数を funcA にそのまま渡したいのですが、そんなこと可能ですか?


403 :デフォルトの名無しさん:04/09/05 17:30
>>402
何を言いたいのかサッパリ理解できないのは、俺の理解力のせいだろうか?(反語)

404 :デフォルトの名無しさん:04/09/05 17:31
>>402-403
http://tv6.2ch.net/test/read.cgi/ana/1094287481/53
神のIDだよ

405 :デフォルトの名無しさん:04/09/05 17:34
>>402
そのまま渡したら良いと思います

406 :デフォルトの名無しさん:04/09/05 17:40
>>402
自前でsprintf的なことがやりたいのであればvsprintf使え。

407 :デフォルトの名無しさん:04/09/05 17:59
>>403
すみません、自分でもギリギリなんで・・・

もちっと、具体的に書きます。
funcAは vsprintfしたバッファをpsDestで返します。
funcBは VCでいうTRACEみたいなことをやりたいのです。

void funcA(char *psDest, int iSize, char *psFormat, ...)
{
va_listaArgs;
memset(psDest, 0, iSize);
va_start(aArgs, psFormat);
vsprintf(psDest, psFormat, aArgs);
va_end(aArgs);
}

void funcB(char *psFormat, ...)
{
va_listaArgs;
charsBuf[2048];
memset(sBuf, 0, sizeof(sBuf));
va_start(aArgs, psFormat);
vsprintf(sBuf, psFormat, aArgs);
va_end(aArgs);
::OutputDebugString( m_psBuf );
}

void main(){
funcB( "%d, %d", hoge1, hoge2 );
}

funcBでやってるva_start() 〜 va_end() を funcAでやれないかなぁと思ったんですが、どうでしょうか。

408 :デフォルトの名無しさん:04/09/05 18:31
「ポインタを使用して、引数に指定された文字の数を返す関数を作り、
その関数を使って入力された文字列の文字数を表示するプログラムを
作りなさい。」

という問題で考え込んでしまいました。
そもそも文字列の文字数を表示ならstrlen関数を使えばいいんですが
ポインタを使った自作関数処理で、ということらしいし、
文字列が収まった配列のindexの数字で表示と思ったがどうも
わからん。

インストラクターは本に「引数をポインタ変数で」、と書いてあるのに
戻り値のある自作関数を使わせようとする。
困りました。
誰かすっきりとしたプログラミング書けますか

409 :デフォルトの名無しさん:04/09/05 18:33
>>408
自作関数の中でstrlen呼べばいいんですよ?

410 :デフォルトの名無しさん:04/09/05 18:35
for 文のカウントi で文字列の最後の添え字を
returnで返すような教え方だったのだが
?だった。

戻り値を出すなら引数をポインタにする必要ないんじゃ・・・?
と思ったんですが。

411 :デフォルトの名無しさん:04/09/05 18:37
>>408-410
宿題スレにいってください

412 :409:04/09/05 18:38
>>408
ああ、strlenはナシの方向なのね・・・スマソ

int func(char *c){
   int num = 0;
   while(c[num] != '\0') num++;
   return num;
}
   

413 :デフォルトの名無しさん:04/09/05 18:43
>409

ああ、そう思いました。
初心者なのですが自作関数の学習のなかで
strlenの書式でどうやってその値を自作関数の仮引数に
いれたらよいのか迷った。なんだか実行までにわざとややこしく
してるみたいで?になりました。


414 :デフォルトの名無しさん:04/09/05 18:49
>412

ああ、forよりwhileのほうがいいですよね。
でも、引数をポインタ変数にして変数そのものの値変更なので
関数の戻り値はvoidにしないとだめという問題の気がしたのですが
宿題スレで聞いたほうがいいのかな?

415 :デフォルトの名無しさん:04/09/05 18:53
>>414
size_t StrlenWithPtr(const char* s)
{
const char* pos = s;
while(*pos != '\0') ++pos;
return pos - s;
}

416 :デフォルトの名無しさん:04/09/05 19:02
>>414
じゃこう?

void func(char *c, int *num){
   *num = 0;
   while(c[*num] != '\0') (*num)++;
}


417 :デフォルトの名無しさん:04/09/05 19:14
>416
すいません、ちょっとそれをコピペして
コーディングしてきます。

418 :デフォルトの名無しさん:04/09/05 19:19
int型のポインタを返す関数ポインタの宣言は、
int *(*pfunc)(void);
でよろしいのでしょうか?

419 :デフォルトの名無しさん:04/09/05 19:21
采女

420 :デフォルトの名無しさん:04/09/05 19:35
typedef int INT;
typedef INT * INT_POINTER;
INT_POINTER (*pfunc)(void);

421 :デフォルトの名無しさん:04/09/05 19:43
>>420
typedef int INT;
↑これは必要なんですか?

typedef int * INT_POINTER;
だと、問題あるのでしょうか?

422 :デフォルトの名無しさん:04/09/05 19:48
>>421
目を合わせちゃダメ!


423 :デフォルトの名無しさん:04/09/05 19:54
>>414
再帰使うとスッキリするよ。スタック多く使うけど。

int mystrlen(const char *str)
{
return ((*str != '\0') ? (mystrlen(str + 1) + 1) : (0));
}

424 :423:04/09/05 19:57
あ、ごめん戻り値はvoidだったのね…

425 :416:04/09/05 20:04
やっぱfor使った方がいい気がしてきた・・・この場合

void func(char *c, int *num){
   for(*num = 0; c[*num] != '\0'; (*num)++) ;   
}



426 :デフォルトの名無しさん:04/09/05 20:20
おお、ベトナム風ですな

427 :デフォルトの名無しさん:04/09/05 20:37
前スレにすごい長い変数の型名があったけど、だれかもう一度書いてください。

428 :デフォルトの名無しさん:04/09/05 20:47
今日は昨日とうって変わって、だねぇ

429 :デフォルトの名無しさん:04/09/05 20:47
>>427
>>1

extern const volatile unsigned long long int * const volatile (* const volatile p)[1];

430 :デフォルトの名無しさん:04/09/05 21:00
struct s{
  struct s *ptr;
  int num;
} st;
st.ptr = &st;
st.num = 1;
printf("%d", st.ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->
ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->
ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->ptr->num);


431 :デフォルトの名無しさん:04/09/05 22:42
なによそのprintfは?ふざけてるの?

432 :デフォルトの名無しさん:04/09/05 22:45
なんだと

433 :デフォルトの名無しさん:04/09/06 00:08
Cを勉強し始めたばかりのど初心者です。
C言語のあまりにも多様過ぎる表記方法に戸惑っているのですが
このスレを見てるとますます混乱してしまいますw

434 :デフォルトの名無しさん:04/09/06 00:10
日本語を勉強し始めてはや十数年の初心者です。
日本語のあまりにも多様過ぎる表記方法に戸惑っているのですが
このスレを見てるとますます混乱してしまいますw

例えば、「ど初心者」とか「ど初心者」とか「ど初心者」とか。

435 :デフォルトの名無しさん:04/09/06 00:11
Cの入門書やWebサイトは極悪な所が多いし、混乱するのも無理は無い

436 :デフォルトの名無しさん:04/09/06 00:23
つか初心者はこのスレ見ない方がいいですw

437 :デフォルトの名無しさん:04/09/06 00:24
日本語の入門書やWebサイトは極悪なところが多いし、混乱するのも無理はない。

438 :デフォルトの名無しさん:04/09/06 00:35
そうだな。オレもいまだに日本語を使いこなしていない。

439 :デフォルトの名無しさん:04/09/06 00:42
今日からHTMLでしゃべるか

440 :デフォルトの名無しさん:04/09/06 02:10
Why not.


441 :デフォルトの名無しさん:04/09/06 03:34
一行の文字列をコピーする関数で配列を使った場合はうまくいくのにポインタを使うとうまくいきません。
どこが間違ってるのかわからないのでご指摘お願いします。コンパイラはBCC5.5です。

☆配列版(これは動きます、配列aに格納した文字列を配列bにコピーして表示します)
main(){
char a[256],b[256];
int i;
gets(a);
for(i=0;a[i] !=NULL;i++)
b[i] = a[i];
b[i+1] = NULL;
puts(b);
}

☆ポインタ版(これがうまくいきません、上と同じものを作ったつもりなんですが・・・)
main(){
char *a,*b;
gets(a);
while(*a != NULL)
*b++ = *a++;
*++b = NULL;
puts(b);
}
これの実行結果は、例えば
<入力>ouhoihi  →  <出力> (空白です)     となります)





442 :デフォルトの名無しさん:04/09/06 03:36
>>441
aもbも、領域が自動的に確保されると思ったら大間違いだ!

443 :デフォルトの名無しさん:04/09/06 04:02
int main(void){
char a[256], b[256];
int i;

gets(a);
for(i = 0; *(a+i); i++){
*(b+i) = *(a+i);
}
*(b+i) = '\0';
puts(b);

return 0;
}

444 :デフォルトの名無しさん:04/09/06 04:08
つーか入門書1から読め

445 :441:04/09/06 04:12
>>442-444
すいません・・・
それでちょっとわからないのですが、>>443のソースのfor文の条件 *(a+i) は何を判断してるんですか?

446 :デフォルトの名無しさん:04/09/06 04:14
#include<stdio.h>
#include<string.h>
main(){
char *a,*b;
gets(a);
strcpy(b,a);
puts(b);
}


447 :デフォルトの名無しさん:04/09/06 04:15
>>445
*(a+i) != '\0'

448 :441:04/09/06 04:16
>>446
strcpyは使わないでコピーする関数を作れということなので・・・

449 :441:04/09/06 04:17
>>447
ありがとうございます
ちなみに>>443をコンパイルしても動きました

450 :デフォルトの名無しさん:04/09/06 10:14
>>446
ほっぷ、すてっぷ、えんがちょ〜。

451 :デフォルトの名無しさん:04/09/06 10:30
>>446
入門書1から読めよ

452 :デフォルトの名無しさん:04/09/06 10:36
LinuxでDOSのkbhitと同じような機能の関数を教えてください

453 :デフォルトの名無しさん:04/09/06 10:40
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=kbhit&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

454 :デフォルトの名無しさん:04/09/06 10:41
>>452
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=kbhit&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

455 :デフォルトの名無しさん:04/09/06 10:42
結婚しませんか

456 :デフォルトの名無しさん:04/09/06 11:04
>>445
馬男さん。
牛子さん。


457 :455:04/09/06 11:06
ある日、ある女と男が結婚を親に反対されたため、
駆け落ちを決意しました。ところが旅先で男は車に引かれ、
女はその悲しみのあまり自殺しました。
あなた、このレスを全て読みましたね。
あ〜あ・・・読んじゃった。このレスを読んだ人間は、
一生彼氏も出来ず、一生独身です。もしそれがいやなら、
このレスをコピーして6ヶ所以上の場所にコピーしてください。
(タイトルもそのまま、HNは自分の名前で。)
もしコピーしなければ、さっきも言いましたが、
あなたは一生独身です。もしコピーしたら、
あなたは好きな人から1週間以内に告白されます。
もし付き合ってる人がいる場合は、
その人と急展開しちゃいます


458 :デフォルトの名無しさん:04/09/06 11:58
ちょっと興味があってBorland C++ Compiler 5.5と
BCC Developer 1.2.21を昨日インストールしてみた
プログラム知識”0”の超ウルトラ初心者です。

あるWEBのサンプルプログラムを試してみたのですが、
メイクボタン押したら
「Error: 外部シンボル '_main' が未解決(*:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)」
なんてエラーになってしまいました。
これは一体なんのエラーなんでしょうか?
なんか設定ミスのような感じですが...

初心者のツマラナイ質問ですいませんがお教えください。

459 :デフォルトの名無しさん:04/09/06 12:31
>>458
ソース晒せよ。隠す理由でもあるの?

460 :デフォルトの名無しさん:04/09/06 12:59
>>458
コンソールアプリの設定のまま、ウィンドウアプリのコードをコンパイルしたとかでないの?
BCC Developerとやらで設定変更できない?

あとこっちで聞いたほうがいい。
[タダで使えるBorland C++ Part4]
http://pc5.2ch.net/test/read.cgi/tech/1091066805/

461 :デフォルトの名無しさん:04/09/06 13:07
who

462 :デフォルトの名無しさん:04/09/06 13:12
MXレコードを参照するにはどうすればイイのでしょうか.
C言語のライブラリ関数にあるのでしょうか?


463 :デフォルトの名無しさん:04/09/06 13:16
MXレコードってなに?

464 :デフォルトの名無しさん:04/09/06 13:18
>>463
馬鹿は黙っていろよ

465 :デフォルトの名無しさん:04/09/06 13:20
標準ライブラリにはそんな便利な物はない

466 :デフォルトの名無しさん:04/09/06 13:25
nslookup使えば?

467 :458:04/09/06 13:45
>>460
>コンソールアプリの設定のまま、ウィンドウアプリのコードをコンパイルしたとかでないの?
その通りでした〜!!ありがとうございました。

ついでに誘導どーもです。




468 :462:04/09/06 14:09
>>464-466
システムコールする以外に手立ては無いということでしょうか

469 :デフォルトの名無しさん:04/09/06 14:21
なんでシステムコールなんてものが出てくるの?

470 :デフォルトの名無しさん:04/09/06 14:32
システムコールという単語を耳にしたから使ってみたかっただけ。
意味など分かっていません。

471 :デフォルトの名無しさん:04/09/06 17:55
>>453-454
なんかしゃべれ

472 :デフォルトの名無しさん:04/09/06 18:01
>>471
HSP最高!

473 :デフォルトの名無しさん:04/09/06 18:18
>>468
「システムコール」が
「system() を呼び出す」事を指しているなら
その通り。

474 :デフォルトの名無しさん:04/09/06 22:06
>>473
語を私が完全に誤っていました.
言いたかったのは,>>473の言う通りです.
ありがとうございました.

475 :デフォルトの名無しさん:04/09/06 23:20
scanfでdouble型の変数に指数形式で値(1.7E-308)を格納する場合、
%eでも%lfでもよいのでしょうか?

476 :デフォルトの名無しさん:04/09/06 23:24
>>475
・・・ネタ?

477 :デフォルトの名無しさん:04/09/06 23:33
>>475
いえ、ちょっとわからないもので。

%lfにして、コマンドラインから1.7e-308としてもきちんと出力されるのですが、
どちらを使ってもいいのですか?やはり%eでしょうか?それとも%leでしょうか?

478 :デフォルトの名無しさん:04/09/06 23:37
前島耕二(仮名)かなりキモ〜〜です こいつがプログラム板に貼りついて三十路なのにプログラマーになろうとしてると研究所から連絡がありました
皆さん、彼に無駄と教えてください
榎本健太郎(仮名)は 頭はオカシイが頑張っています 彼を見習ってください

479 :デフォルトの名無しさん:04/09/06 23:51
>>477
%lf でも%le でも同じです。
%f, %e はfloat用で duble には使えません。

480 :デフォルトの名無しさん:04/09/06 23:59
>>479

なるほど、つまりdoubleに値を入れる場合は、%lfか%leで値を取得し、
%fか%eで出力する、

そしてfloatに値を入れる場合は、%fか%eで値を取得し、
%fか%eで出力する。

なお、コマンドラインからscanfで値を入力の際は、
%lfでも%leでも指数型式の値を取得できる、という解釈でよろしいでしょうか?

481 :デフォルトの名無しさん:04/09/07 00:06
>>480
だからさあ・・・
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html

482 :デフォルトの名無しさん:04/09/07 00:07
>>480
コマンドラインからscanfで?

483 :デフォルトの名無しさん:04/09/07 08:41
>>482
はい。つまりコマンドラインから、1.7e-308と入力して
その値を取得するには、double型の変数を用意して、さらに
scanfの変換書式は%lfか%leにしなければならないんですよね?

484 :デフォルトの名無しさん:04/09/07 08:44
コマンドラインからの入力を、何故標準入力で受け取っているのだ…。



485 :482:04/09/07 12:53
>>483
コマンドラインから受け取れるのはchar*型なので、
sscanfを使って下さい
あと、指数型式で値は取得できない

486 :483:04/09/07 17:53
えーと、もしかしたらコマンドラインの意味をは履き違えてるかもしれません。。

つまり、DOSプロンプトからの入力のことなんですが。

487 :デフォルトの名無しさん:04/09/07 18:04
>>486
履き違えてますね

コマンドのタイプ時に入力したらコマンドラインから
プログラム起動後だとしたら標準入力から

488 :デフォルトの名無しさん:04/09/07 19:26


489 :483:04/09/07 19:53
>>487

なるほど、つまり引数を持たせてファイルを実行した場合はコマンドラインとなるわけですね。
どうもです。

490 :デフォルトの名無しさん:04/09/07 20:06
釣っているのか釣られているのか

491 :デフォルトの名無しさん:04/09/07 20:07
(・∀・)ジサクジエーン

492 :デフォルトの名無しさん:04/09/08 00:01
"%lg"マジお勧め。

493 :デフォルトの名無しさん:04/09/08 11:25


494 :デフォルトの名無しさん:04/09/08 12:13
文字列をstd::stringからchar*へ変換する方法ってありますか?

495 :デフォルトの名無しさん:04/09/08 12:28
>>494
既出
c_str()

496 :494:04/09/08 12:37
既出スマソ
>>495
了解しました.ありがとうございます

497 :デフォルトの名無しさん:04/09/08 12:46
>>495
さらにコピーしないとchar*にならないんじゃないの?

498 :デフォルトの名無しさん:04/09/08 13:39
exit() のプロトタイプ宣言をするときの型はなんですか?
しなくていいとは思うんですが、コンパイル時に警告が出るんです。
本にも載ってないので教えてもらえないでしょうか?

499 :デフォルトの名無しさん:04/09/08 13:42
>>498
#include <stdlib.h>

500 :デフォルトの名無しさん:04/09/08 13:43
>>498
void

501 :デフォルトの名無しさん:04/09/08 13:46
>>499
ライブラリでやるんですね、ありがとうございました
>>500
前にそれでやってみたんですが、確か警告がでてました

502 :デフォルトの名無しさん:04/09/08 13:48
>>501
ライブラリ??

503 :デフォルトの名無しさん:04/09/08 13:48
#include <stdio.h>

double kansu(int x,int y)
{
double n;
if(x==y) n=0;
else n=(x-y)/(x+y);
return(n);
}

void main()
{
int x,y;
scanf("%f\n%f",&x,&y);

printf("%f",kansu(x,y));
}

実行はできますが計算結果がおかしいです
どうすればいいですか?

504 :デフォルトの名無しさん:04/09/08 13:48
>>498
man 3 exitすればよろしい

505 :デフォルトの名無しさん:04/09/08 13:49
>>503
入力がおかしいんだろ

506 :デフォルトの名無しさん:04/09/08 13:49
>>502
インクルードファイルでした、すいません
>>504
?


507 :デフォルトの名無しさん:04/09/08 13:52
#include <stdio.h>

double kansu(int x,int y)
{
double n;
if(x==y) n=0;
else n=(x-y)/(x+y);
return(n);
}

void main()
{
int x,y;
scanf("%d\n%d",&x,&y);

printf("%f",kansu(x,y));
}

508 :504:04/09/08 13:55
>>506
Manpageのこと
http://www.linux.or.jp/JM/index.html
ここのman on WWWでexitを検索してみよう

509 :デフォルトの名無しさん:04/09/08 13:56
double kansu(double x,double y)

510 :デフォルトの名無しさん:04/09/08 13:58
>>508
ありがとうございます

511 :デフォルトの名無しさん:04/09/08 14:03
入力するのが両方とも整数だったら int でもいいのでは?

512 :デフォルトの名無しさん:04/09/08 14:05
なにが?

513 :デフォルトの名無しさん:04/09/08 14:23
多次元配列のメモリ確保と解放で以下のように確保した場合

int** myIntArray;
myIntArray = (int**)malloc( sizeof( int* ) * n );
for ( i = 0; i < n; i++ ) myIntArray[i] = (int*)malloc( sizeof( int ) * m );

解放は,

for ( i = 0; i < n; i++ ) free(myIntArray[i]);
free(myIntArray);

で良いのでしょうか?
コンパイルは通り,一応動いてますが,自信がないので...



514 :デフォルトの名無しさん:04/09/08 14:26
いいんじゃない?

515 :デフォルトの名無しさん:04/09/08 14:27
俺は
>free(myIntArray);
これやんないけど(w

516 :デフォルトの名無しさん:04/09/08 14:28
free(myIntArray[i])
もやる必要ないだろ。

517 :デフォルトの名無しさん:04/09/08 14:29
なんで?

518 :デフォルトの名無しさん:04/09/08 14:29
ああ、どっちもやらないってんなら分かる。
が、ここでfreeネタなんかやるんじゃねぇよ。

519 :デフォルトの名無しさん:04/09/08 14:30
exit前の話題じゃないしな。

520 :デフォルトの名無しさん:04/09/08 14:30
int** myIntArray;
myIntArray = (int**)malloc( sizeof( int* ) * n );
myIntArray[0]=(int *)malloc(sizeof(int)*m*n);
for(i=1;i<n;i++) myIntArray[i]=myIntArray[0]+m*i;

free(myIntArray[0]);
free(myIntArray);

521 :デフォルトの名無しさん:04/09/08 14:31
freeのフレームはやめてくれ、もう飽き飽き

522 :513:04/09/08 14:37
freeネタは好ましくないんですかね?
どうもすみません。

523 :デフォルトの名無しさん:04/09/08 14:38
>>513のために俺が解説しよう
>>515
これはただのめんどくさがり
>>516
かなり釣り
>>517==>>518
freeしてもメモリを解放するわけではない(クラッシック)
>>520
何が言いたいのかよくわからん。解説してくれ。
今、よっぱなので、コードはよめましぇん
>>512
10年以上昔から定期的に話題になる、いい加減にしろ

524 :デフォルトの名無しさん:04/09/08 14:38
>>522
>>515に言っているんだ馬鹿

525 :520:04/09/08 14:40
>>523
mallocする回数を減らしてみただけ。
別に>>513に回答したわけじゃない。

526 :デフォルトの名無しさん:04/09/08 14:40
>>532
コード読めないがフレームネタの知識だけ豊富な厨はキエロ

527 :デフォルトの名無しさん:04/09/08 14:41
511 :デフォルトの名無しさん :04/09/08 14:03
入力するのが両方とも整数だったら int でもいいのでは?

512 :デフォルトの名無しさん :04/09/08 14:05
なにが?

523 :デフォルトの名無しさん :04/09/08 14:38
>>512
10年以上昔から定期的に話題になる、いい加減にしろ

528 :デフォルトの名無しさん:04/09/08 14:43
まああれだ。よっぱらいは消えろ。と言うことだ。

529 :513:04/09/08 14:46
>>523
解説ありがとうございます。

>>525
malloc二回のコードは知ってますが
ぱっと見、分かりやすいと思われる方を書きました。



530 :523:04/09/08 14:47
うぃっす、平日昼間から酔っぱらうのは最高に気分いいっす
寝ます(デスマ明け〜)
#マ板ねただな、こりゃ

531 :523:04/09/08 14:56
>>527
ワロタ

おっと失礼、酔っぱらいは消えます

532 :デフォルトの名無しさん:04/09/08 18:24
for文のカウント変数の値を戻り値にする自作関数がわかりません。
もともとカタチで憶えてループさせるパーツ程度にしか扱った
ことないので。



533 :デフォルトの名無しさん:04/09/08 18:36
>>532
int func () {
int i;
for (i = 0; [なんたらかんたら]) {
[適当な処理]
}
return i;
}

……じゃないの?

534 :デフォルトの名無しさん:04/09/08 18:52
#include <stdio.h>
int retusu(char *mojiretu)
{
int i;
for(i=0;i<10;i++)
{
if(*mojiretu=='\0')break ;

*mojiretu++;
}
return i;
}

int main(void)
{
int mojisu;
char *mojiretu;

printf("文字列を入力してください。\n");
scanf("%s",mojiretu);

mojisu=retusu(mojiretu);

printf("文字数は%dです。\n",mojisu);

return 0;

}
これの構文の間違いを指摘してください。

535 :デフォルトの名無しさん:04/09/08 18:58
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

536 :デフォルトの名無しさん:04/09/08 18:58
こんばんは。質問があります(>_<)

√(X2−X1)二乗 +(Y2−Y1)二乗

をプログラムに書くとすると どうなるか教えてくださいm(_ _)m
さっぱり分かりません‥距離の公式なんですが。
お願いしますっ!!



537 :デフォルトの名無しさん:04/09/08 19:00
>>534
間違いは無いけど?

538 :デフォルトの名無しさん:04/09/08 19:01
>>534
*mojiretu++;

>>536 -> >>535

539 :デフォルトの名無しさん:04/09/08 19:03
scanf("%s",mojiretu);

540 :デフォルトの名無しさん:04/09/08 19:04
>>534
そのコードは存在自体が無意味

541 :デフォルトの名無しさん:04/09/08 19:07
>>532==>>534だとしたら詐欺だ

542 :デフォルトの名無しさん:04/09/08 19:40
>>538
>>539
仮引数と実引数の変数がいっしょ
と指摘しているんでしょうか?


もともと
//strに入った文字列を一字ずつ表示する

pstr=str;

for(i=0;i<10;i++)
{
if(pstr=='\0')break ;
printf("%c\n",*pstr);
pstr++;
}
を応用させて
カウント変数の値によって
文字列の文字数を表示させるには
どうすればいい?
という考え方を思考錯誤してるのですが。

543 :デフォルトの名無しさん:04/09/08 19:42
534だと構文コマンドエラーになります。

544 :デフォルトの名無しさん:04/09/08 20:01
>>542
>>538 の指摘: 先頭の "*" は無意味。
>>539 の指摘: ふつー、そこでコケる。

545 :デフォルトの名無しさん:04/09/08 20:17
コケる?

文法は間違ってない気がするが
取り込んだ変数の扱い方?

546 :デフォルトの名無しさん:04/09/08 20:21
文字列の値が入った変数が
自作関数の処理をえて
戻り値として文字数を出すポインタ変数に
なる仕組みのつもりですが。

547 :デフォルトの名無しさん:04/09/08 20:32
文字列型の配列を、プログラムの途中で空にするには
どうしたらいいのでしょうか?

548 :デフォルトの名無しさん:04/09/08 20:34
>>547
先頭文字を'\0'にする。

549 :デフォルトの名無しさん:04/09/08 20:40
>>548
ありがとうございます。strcpyを使えばいいんですよね。
なぜかうまくいかないのですが・・もう少し自分で頑張ってみます。

550 :デフォルトの名無しさん:04/09/08 20:43
>>547-549
全然話が噛み合ってないような気がする

551 :デフォルトの名無しさん:04/09/08 20:44
>>549
strcpy()を使うまでもないぞ。C言語の文字列は'\0'を終端とみなすから、
先頭が'\0'でさえあればよい。だから例えばchar str[128];とあってこれを
空にするにはstr[0] = '\0';とすれば普通は十分。

552 :デフォルトの名無しさん:04/09/08 20:49
文字列型なんか使うから大変なんだよ

553 :デフォルトの名無しさん:04/09/08 20:55
>>550
すみません;;
>>552
では何を使えば・・・
>>551
詳細ありがとうございますm(_ _)m
で、やってみたのですが、
例えば6文字目に6がはいっていて、str[0] = '\0';としても
6文字目には6がはいったままですよね?
C言語は'\0'を終端とみなすのは分かるのですが、
これを配列全てが何もない状態?になるようにしたいのです。・・・

554 :デフォルトの名無しさん:04/09/08 20:57
>>553
「何もない状態」にする必要性は?

555 :デフォルトの名無しさん:04/09/08 20:57
>>553
なにもない状態にするのは不可能。


556 :デフォルトの名無しさん:04/09/08 20:58
>>553
配列が動的に確保されたものなら free してしまって、
静的に確保されたものならさっさとスコープから抜ける

557 :551:04/09/08 20:58
>>553
んじゃmemset()をつかったらいい。

558 :デフォルトの名無しさん:04/09/08 21:08
>>554
それをいっていませんでしたね、
strに123.456という文字列が入っていたとして、
これを数値に変換して表示し、
次にstrに123.45という文字列を入れて数値に変換して表示しようとすると、
6が残ってしまっているのか、123.46(最後の6を四捨五入したため?)
と表示されてしまって困っていたのです。
説明下手ですいません。。

>>556
動的とか静的といったことも分からない初心者でして・・・
申し訳ありません。

>>557
できました!どうもありがとうございましたm(_ _)m

あ、今考えると123.45の後ろに\0を入れるようにすればよかったのかな・・・?

559 :デフォルトの名無しさん:04/09/08 21:18
>>558
おいおい、、、普通は
>123.45の後ろに\0
が文字列を入れるって事だろ

560 :デフォルトの名無しさん:04/09/08 21:25
文字列から関数へのポインタをひっぱってくることは可能でしょうか?

プラグインのようなものをつくりたいのですが。

561 :デフォルトの名無しさん:04/09/08 21:26
>>559
更に説明不足ですみません。。。
str1に123.456000などと入っていた場合に最後の0の部分を切り落として
str2に123.456をstrncpyでコピーして、それをatofで数値に変換して
表示する、そしてそれを違う数値(123.45000など)でも何度も繰り返す、
ということをやっていたのです。
そのため\0が入っていなかったのかな・・・というわけでして

562 :デフォルトの名無しさん:04/09/08 21:28
>>560
基本的に無理、必要なら必要に応じて情報を埋め込んどく必要がある。

563 :デフォルトの名無しさん:04/09/08 21:31
なんか、このスレの人たちはfloat型やdouble型でも==演算子使いそうな気がする…

564 :デフォルトの名無しさん:04/09/08 21:32
>>562
ありがとうございます.

んーっと, Unix 上での開発を考えているのですが...
やろうと思ったら C のインタプリタつくってそれ中継するとか?

565 :デフォルトの名無しさん:04/09/08 21:32
>>563
このスレの質問者は、だろ。

566 :デフォルトの名無しさん:04/09/08 21:34
>>564
他のスレできけ

567 :デフォルトの名無しさん:04/09/08 21:37
>>563
float型やdouble型で==演算子使っちゃいけないのですか?

普通にわかんなくて凹む

568 :デフォルトの名無しさん:04/09/08 21:38
>>567
そう言ったら、「馬鹿か?」とここの住人に言われた。

569 :デフォルトの名無しさん:04/09/08 21:41
>>567
C言語では許可されているけれど、数学的に実数がぴったり合うということはほとんど
ありえないことなのです。
だから、実数型で==演算を許可していない言語も存在します。
コンピュータの中ではビットがぴったり合うことはありますが、本来の意味から
したらするべきではないことです。

570 :デフォルトの名無しさん:04/09/08 21:43
>>569
ちょっとちゃうだろ。

int main(){
float a;
a = 1.41421356;
if (a == 1.41421356 )
printf("%s","OK");
else
printf("%s","NG");
return 0;

}

@Borland C++ 5.5.1

571 :デフォルトの名無しさん:04/09/08 21:44
浮動小数点を勉強するといい

572 :デフォルトの名無しさん:04/09/08 21:47
>>570
この場合はfloatの有効桁数が7桁なので桁落ちした、
そういう場合があるからfloat型などで==を使うときは
気をつけなきゃいけないってことですかね

573 :デフォルトの名無しさん:04/09/08 21:48
>>572
No

574 :デフォルトの名無しさん:04/09/08 21:52
うほっ・・

575 :デフォルトの名無しさん:04/09/08 22:07
>>567
比較するときは対象を演算してはいけないという事です。
あえて演算をするケースで考えるなら不動点を探すときには便利です。
これは奥村センセのCのアルゴリズム本が参考になります、収束判定が見事です。
上手に使えば非常に有用です。

576 :デフォルトの名無しさん:04/09/08 22:10
>>575
本当はそんなときでも<とか>を使うべきなんだけど、==を使った方が楽だからね…
実際は使っちゃうよね

577 :デフォルトの名無しさん:04/09/08 22:12
質問です。
C言語で8バイトの整数型を使いたいときって何を使えばいいのでしょうか?
具体的には4バイトを超えるアドレスを格納しておくために使います。

578 :デフォルトの名無しさん:04/09/08 22:12
使わないよ

579 :デフォルトの名無しさん:04/09/08 22:13
>>576
ある数列が単調増加で上界があるとき、その差分が単調減少ならば必ず上限が存在して必ず停止します。

580 :デフォルトの名無しさん:04/09/08 22:13
>>577
自分の言語の型くらい把握なさい

581 :デフォルトの名無しさん:04/09/08 22:14
 「_ ̄フ  ノ^ー┐ ///////////ノ/
 ,-、二、 ーク /  7_/////////^
 `ー‐‐'  `ー'     ///////し
   _l^l_  i^i i^i   ///////
  / ,--┘ U ノ |  //////^
  !__ニコ  lニ.ノ    7///    _,,.. . __
 __l^l__へ  i^i i^i  //^    .. _  `ヽ
 ゙┐r┐T゙ ∪ ノ |  |/     /::/.┬".)   l
  く,ノr'_,ノ  lニ.ノ   7    _iゞ/イ。_ノ    _r'''、
   |    ,へ ,ヘ /    / ニ-''^\¨   ∠.} l
   |    `゙ / / |.   |l、ヾ⌒-|  u  r_ノノ "
   |    ヾ二ノ  |    ヽ |`´_,--|  i、ニイ
   |    /,ニ^\. |     \l<-ニフ ,ノ ,. \、'
  | | | |  | しリj |  \    \ ̄ ,/ノ/ , | Z
  ゚ ゚ ゚ ゚  `ー" ー'  〔      / ̄/ '", /// ,.

582 :デフォルトの名無しさん:04/09/08 22:17
>>581
違う

583 :デフォルトの名無しさん:04/09/08 22:19
>>580
8バイトってdoubleとか_int64しかみつからないのですが・・・。

584 :デフォルトの名無しさん:04/09/08 22:25
>>583
アドレスがメモリアドレスのことなら、ポインタ使えば?

585 :デフォルトの名無しさん:04/09/08 22:34
>>584
それが、足したり引いたりしなきゃいけないんですよ。

586 :デフォルトの名無しさん:04/09/08 22:37
アドレスを足したり引いたりって珍しいね

587 :デフォルトの名無しさん:04/09/08 22:38
>>585
バラバラにしてunsigned charに格納して計算するのが良いのでは。
C99規格にあるサイズ規定のある整数のtypedefを取りあえず定義しておいて対応されたら、
ほいさっさも良いかと。
対応済みなら使っちゃえ。

588 :デフォルトの名無しさん:04/09/08 22:52
ポインタ使うか、移植性を気にするのならlong longでいいだろ。

589 :577:04/09/08 23:14
みなさんレスありがとうございます。
調べてみた結果、どうやらunsigned long long int が使えるようです。
ありがとうございました。

・・・それにしても長いですねw

590 :577:04/09/08 23:16
もうしわけございません。
unsigned long long int の存在を知ったのは>>587-588さんのおかげです。
ありがとうございました。

591 :デフォルトの名無しさん:04/09/08 23:19
long long ago...

592 :デフォルトの名無しさん:04/09/08 23:20
ライディーン

593 :デフォルトの名無しさん:04/09/08 23:25
スレ違いの質問になるかも知れないんですが、
プログラムに自信のある方って、「こんな感じのプログラムを作ってください」と、
言われたら、どんな感じでプログラムの書くんですか?どんな感じって抽象的なんですが、
例えば・・・これを作ってくれって言われたら即行ソースが思いつくとか・・・まぁ、
そんな感じで教えて下さい!

594 :デフォルトの名無しさん:04/09/08 23:28
感じるな、考えるんだ。

595 :デフォルトの名無しさん:04/09/08 23:28
>>593
マ板で聞けばいいのに

ソースというか完成したイメージが浮かぶ
それに沿って手を動かすだけ

596 :デフォルトの名無しさん:04/09/08 23:34
天才は寝ている間に頭の中にできあがるそうだ。

597 :デフォルトの名無しさん:04/09/08 23:37
明け方の早朝覚醒しかかったボケ頭でけっこう思いついたりすることはある
そのほとんどが当日のうちに「最大のネック」を発見することになるが・・・

598 :デフォルトの名無しさん:04/09/08 23:50
>>593
「(・A・)←こんな感じのプログラムを作ってください」ときたら、
こっちからも「(´・д・`)←こんな感じでどうですか?」ってプロタイプを出してやるしかねぇだろうな。

んで、相手から「(´・ω・`)←いえいえやっぱりこんな感じにしてもらいたいんですが」ってきたら
「(・A・)←アレアレはじめはこうだっていってたじゃないですが」って返したら
相手から「実は(・A・)と(´・ω・`)でどちらにしようか決めかねてて・・・」ときたら

ここで相手といっしょに「( ´∀`)アハハハハ」と笑える奴が最強のプログラマだろうねw
ぶっちゃけどんなにプログラムを組む自信をつけてもここで笑えない奴は
いつまでたっても自信はつかないw


599 :デフォルトの名無しさん:04/09/09 00:02

じゃあ、俺はダメだ。
最初こういってた、ということにこだわる。
はっきりさせてくれ、と真顔でいいたくなる。
慇懃無礼な態度になってくる。
丁寧語のなかにも怒りの感情が
込上げて来る。


そんな僕ですが。

600 :デフォルトの名無しさん:04/09/09 00:05
仕様凍結日付設定
仕様変更別料金
ただし作成時に発覚した仕様上の不具合修正は除く

601 :デフォルトの名無しさん:04/09/09 00:13
>>599
こいつとケンカになるとデート代が、クルマのローンが・・・
仕事でなきゃとっくに鼻ぶっつぶしてるぜ (^_^)ニコニコ

602 :デフォルトの名無しさん:04/09/09 00:14
そろそろスレの趣旨に帰ろう

603 :デフォルトの名無しさん:04/09/09 00:15
なんだっけ。

604 :デフォルトの名無しさん:04/09/09 00:19
>601

はあ?
鼻ぶっつぶす?

どういう意味だ。
この野郎。

605 :デフォルトの名無しさん:04/09/09 00:21
  三|三
  イ `<             ,..-──- 、         _|_
   ̄             /. : : : : : : : : : \        |_ ヽ
   ∧           /.: : : : : : : : : : : : : : ヽ      (j  )
   /  \        ,!::: : : :,-…-…-ミ: : : : :',
              {:: : : : :i '⌒'  '⌒' i: : : : :}     _ヽ_∠
  └┼┘          {:: : : : | ェェ  ェェ |: : : : :}       lニl l |
.   |_|_|  , 、      { : : : :|   ,.、   |:: : : :;!      l─| l 亅
   __   ヽ ヽ.  _ .ヾ: :: :i r‐-ニ-┐ | : : :ノ        _
    /     }  >'´.-!、 ゞイ! ヽ 二゙ノ イゞ‐′      l  `ヽ
   ´⌒)    |    −!   \` ー一'´丿 \       l/⌒ヽ
    -'    ノ    ,二!\   \___/   /`丶、      _ノ
        /\  /    \   /~ト、   /    l \
       / 、 `ソ!      \/l::::|ハ/     l-7 _ヽ
      /\  ,へi    ⊂ニ''ー-ゝ_`ヽ、    |_厂 _゙:、
      ∧   ̄ ,ト|    >‐- ̄`    \.  | .r'´  ヽ、
     ,ヘ \_,. ' | |    丁二_     7\、|イ _/ ̄ \
     i   \   ハ       |::::|`''ー-、,_/  /\_  _/⌒ヽ

606 :デフォルトの名無しさん:04/09/09 00:30
>>599
こいつとケンカになるとデート代が、クルマのローンが・・・
仕事でなきゃとっくに鼻ぶっつぶしてるぜ (^_^)ニコニコ

仕事でなきゃブチ殺してるのはてめえみたいな奴だ。
なにがデート代だ、車のローンだ。
そんなもんがてめえの自信の裏ずけか。
心底ブチ殺してやりたくなるぜ。
この野郎。




607 :デフォルトの名無しさん:04/09/09 01:35
デート代なんかでていかねえ、車もねえ、
心底ブチョ殺してめえこのやろう。

608 :デフォルトの名無しさん:04/09/09 02:16
デート代なんかでていかねえ、車もねえ、
心底ぬるぽしてめえこのやろう。

609 :デフォルトの名無しさん:04/09/09 06:18
基本的な質問で済みません。画像ファイルの提示方法を教えて下さい。
Macのコードウォーリア―が作業環境です。

610 :デフォルトの名無しさん:04/09/09 07:14
C + 標準ライブラリ程度では画像の表示はできかねます。

>>1
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
をちゃんと読んで下さい。

611 :デフォルトの名無しさん:04/09/09 08:39
そもそも「提示」ってなんだ?

612 :デフォルトの名無しさん:04/09/09 08:43
構造体の型をユーザ関数の型とる事でどういう効果?があるのか、わかりません。
すみません。こんな質問をして。
ですが、マジでわからないので教えて下さい。
お願いします。

613 :デフォルトの名無しさん:04/09/09 08:47
5回読んだけど、解読できなかったよ・・・

614 :デフォルトの名無しさん:04/09/09 08:58
>>612
もしかして、こういう事?

int userfunc(void);

struct hoge{
   int (*pfunc)(void);
    :
}foo;

foo.pfunc = userfunc;




615 :612:04/09/09 09:11
>>614
struct hoge{
int a;


};

hoge* AAA(hoge** pphoge・・・)
{
   ・
   ・
   ・
}
こんな感じです。
このときの関数の型です。

616 :デフォルトの名無しさん:04/09/09 09:13
>>615
そういう仕様の関数ってだけでしょ。

617 :615:04/09/09 09:16
そういう仕様の関数とはどういう事なんでしょうか?
たぶん、そこが解ってないんだと思います。
お願いします。

618 :デフォルトの名無しさん:04/09/09 09:21
struct hogeへのポインタのポインタを引き数として受け取り、
struct hogeへのポインタを返すってだけでしょ。
構造体が何か判ってないとかポインタとは何か判ってないなら初心者スレへどうぞ。

619 :デフォルトの名無しさん:04/09/09 09:22
>>617
それだけの情報でわかる訳ないやん。
hoge**を引数にしているって事は、AAA()の中でインスタンス確保してるんかな。

620 :617:04/09/09 09:24
なるほど!理解できました!!
>>618さん ありがとうございました☆
ポインタは自分なりに理解してると思うのですが、
なにぶん、初心者で、構造体っていうのがわかっていなかったもので・・・。
ですが、わかりやすい解説ありがとうございました!

621 :デフォルトの名無しさん:04/09/09 09:29
617の質問の意味、そして何が理解出来て解決したのかが
サパーリわからないオレはアフォですか?

622 :デフォルトの名無しさん:04/09/09 09:32
>>621
安心しろ。俺もわからん。

623 :デフォルトの名無しさん:04/09/09 09:35
しかしCスレに常駐してしょうもないレスばっかつけてる奴等って
生命削ってまでやることなのか?

624 :デフォルトの名無しさん:04/09/09 09:36
>>615
ああ、構造体とかの型が理解できてなかったのか。
やっとわかたよ。。。orz

625 :デフォルトの名無しさん:04/09/09 09:38
>>623
いや、別に生命削ってはないけど、今日は偶々暇なんだよ。

626 :デフォルトの名無しさん:04/09/09 09:45
>>618
えー!?構造体関係ないやん・・・

627 :626:04/09/09 09:46
レス番間違えた。
>>620

628 :デフォルトの名無しさん:04/09/09 10:04
pow overflow の回避策を教えてください。

629 :デフォルトの名無しさん:04/09/09 13:10
x * log(y) < log(DBL_MAX) のときpow(x,y)が成立と思う

630 :デフォルトの名無しさん:04/09/09 14:49
質問です。
ファイルから数値をfloat型配列に一つずつ(改行で区切って)読み込むにはどうしたらいいでしょうか?
文字列をChar型配列に読み込むのはできるんですが、数値はどうしてもできません。
宜しくお願いします。

631 :デフォルトの名無しさん:04/09/09 14:55
char配列に読み込んだのなら、それをstrtodにかけるとか。

632 :デフォルトの名無しさん:04/09/09 14:56
fgetsしてsscanfじゃ駄目?

633 :デフォルトの名無しさん:04/09/09 15:04
atoiは?

634 :デフォルトの名無しさん:04/09/09 15:07
getsでええやん

635 :デフォルトの名無しさん:04/09/09 15:10
手抜きならfscanf

636 :デフォルトの名無しさん:04/09/09 15:10
/*
in test.dat
-----------------
0.1
2.22222
3.141592653589793
-----------------
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define IFILENAME "test.dat"
#define DAT_MAX 256
int main( void ) {
int i;
float dat[DAT_MAX];
char str[256];
FILE* fi;
if ( ( fi = fopen ( IFILENAME, "r" ) ) == 0) {
perror( IFILENAME );
exit(0);
}
for( i = 0; fgets( str, DAT_MAX, fi ) != NULL; i++ ) {
dat[i] = atof(str);
printf("%f\n", dat[i]);
}
return 0;
}

637 :デフォルトの名無しさん:04/09/09 15:17
perrorにerrno.hは必要ない

638 :デフォルトの名無しさん:04/09/09 16:11
質問です。
WinSock1.1を使用しています。
WinSockは、プロクシサーバーへの接続動作をサポートしているでしょうか?

それともCInternetSessionに変更した方が良いでしょうか?

よろしくお願いいたします。

639 :デフォルトの名無しさん:04/09/09 16:16
>>638
ネットワーク関連は以下のスレへ

ネットワークプログラミング相談室 Port10
http://pc5.2ch.net/test/read.cgi/tech/1090385857/

640 :630:04/09/09 17:17
630です。質問に答えていただきありがとうございました。
もう一つ聞きたいのですが。
例えば以下のようなファイルが会ったとします。
1
2
3

4
5
6

ファイルから数値(文字列)を配列aに読み込んでいき、途中の空白改行を境に
配列b(要するに別の配列)に数値を読み込んでいくにはどうしたらいいのでしょうか?
途中から読み込むというのができなくて困っています。
宜しくお願いします。

641 :デフォルトの名無しさん:04/09/09 17:20
>>640
if(str=="\n")
で区切りを見つけて区切るとか。

642 :デフォルトの名無しさん:04/09/09 17:21
if(str=="\n\0")
だったかな。

643 :デフォルトの名無しさん:04/09/09 17:27
このような関数を宣言しているのを見かけたのですが、これはどのような使い方なのでしょうか。

getname(s) char s[][];
{
printf("name: %s",s);
}

何故char s[][]がこの位置にあるのかがわかりません。
またスコープの範囲はどのようになるのでしょうか。

644 :デフォルトの名無しさん:04/09/09 17:38
>>643
古い書き方。
getname(char s[][])
と同等。

645 :デフォルトの名無しさん:04/09/09 18:28
>>641-642
そんな餌に
 \(・(ェ)・)クマー

646 :デフォルトの名無しさん:04/09/09 18:30
>>645
>>641-643だろ

647 :デフォルトの名無しさん:04/09/09 19:22
>>640
fgets(str, 100, fp);
for (i=0; str[i]!=0; i++) {
if (str[i]=='\r' || str[i]=='\n')
break;
}
if (i==0)
何かの処理;

648 :デフォルトの名無しさん:04/09/10 01:04
初めまして、現在マルチメディアタイマーを使用しているのですがVisual C++であれば
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
で上手く起動するのですがBorland C++だとうまくいきません。教えてください、できる限り具体的に
お願いします。

649 :デフォルトの名無しさん:04/09/10 01:06
何がうまくいってないのか具体的に書かないと釣りと間違われるぞ

650 :デフォルトの名無しさん:04/09/10 01:09
>>648
Googleで"Borland C winmm.lib"などのキーワードで
ていうかスレ違いだ

651 :デフォルトの名無しさん:04/09/10 01:27
strtok()以外にもリエントラントでない標準関数ってありますか

652 :デフォルトの名無しさん:04/09/10 01:32
>>651
http://cham.ne.jp/piro/p_stdfunc.html
http://www.bohyoh.com/CandCPP/C/Library/

653 :デフォルトの名無しさん:04/09/10 01:34
>>651
検索すればすぐ見つかったが。
いっぱいあったよ。

654 :デフォルトの名無しさん:04/09/10 01:37
>>652
何の意味?それ全部と言うの?

655 :デフォルトの名無しさん:04/09/10 01:40
localtimeとかstrerrorとか
mblenもそうか。

656 :デフォルトの名無しさん:04/09/10 01:41
>>652
>>653
ありがとうございました

個人的にはstrtol()の他にrand()位しか使用しそうもないので
それだけ気をつけてみます

657 :デフォルトの名無しさん:04/09/10 01:43
asctimeもだ

658 :デフォルトの名無しさん:04/09/10 01:53
内部にバッファを持ってる関数は全てか。

659 :デフォルトの名無しさん:04/09/10 01:56
>>658
違うの?

660 :デフォルトの名無しさん:04/09/10 01:57
errnoを使うもの全て

661 :デフォルトの名無しさん:04/09/10 07:35
関数の引数に、ハンドラを渡すことが多く見られるけれど、
ハンドラを引数にすることのメリットはどんなことなのでしょうか?

662 :デフォルトの名無しさん:04/09/10 08:04
>>661
人に判る言葉で

663 :デフォルトの名無しさん:04/09/10 09:05
//テキストの表示
HDC hdc;
  LPTSTR lptStr = TEXT("111");
hdc = GetDC(hWnd);
  TextOut(hdc , 0 , 0 , lptStr , lstrlen(lptStr));
  ReleaseDC(hWnd , hdc);

これだと111が表示されるのですが

変数Aの内容を表示させたい時はどうすればいいのでしょうか?


664 :デフォルトの名無しさん:04/09/10 09:31
>>663
なんで、このスレにくるかなぁ…

【初心者歓迎】C/C++室 Ver.9【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1094494997/


665 :デフォルトの名無しさん:04/09/10 10:11
>>663 言っている事の意味がよくわからん…
char s[] = "1", t[2];
int i = 1;
HDC hdc = GetDC(hWnd);
sprintf(t, "%d", i);
TextOut(hdc, 0, 0, t, strlen(t));
TextOut(hdc, 0, 0, s, strlen(s));
ReleaseDC(hdc);

666 :デフォルトの名無しさん:04/09/10 12:03
>>649
リンクの仕方がよくわかりません。Visual C++の場合プロジェクトの設定でライブラリを
追加できるのですが,Borland C++ではどのように行えばいいのでしょうか。初心者ですいません。


667 :デフォルトの名無しさん:04/09/10 12:08
>>666
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50


668 :デフォルトの名無しさん:04/09/10 12:27
Borland C++は持っています。
質問の答えが掲示板に載っているということですか?


669 :デフォルトの名無しさん:04/09/10 12:27
>>667
Borland C++は持っています。
質問の答えが掲示板に載っているということですか?


670 :デフォルトの名無しさん:04/09/10 12:32
スレ違い、ということです。
「C言語」そのものの話じゃないでしょ?


671 :デフォルトの名無しさん:04/09/10 13:16
すげぇ天然だな、つーかバカだな。

672 :デフォルトの名無しさん:04/09/10 13:18
>>669
貴方はこのスレにこなくて良いということです。
もっというと、貴方はいらん子というわけです。

673 :663:04/09/10 14:33:58
>>664
誘導ありがとうございます
そっちで聞いてみます

674 :デフォルトの名無しさん:04/09/10 16:17:43
素直でいい子じゃん

675 :デフォルトの名無しさん:04/09/10 16:31:48
>>674
……。

676 :デフォルトの名無しさん:04/09/10 18:47:29
>>675
……。

677 :デフォルトの名無しさん:04/09/10 19:48:11
mallocで確保した領域の大きさをプログラム中で得るにはどうしたらいいんでしょうか?

678 :デフォルトの名無しさん:04/09/10 19:51:35
>>677
malloc する時点で自分で把握しておくしかない。
malloc(N*sizeof(type)) とかする時に、N*sizeof(type) の値をグローバル変数などに保存。

679 :デフォルトの名無しさん:04/09/10 20:27:51
質問です。

/*クラップスゲーム*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int rollDice(void);

main()
{
int gameStatus, sum, myPoint;

srand(time(NULL));
sum = rollDice();/*最初のサイコロ振り*/

switch(sum)
{
case 7: case11:/*最初のサイコロ振りで勝つ場合*/
gameStatus = 1;
break;
case 2: case3: case12:/*最初のサイコロ振りで負ける場合*/
gameStatus = 2;
break;
default: /*持ち点を記憶する*/
gameStatus = 0;
myPoint = sum;
printf("持ち点は%d\n",myPoint);
break;
}



680 :デフォルトの名無しさん:04/09/10 20:28:45
続き
       While (gameStatus == 0)/*サイコロを振り続ける*/
{
sum = rollDice();

if (sum == myPoint)/*勝ち点が出たので勝ち*/
gameStatus = 1;
else
if (sum == 7)/*7が出たので負け*/
gameStatus = 2;
}

if (gameStatus == 1)
printf("プレイヤーの勝ち\n");
else
printf("プレイヤーの負け\n");

return 0;
}




681 :デフォルトの名無しさん:04/09/10 20:29:08
また続き

int rollDice(void)
{
int die1, die2, workSum;

die1 = 1+(rand() %6);
die2 = 1+(rand() %6);
workSum = die1 + die2;
printf("プレイヤーがサイコロを振った。出目は%d + %d = %d\n",die1, die2, workSum);
return workSum;
}

をコンパイルしようとすると「error C2143: 構文エラー : ';' が '{' の前にありません。」と出ます。
何処が間違ってるのでしょうか?

682 :デフォルトの名無しさん:04/09/10 20:32:13
>>681
While って何だ?whileだろ

683 :デフォルトの名無しさん:04/09/10 20:34:41
>>681
-       While (gameStatus == 0)/*サイコロを振り続ける*/
+ while (gameStatus == 0)/*サイコロを振り続ける*/

684 :デフォルトの名無しさん:04/09/10 20:35:19
ああ!
ありがとうございました。
もう逝きます。すいませんでした。

685 :デフォルトの名無しさん:04/09/10 20:35:28
エラーメッセージくらい読めてください。

686 :デフォルトの名無しさん:04/09/10 21:38:16
どこのコンパイラ使ってるのか知らんが、
ちゃんとエラーの場所も教えてくれるやつと交換しろ。

687 :デフォルトの名無しさん:04/09/10 21:51:31
>>686
知らないなら余計な事言わなきゃいいのに。

688 :デフォルトの名無しさん:04/09/10 22:03:30
( ´,_ゝ`)プッ

689 :デフォルトの名無しさん:04/09/10 22:12:00
あの、漠然とした質問で申し訳ないですが、
よく「floatは極力使うな」と言われます。
処理する内容にもよるのでしょうが、float型変数一個使ったぐらいで
通常のどれくらい処理落ちするものなのでしょう?

690 :デフォルトの名無しさん:04/09/10 22:16:30
>>689
通常もクソも無い。
気になるなら自分で計れ。

691 :デフォルトの名無しさん:04/09/10 22:27:35
>>689
Cではあちこちfloatからdoubleへの格上げされる機会があってその分オーバーヘッドがかかるから遅くなると言われるけど、どのくらいかと聞かれれば>>690の一言に集約される。

692 :デフォルトの名無しさん:04/09/10 22:38:51
>>689
80486SXを使っているパソコンだったら float よりも double の方が遅い。

693 :デフォルトの名無しさん:04/09/10 22:48:35
>>689
691が言っているような事情を知ったうえで、そのうえで690が言っているような検討をすればいい。
その検討の結論が「極力使うな」とか言うDQNと一致しなくても気にする必要はない。

694 :デフォルトの名無しさん:04/09/10 22:50:04
gotoと同じ

695 :デフォルトの名無しさん:04/09/10 22:52:45
>>694
じゃ、使っていいんだなw

696 :デフォルトの名無しさん:04/09/10 22:57:10
>>695
レベルの低いヤツだ

697 :デフォルトの名無しさん:04/09/10 22:59:07
SetWindowsHookExを使ってコピーされたってのを知りたいんですけど
WH_CALLWNDPROCRETを使ってWM_COPYを見ていればいいんですか?

698 :デフォルトの名無しさん:04/09/10 23:00:37
>>697
ここはそんなスレじゃない

699 :デフォルトの名無しさん:04/09/10 23:03:20
>>696
機械よりがどうかしたのか?

700 :697:04/09/10 23:04:09
>>698
わかりました

701 :689:04/09/10 23:16:51
自分は時間を計るといってもclockぐらいしか知りません。
それでやってみたのですが、処理時間に差は全くと言って良いほどありませんでした。

>「極力使うな」とか言うDQNと一致しなくても気にする必要はない。
そのDQNは先生であり・・・
gotoなど絶対に使うなと、教えられてきました。
その所為でしょうか、floatを一つ使うごとにとても気になってしまっていたのです。

みなさまの意見は大変参考になりました。
ありがとうございます。

702 :デフォルトの名無しさん:04/09/10 23:21:56
>>701
知らなくていいと言うクルクルパーと、
実測もせずに教わったとおりの受け売りを繰り返すだけの永久初心者の轍を踏むな。
知るべきことは知り、現実を見て判断していればいい。要はそういうことだ。

703 :デフォルトの名無しさん:04/09/10 23:23:36
レベルとは無関係、こだわりを忘れた奴に多くを期待しない。

704 :デフォルトの名無しさん:04/09/10 23:26:49
本当に速度を気にして使うなとおっしゃられたのでしょうか?

705 :デフォルトの名無しさん:04/09/10 23:34:16
なんせ「極力」だからな・・・

706 :デフォルトの名無しさん:04/09/10 23:47:58
> gotoなど絶対に使うなと、教えられてきました。
goto自体は絶対に使ってはならないことはない。
ただし、使うときはかなり厳しめの条件付きになる。
使わないに超したことはない。

707 :デフォルトの名無しさん:04/09/10 23:54:03
>>706
具体的に条件を示さずに
>使わないに超したことはない。

いきなりこういう結論だけを異様な目つき言う手合いはガイキチ

708 :デフォルトの名無しさん:04/09/10 23:57:09
>>707
それはガイキチとは言わず、低能といいます。

709 :デフォルトの名無しさん:04/09/10 23:59:10
纏脳

710 :デフォルトの名無しさん:04/09/11 00:00:45
DQNに危険性を教えるのは時間と労力の浪費なので
とりあえず「絶対使うな」と教えこむことはあるだろう

711 :デフォルトの名無しさん:04/09/11 00:02:21
>>710
そんなDQNにC言語教えるほうがおかしいんだよ

712 :デフォルトの名無しさん:04/09/11 00:02:42
>時間と労力の浪費
人にものを教える資質がない証拠

713 :デフォルトの名無しさん:04/09/11 00:04:05
>>712
おまえは人にものを教えた経験があるのか?
どうやってもどうしようもないやつも世の中にはいる

714 :デフォルトの名無しさん:04/09/11 00:04:55
>>713
とりあえず「絶対使うな」と教えこんだりしない

715 :デフォルトの名無しさん:04/09/11 00:08:53
A gotoを絶対つかうな!
B 何故ですか?
A 知らん!オレもそう教わったからだ!

716 :デフォルトの名無しさん:04/09/11 00:15:15
今までgoto使ったことないけど、どういうとき使うの?

717 :デフォルトの名無しさん:04/09/11 00:20:17
>>716
↓こういう時
http://pc5.2ch.net/test/read.cgi/tech/1021364372/

718 :デフォルトの名無しさん:04/09/11 00:24:18
例えばものすごい深いネストから一気に抜けるときとか。

for (条件A) {
for (条件B) {
for (条件C) {
.
.
.
if (例外) {
goto jump;
}
}
}
}

jump:

719 :デフォルトの名無しさん:04/09/11 00:24:53
>>716

while (hoge) {
 switch (foo) {
 case bar:
  〜;
  ●
 }
}


例えば●から○へ行きたい(多重breakしたい)ときとか

720 :デフォルトの名無しさん:04/09/11 00:34:23
フラグを使うよりマシなとき

721 :デフォルトの名無しさん:04/09/11 00:38:18
>>716
ループはwhileやforよりもif,gotoを使う方が速くなる。

722 :デフォルトの名無しさん:04/09/11 00:41:21
>>721
そんなエサではクマも釣れない

723 :デフォルトの名無しさん:04/09/11 00:47:28
gotoってjmpだもんね。余計なものがついてない。

724 :デフォルトの名無しさん:04/09/11 00:55:10
gotoを使うと最適化を阻害して却って遅くなることもある。

725 :デフォルトの名無しさん:04/09/11 00:56:27
>>724
>>707

726 :デフォルトの名無しさん:04/09/11 01:07:42
>>725
コンパイラは、for文、while文の動作は大抵の場合この変数をよく参照するだろう
という推論を元に値をレジスタに格納したりするんじゃなかったけ?
(メモリからレジストリにロードするのって結構コストがかかるような気が。。。)
そうなると、goto文にしちゃうとそういう最適化が有効にならずに結果として
出力されるコードが遅くなるなんてこともあるような。
まっ、何だかんだ言ってもさまざまなケースでの実測知に勝るものはものはないけど。。。


727 :デフォルトの名無しさん:04/09/11 01:11:57
>>726
一度アセンブリで出力してみて、どっちが効率的か見て見ればいいんじゃないかな

728 :デフォルトの名無しさん:04/09/11 01:18:50
おまえらなぁ最適化だの速度だのは標準Cと関係無いんだよ

729 :デフォルトの名無しさん:04/09/11 01:23:32
>>726
レジストリ・・・

730 :デフォルトの名無しさん:04/09/11 01:25:00
>>728
アルゴリズム

731 :デフォルトの名無しさん:04/09/11 01:25:16
レジストリじゃなくてレジスター。
Windowsに毒されているなぁ〜

732 :デフォルトの名無しさん:04/09/11 01:25:48
>>730
それが何か?

733 :デフォルトの名無しさん:04/09/11 01:27:04
>>732
あ?

734 :デフォルトの名無しさん:04/09/11 01:29:10
>>726
空きレジスタの数よりもネスト数が深いループからgotoで抜けるのと1段ずつbreakするのとどっちが早いと思う?

735 :デフォルトの名無しさん:04/09/11 01:45:27
そもそもそんなに深いネストが必要になるようなプログラムは
設計が悪いのではないのか

736 :デフォルトの名無しさん:04/09/11 02:13:34
>>731
毒されているというより、基礎知識があやふやなだけでは?

737 :デフォルトの名無しさん:04/09/11 02:16:52
>>735がいいこと言った!

738 :デフォルトの名無しさん:04/09/11 02:33:31
goto嫌ならreturnすれば良いじゃん。
そのネストの深い部分を関数にまとめて、returnにしちゃうの。
gotoは必要なし。

739 :デフォルトの名無しさん:04/09/11 02:35:35
>>738
そして、速度の低下を防ぐためにグローバル変数を使えば完璧だな。

740 :デフォルトの名無しさん:04/09/11 03:03:01
>>739
高速オナニーソース和えか?

741 :デフォルトの名無しさん:04/09/11 03:15:39
じゃ俺ループをインライン展開しようっと

742 :デフォルトの名無しさん:04/09/11 05:12:11
質問です。
Cのプログラムをコンパイルすると
scm.c:4 から include されたファイル中:
scm.h:1:2: 警告: null 文字は無視されました
scm.h:1:3: 無効なプリプロセスディレクティヴ #i
scm.h:1:4: 警告: null 文字は無視されました
scm.h:1:6: 警告: null 文字は無視されました
のような警告がヘッダファイルの全行にわたって出てくるんですが
この警告の意味がよくわかりません。
ソースにnull文字なんて入れた覚えはないんですが。。
どなたかご教示お願いします。

743 :デフォルトの名無しさん:04/09/11 05:48:21
>>742
自己解決しました。
文字コードがutf-8になってた。。orz

744 :デフォルトの名無しさん:04/09/11 09:01:42
>>735
空きレジスタが少ない状況なんてそこいら中にあるだろ
ネストが何段になったら設計が悪いのかが処理系ごとに異なるとでも言いたいのか?
そんなことより「最適化の阻害」という問題について何か言ったらどうなんだ

745 :デフォルトの名無しさん:04/09/11 11:35:45
ソケットで通信するプログラムを書いているのですが,
read(sock,buf,BUFSIZE);
とすると行単位でしか読み込みができません.複数行の受信データを読み出そうと
for(;;){
x = read(sock,buf,BUFSIZE);
if(x == -1 || x == 0) break;
strcpy(buf2[i][0],buf);
memset(buf,0,BUFSIZE);
i++;
}
とすると,2度目のreadでなぜかプログラムが停止してしまいます.
(つまり1行目しか読み出せません)
解決策は無いでしょうか...


746 :デフォルトの名無しさん:04/09/11 11:39:32
>>745
送信側の問題と予想してみる。
あたりだったら何か記念品をください。

747 :デフォルトの名無しさん:04/09/11 11:42:50
http://pc5.2ch.net/test/read.cgi/tech/1090385857/

748 :デフォルトの名無しさん:04/09/11 11:43:34
>>746
SMTPサーバ相手に通信しているのですが,telnetからアクセスして
EHLOした時の受信内容と,自分のプログラムからEHLOした時とで,比較しているので
送信側の問題ではなさそうな気がします.
220 hoge.hoge.hoge ESMTP
220-8BITMIME
・・・・・
220 ETRN
と帰ってくるのが最初の1行しか読み込めない状況です.

749 :デフォルトの名無しさん:04/09/11 11:55:43
printf("%d\n"),dとかと入力しても
50\nとしかでてこないんです。なんで?
Xcode1.1でやってます。OS10.3.5です。

750 :デフォルトの名無しさん:04/09/11 11:57:50
printf("%d\n"),d
でコンパイル通るの?

751 :デフォルトの名無しさん:04/09/11 12:08:39
>>750
後ろにセミコロンさえ付いていれば文法的には問題ない。

…つか、もうカンマ演算子なんか廃止すりゃあいいのに。

752 :749:04/09/11 12:14:33
入力したのは;もついてます。
でも実行結果だと50\nってでてくるんですよ。

753 :デフォルトの名無しさん:04/09/11 12:17:43
#include <stdio.h>
void main()
{
char buff[1000];
while(fgets(buff,sizeof(buff),stdin)!=NULL){
char name[1000];
int point;
if(sscanf(buff,"%s %d",name,&point)!=2)
break;
printf("%s %d\n",name,point);
}
}
というプログラムを実行すると"stdinは定義されていません"とエラーが
通知されるんですが、stdinはどのように定義すれば使えるようになるんでしょうか?
くだらない質問ですが宜しくお願いします。

754 :デフォルトの名無しさん:04/09/11 12:19:44
>>749
printf("%d\n", 51);

755 :デフォルトの名無しさん:04/09/11 12:22:53
Ultra-C Proを使って、ある計算プログラムを組んだのですが、
配列の大きさにNを定義し、(例えばA[N]のようにして)
Nを1000と置けば正常に動いてくれるのですが、
Nを1500とか2000と置くと全く関係なさそうなscanf文の「'&' の演算項が不当」
と出たり、「'fprintf' のファイルポインタ値が不当」というエラーが出ます。
また、Nを10000と置くと「配列のサイズが大き過ぎる」
Nを100000と置くと「配列のサイズが不当」というエラーが出ます。

これはUltra-C特有のものなのでしょうか?
見直すべき箇所がありましたら教えてください。

756 :デフォルトの名無しさん:04/09/11 12:32:42
int型の配列長を取得することはできますか?

757 :デフォルトの名無しさん:04/09/11 12:33:17
>>756
はい。できます。

758 :デフォルトの名無しさん:04/09/11 12:33:39
>>755
でかい配列をローカルに取らない。

759 :デフォルトの名無しさん:04/09/11 12:35:35
>>757
How can i do that?

760 :デフォルトの名無しさん:04/09/11 12:36:16
>>759
int i[100];
size_t s;
s = sizeof(i) / sizeof(int);

761 :デフォルトの名無しさん:04/09/11 12:42:10
>>760
すいません、ポインタで渡した先の関数では取れますか?

762 :デフォルトの名無しさん:04/09/11 12:46:11
>>761
取れません

763 :デフォルトの名無しさん:04/09/11 12:47:24
>>761
ですね、どうもです

764 :デフォルトの名無しさん:04/09/11 12:55:38
#include<stdio.h>
#define TYPE int
int main(){
printf("sizeof(TYPE)==%d\n",sizeof(TYPE));
}

sizeof(TYPE)==4
と表示されてしまします。これはどうしてでしょうか。
Cの文字列中はマクロ変換をしてくれないのでしょうか。

765 :デフォルトの名無しさん:04/09/11 12:56:48
たびたびすいません。
int配列に要素を追加するところで躓いてます。
mallocでlength+1を確保してるんですが、プログラム終了時に鰓はかれます。
ド素人が躓きそうな箇所を教えてください

766 :デフォルトの名無しさん:04/09/11 12:59:19
>>765
配列には要素を追加できません。

767 :デフォルトの名無しさん:04/09/11 12:59:47
>>765
っていうか、どんなソース書いてるか見せてくれる?

768 :デフォルトの名無しさん:04/09/11 13:00:20
>>764
そのとおり

769 :753:04/09/11 13:01:44
どなたか答えてください。
よろしくお願いします。

770 :デフォルトの名無しさん:04/09/11 13:03:41
>>768
ということは、プリプロセッサは、""で囲まれた場所とそうでない場所を
識別して、処理しているということですね。ありがとうございました。

771 :デフォルトの名無しさん:04/09/11 13:04:29
>>769
stdio.hの中で定義されてるはずなのにねぇ
なんでだろ
もしかして標準入力がない環境?

772 :753:04/09/11 13:08:52
>>771
おそらくあると思うんですが・・
でも、↑のプログラムで間違いはないって事ですよね。
とりあえず、それだけ知りたかったので有難うございました。

773 :765:04/09/11 13:14:40
>>767
素人コードですが・・・。
ダメだししてください

void main(void){
int *TestData,length=0;
length = AddNewCoefficient(TestData, length, 0x1222221); }
//配列に係数を挿入する
int AddNewCoefficient(int *Data, int length,int inData){
length=Add32Degree(Data, length);
*(Data+length-1)=inData; return length;}

int Add32Degree(int *Data, int length){
//無限ループすると落ちます。
//引数に現在の長さ(配列の要素数)を渡してください
//戻り値は作成した配列の長さ or FALSE
int i,*tmp;
tmp=(int*)malloc(sizeof(int)*length);
if(length>MAXDATASAFTY) return FALSE;
for(i=0; i<length; i++) tmp[i]=*(Data+i);
free(Data);
Data = (int *)malloc(sizeof(int)*(length+1));
for(i=0; i<length; i++) *(Data+i)=tmp[i];
return(length+1); }

774 :765:04/09/11 13:15:45
>>773
インデントされない欝

775 :デフォルトの名無しさん:04/09/11 13:25:12
>>773
reallocはお嫌い?

776 :デフォルトの名無しさん:04/09/11 13:29:36
>>773
気付いた点のみ。
・malloc()したあとにlengthを調べるより、malloc()する前に調べるべき。
・↑こうしてないので、returnの前にfree()が必要。
・正常系でもtmpがfree()されていない。
・ポインタを渡しても、ポインタを得ることはできない。
#void func(int)に整数値を渡しても整数値を得られないのと同様。
#int *を受け取りたいなら、void func(int **)としてやる。
・(どうせ受け取れてないから意味ないけど)Dataもfree()されてない。
・特にそう書きたい理由がないなら、*(Data+i)と書くよりData[i]と書くべき。
・戻り値がFALSEと配列の長さと区別できなくなる。
#FALSEが0である前提なら、素直に長さ0を返すべき。
・戻り値がFALSEだった場合に、書き込んではいけないところに書き込んでいる。

777 :デフォルトの名無しさん:04/09/11 13:31:09
>>773
if(length>MAXDATASAFTY) return FALSE;

tmp=(int*)malloc(sizeof(int)*length);
の前に置いてください

変数と演算子の間にはスペースを置いたほうが見やすいです

free(Data);
Data = (int *)malloc(sizeof(int)*(length+1));

realloc( Data, sizeof(int)*(length+1) );
で書き換えられます

778 :755:04/09/11 13:31:31
>>758
>でかい配列をローカルに取らない。

どうすればN=100000の配列が作れるようになりますか?

779 :デフォルトの名無しさん:04/09/11 13:37:15
>>778
staticにするか、グローバル変数にするか

780 :デフォルトの名無しさん:04/09/11 13:37:45
>>778
えとね、
配列っていうのはスタック領域に確保するものだから、大きさに制限がある。
確保できる大きさはかなり小さいです。
あなたのように大きな領域を使う場合はヒープ領域に確保しないとだめ。
int n[100000];
n[0] = 0;
じゃなくて、
int* n;
n = ( int* )malloc( 100000 * sizeof( int ) );
n[0] = 0;
.....(略
free( n ); //これを忘れてはいけない
としてください。

781 :デフォルトの名無しさん:04/09/11 13:42:05
>>773
int main(void) {
  int *TestData = NULL, length = 0;
  length = AddNewCoefficient(&TestData, length, 0x1222221);
  return 0;
}

int AddNewCoefficient(int **Data, int length, int inData) {
  int NewLength = Add32Degree(Data, length);
  if (NewLength > 1 && )
    (*Data)[length] = inData;
  return NewLength;
}

//戻り値は作成した配列の長さ or FALSE
int Add32Degree(int **Data, int length) {
  if (length > MAXDATASAFTY)
    return 0;
  *Data = realloc(*Data, sizeof (int) * (length + 1));
  return length + 1;
}

782 :デフォルトの名無しさん:04/09/11 13:44:30
C限定かというとそうでもないのですがCで作っているのでこちらで質問します。

1つの.cファイルのヘッダファイルはどのくらい必要でしょうか?
やはりそのファイルの関数を呼び出している分+自分の分でしょうか?
それとも、他ファイル分+自分の分だけでいいのでしょうか?



783 :765:04/09/11 13:44:46
>>775,>>776,>>777,>>781
わざわざすいません、いま試して(+google)みてます

784 :デフォルトの名無しさん:04/09/11 13:45:29
>>782
同じファイルを使いまわせばいいんじゃない?

785 :デフォルトの名無しさん:04/09/11 13:47:58
>>782
他のファイルから参照したい関数だけでよい。

786 :781:04/09/11 13:56:22
>>783
AddNewCoefficientのif (NewLength > 1 && )はif (NewLength > 1 && Data != NULL)の間違いだった。

787 :765:04/09/11 14:17:46
realloc知りました。
*Data = (int *)realloc(*Data, sizeof (int) * (length + 1));
どうしてもここで引っかかってしまいます。


788 :デフォルトの名無しさん:04/09/11 14:19:04
>>787
なにが?

789 :765:04/09/11 14:24:27
>>788
.NET2003(?)のVC++でのデバッグ実行中のエラーです。
//test.exe の 0x00417c52 で初回の例外が発生しました : 0xC0000005: 場所 0xccccccc8 を読み込み中にアクセス違反が発生しました。 。
//test.exe の 0x00417c52 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0xccccccc8 を読み込み中にアクセス違反が発生しました。 。

gcc ver.2.95では通りました。

790 :デフォルトの名無しさん:04/09/11 14:39:05
>>789
reallocのところにブレークポイントかけて、引数をチェックするとか。

791 :765:04/09/11 14:57:42
>>789
チェックしていましたが、問題が(見当たりませんでした||見つけられませんでした)。
自己で理解できなかったので、配列をconstで確保、迂回策とします。
realloc、常識を投げてくださった諸先輩方ありがとうございました。
gccで通るので、一人で吊ってきます。

#VC++ and Windowsやっぱりよくわかりません

792 :デフォルトの名無しさん:04/09/11 15:11:01
>>791
ところでint *TestData = NULLをint *TestData = malloc(1)にしてみるとどうなる?

793 :デフォルトの名無しさん:04/09/11 15:25:29
おい
mallocとfreeには致命的欠陥がある
newとdeleteを使えおまえら

794 :デフォルトの名無しさん:04/09/11 15:26:37
>>793
致命的欠陥があるのは貴様の脳ではないのか

795 :デフォルトの名無しさん:04/09/11 15:28:12
>>794
(  ゚,_ゝ゚)バカジャネーノ

796 :デフォルトの名無しさん:04/09/11 15:32:11
>>793
こう?
void *new(size_t s) {
 return calloc(1, s);
}

void delete(void *p) {
 return realloc(p, NULL);
}

797 :デフォルトの名無しさん:04/09/11 15:36:19
>>796
ねえ、それで面白いと思ってるの?

798 :デフォルトの名無しさん:04/09/11 15:37:03
#define new malloc
#define delete free

799 :デフォルトの名無しさん:04/09/11 15:38:03
#define new scanf
#define delete printf

800 :デフォルトの名無しさん:04/09/11 15:39:44
まぁmallocとfreeの致命的欠陥には
頭が相当良くないと気付けないから
おまいらには理解不能だろうよ

801 :デフォルトの名無しさん:04/09/11 15:40:37
>>800
おまえにしか理解不能
つまらんから直ちに消えろ

802 :デフォルトの名無しさん:04/09/11 15:43:38
Cスレ

803 :デフォルトの名無しさん:04/09/11 15:44:15
>>801
はいはい
malloc/freeでプーなコードでも
書いといてください

804 :デフォルトの名無しさん:04/09/11 15:45:42
>>803
致命的欠陥があるのは貴様の脳ではないのか

805 :デフォルトの名無しさん:04/09/11 15:46:16
>>804
同意。

806 :デフォルトの名無しさん:04/09/11 15:46:20
>>804
わからないからって
すぐそうやってごまかすw

807 :デフォルトの名無しさん:04/09/11 15:47:04
またC++スレの住人が荒らしに来たか

808 :デフォルトの名無しさん:04/09/11 15:54:11
もしかして本気でC++スレと勘違いしていたんじゃ・・・

809 :デフォルトの名無しさん:04/09/11 15:54:55
C++スレ住人はあほですか?

810 :デフォルトの名無しさん:04/09/11 15:55:56
失礼な。ヤツがあほなだけだ

811 :デフォルトの名無しさん:04/09/11 15:56:42
じゃあ何が致命的欠陥か教えてやるよ

812 :デフォルトの名無しさん:04/09/11 16:00:24
So, I'll tell you what the fatal flaw is !

813 :デフォルトの名無しさん:04/09/11 16:05:08
newとdeleteが致命的欠陥を抱えてるのは無視ですか?

814 :デフォルトの名無しさん:04/09/11 16:13:34
未使用領域は双方向リストで管理されてるんだよ
で、mallocで確保した領域をfreeするとその領域が未使用領域のリストに挿入される

ここでもしその領域の前後も未使用領域だった場合,
未使用領域がひとつの大きな未使用領域としてマージされる
その時に未使用領域を管理する双方向リストのつなぎ変えが起こる

これでどうなるかと未使用領域をつなぐポインタとして
前の未使用領域へのポインタをfd,後の未使用領域へのポインタをbkとすると
fd->bk = bk; と bk->fd = fd; という風にポインタがつなぎ変わる

で,なんとこのfdとbkのポインタ領域ってmallocしたときに
確保した領域と一緒にユーザに割り当てられちゃう
これが超やばい,致命的仕様,セキュリティホール満載
リストの管理領域まで一緒に割り当てちゃうってどんな仕様だよ

頭の回転が速いやつには
あんなことやこんなことができてしまう(((( ´,,_ゝ`)))) ププッ プルプルッ

ってこった

815 :デフォルトの名無しさん:04/09/11 16:16:00
>>814
へーそうなんだ
御前頭悪いな

816 :デフォルトの名無しさん:04/09/11 16:17:18
long long x;
int y;

x = 1000 * 2;
y = 1000 / 2;

printf("%d %d\n", x, y);

とやると
200 0
と表示され、y = 0x1000 / 0x2の効果が表れません。
しかし、

x = 1000 * 2;
y = 1000 / 2;
printf("%d ", x);
printf("%d\n", y);

と一回づつ表示するとちゃんと
2000 500
となるんですが、これはどういう違いなんですか?

817 :デフォルトの名無しさん:04/09/11 16:18:03
>>814
救いようが無い馬鹿だな
お前のところのmalloc/freeの実装なんて興味ないんだよ

818 :デフォルトの名無しさん:04/09/11 16:18:09
>>814
とくに問題ないんじゃない?
別のプロセスが同一空間にアクセスしてこれるならどうかわからんけど。

819 :デフォルトの名無しさん:04/09/11 16:19:17
>>816
longlongを%dで出してるから。

820 :816:04/09/11 16:19:19
ごめん、おれがばかだった。

821 :デフォルトの名無しさん:04/09/11 16:19:58
>>816
%dはint用。
longなら%ld
long longなら%lld

822 :821:04/09/11 16:21:08
ああ、それとは関係ないか

823 :デフォルトの名無しさん:04/09/11 16:24:05
>>817
かなり一般的な実装(  ゚,_ゝ゚)

>>818
これが場合によってはかなりの問題
実はこれをどう利用するかが
一番頭をひねるところなんだけどね

ただこれは自分で気付くしかないね
このスレだけではとても説明しきれないから

824 :816:04/09/11 16:25:38
たしかにprintf("%lld %d", x, y)だとうまくいきますね。

ただ、2回目(別々に表示)だとうまくいくのかという疑問がムクムクと。。。
printf()内部の話なのかな?

825 :デフォルトの名無しさん:04/09/11 16:27:02
>>823
それは、プロセス空間が分かれていても問題が起こるってこと?

826 :デフォルトの名無しさん:04/09/11 16:30:33
>>824
たとえばリトルエンディアンでLonglongの1とIntの2を送ると16進で
0100000000000000 02000000
となり、表示で両方Intと勘違いして
01000000 00000000(以下無視) 02000000
とされ、1 0という表示となる
(かなり用語や数を間違ってるかもしれん)


827 :755:04/09/11 16:32:19
>>780
>配列っていうのはスタック領域に確保するものだから、大きさに制限がある。
>確保できる大きさはかなり小さいです。
>あなたのように大きな領域を使う場合はヒープ領域に確保しないとだめ。
>int n[100000];
>n[0] = 0;
>じゃなくて、
>int* n;
>n = ( int* )malloc( 100000 * sizeof( int ) );
>n[0] = 0;
>.....(略
>free( n ); //これを忘れてはいけない

これをそのまま入れたら他の行のintが構文エラーしました。
何をどうすればいいのかサッパリ分かりません・・・。

828 :デフォルトの名無しさん:04/09/11 16:33:40
>>825
起こるというか起こす
別プロセスは関係ない
mallocで確保した領域を
少し工夫してfreeすれば起こせる

829 :デフォルトの名無しさん:04/09/11 16:35:07
やっぱ池沼か
そんなことできる権限あったらなんでも出来るわ

830 :デフォルトの名無しさん:04/09/11 16:35:56
酷いOSを使っているんだな

831 :816:04/09/11 16:38:36
>>826
ちょっとよく分からない単語も混じってますけど、説明ありがとうございます!
分からない単語の意味は調べてちゃんと理解したいと思います。

832 :デフォルトの名無しさん:04/09/11 16:38:51
>>814
new/deleteを使えば解決するようには読めないけど?

833 :デフォルトの名無しさん:04/09/11 16:41:31
OS板の貴公子が作っているあれなら起こりうる

834 :デフォルトの名無しさん:04/09/11 16:45:20
「リトルエンディアン」「ビッグエンディアン」の
リトル、ビッグってのは、何に対してリトル、ビッグなの?

835 :デフォルトの名無しさん:04/09/11 16:46:27
>>829
自分が理解不能だとすぐ池沼か( ´゚,_」゚)ヒッシダナ
このいつまでも塞がれることのない
本当のfreeセキュリティーホールで
ハックしまくり(((( ´,,_ゝ`)))) ププッ プルプルッ

>>830
犬やフリビが酷いって(´ν_.` )

>>832
実はnew/deleteで解決されるかはまだ検討していない( ´_ゝ`)

836 :デフォルトの名無しさん:04/09/11 16:46:30
相対的なリトル・ビッグだろ。

837 :デフォルトの名無しさん:04/09/11 16:47:00
たまご

838 :デフォルトの名無しさん:04/09/11 16:47:23
Little Endian
Regular Endian
Big Endian

839 :デフォルトの名無しさん:04/09/11 16:50:34
>>814
ユーザ空間なんだから安心だろ。

840 :デフォルトの名無しさん:04/09/11 16:52:35
リトルエンディアンにとって、ビッグエンディアンは
何がビッグ?

841 :デフォルトの名無しさん:04/09/11 16:54:44
>>840
下位バイトに対して上位バイトだからビッグ

842 :デフォルトの名無しさん:04/09/11 16:54:47
直径。

843 :デフォルトの名無しさん:04/09/11 16:54:57
>>840
調べろよ、それくらい。基本だろ

844 :デフォルトの名無しさん:04/09/11 16:55:14
ENDが
相対的ではないと思う。

845 :デフォルトの名無しさん:04/09/11 16:55:40
小さなインディアンと大きなインディアン

846 :デフォルトの名無しさん:04/09/11 16:57:40
>>827
だから宣言はint* n;でしょ。
メモリを確保するのがmalloc使ってる部分でしょ。
メモリを開放するのがfree使ってる部分でしょ。

例えば、
int main( void ) {
int a;
int b;
int* n;
int c;

n = ( int* )malloc( 100000 * sizeof( int ) );

//〜いろんな処理〜

free( n ); //最後に必ず

return 0;
}

みたいにする。

847 :デフォルトの名無しさん:04/09/11 16:59:46
つまり下位バイト=リトル、上位バイト=ビッグ
なのですね。リトルエンディアンは、小さい桁が下位バイトに
収められるからリトルエンディアン、小さい桁が上位バイトに
収められるからビッグエンディアン、で合ってますか?

848 :デフォルトの名無しさん:04/09/11 17:01:22
>>847
小さい桁ってのがよくわからんが
リトルエンディアンは下位アドレスに下位バイトが配置され
ビッグエンディアンは下位アドレスに上位バイトが配置される

849 :デフォルトの名無しさん:04/09/11 17:02:37
ぐぐれば一発じゃないのか?カスかてめーは
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3+%E3%83%93%E3%83%83%E3%82%B0%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=

850 :デフォルトの名無しさん:04/09/11 17:03:39
基本情報試験にでも出てくるようなレベルの話はもういいよ

851 :デフォルトの名無しさん:04/09/11 17:06:37
配置は分かるんですが、エンディアンとう語の語感と、実際の
物理的な配置とが食い違ってるように感じたので、何がどう
リトルで、どうビッグなのかが知りたかったのです。

852 :デフォルトの名無しさん:04/09/11 17:09:24
例えば1次元配列で
void hogehoge(double a[], int m){
int i;
for(i=0;i<m;i++){
a[i] = i;
}
}
という文法はOKなのに、2次元配列で
void hogehoge2(double a[][], int n, int m){
:
:
}
という書き方すると怒られるのは何故ですか?

853 :デフォルトの名無しさん:04/09/11 17:11:44
配列の要素数省略できるのは最初だけ

854 :デフォルトの名無しさん:04/09/11 17:12:02
http://yougo.ascii24.com/gh/00/000012.html
> Endianという呼び方は、
> もともとはガリバー旅行記に出てくる、
> ゆで卵をどちらの端の方から最初に割るか
> という議論に由来している。
結構知られている話と思われ。

855 :デフォルトの名無しさん:04/09/11 17:15:37
>>853
では要素数が不確定な場合は動的に配列を確保するしかないのでしょうか?

856 :デフォルトの名無しさん:04/09/11 17:16:32
なるほど、Endian はつまり「から最初に」と考えれば
いいわけですね。
リトルエンディアン=下位バイトから最初に〜
ビッグエンディアン=上位バイトから最初に〜
となるわけですか。ありがとうございます。

857 :デフォルトの名無しさん:04/09/11 17:18:53
>>855
そりゃ当然でしょうああた

858 :デフォルトの名無しさん:04/09/11 17:23:08
当然ですか。あー、動的配列は重いからいやだのー。

859 :デフォルトの名無しさん:04/09/11 17:24:46
>>855
要素数が不確定といっても色々で、配列という選択自体が不適切な場合もよくある。

860 :デフォルトの名無しさん:04/09/11 17:24:50
動的配列重いのか?初めて聞いたヨ〜ン

861 :デフォルトの名無しさん:04/09/11 17:24:54
それが嫌ならMB単位で予め確保しとけ

862 :デフォルトの名無しさん:04/09/11 17:28:17
>>859
数値計算で2次元とか3次元計算してるんですけど、それを可視化する関数に渡す時、
どうしても配列と言う形で渡さねばならんのですよ。

>>860
動的に確保してそれを解放してってのを300msに一度程度やると糞重くなりました。
何かいい方法ありませんか?

863 :デフォルトの名無しさん:04/09/11 17:29:43
>>862 >>861
スピード気にするなら malloc free 使わず自分で記憶管理

864 :デフォルトの名無しさん:04/09/11 17:30:04
>>861
スタックには数MBも確保できません

865 :デフォルトの名無しさん:04/09/11 17:30:17
それほど頻繁に必要なら、あらかじめ大きめに取って置くほうがいいんじゃない?

866 :デフォルトの名無しさん:04/09/11 17:31:54
なんでスタックが出てくるのだ

867 :デフォルトの名無しさん:04/09/11 17:35:08
>>864
(方法1)スタックサイズ増やせ
(方法2)staticでヒープ領域に作っとけ


868 :デフォルトの名無しさん:04/09/11 17:46:05
>糞重くなりました
たくさん出したのね。

869 :デフォルトの名無しさん:04/09/11 17:47:17
>>828
>別プロセスは関係ない
DOS または Classic Mac OS の話じゃないかと思われます。

870 :デフォルトの名無しさん:04/09/11 17:47:54
関数のサイズってどうやったらわかりますか?
int test()
{
//55 push ebp
//8B EC mov ebp,esp
return 1;
//B8 01 00 00 00 mov eax,1
}
//5D pop ebp
//C3 ret

こういうのがあったときtestのサイズが10ってのを
命令数を数えなくても知りたいのですが

871 :デフォルトの名無しさん:04/09/11 17:50:21
>>862
その数値計算とやらの内容を知らないので何とも言いようがないが、
例えば色々なサイズの行列が出てきて、それら個々は計算中にサイズが変わったりしない、
のようなことであれば、
struct gyouretu_type { int gyou, retu; };
struct gyouretu_obj { struct gyouretu_type *type; double *a; }; みたいな構造体で管理すればいいし、
素因数分解のような話であればリストにする手もあるだろ。リストのリストは俺もよく使う。

872 :デフォルトの名無しさん:04/09/11 17:53:36
リークさせれば診断ダンプするよw

873 :デフォルトの名無しさん:04/09/11 17:53:57
>>870
君の言う「サイズ」の定義は?
一般にサイズとは領域の開始番地と終了番地の差に1を加えた値で、
領域とは連続した区間のことを言う。
関数が占有する領域は1つという保証がない。
そこで君は「サイズ」に独自の定義を与える必要が出るわけだが・・・

874 :デフォルトの名無しさん:04/09/11 17:59:49
おまいらすごいな

875 :デフォルトの名無しさん:04/09/11 18:03:06
>>874
えへん

876 :デフォルトの名無しさん:04/09/11 18:20:14
>>862
void hogehoge2(double a[], int n, int m)
としてnとmからaの位置を自分で計算すればいい。

877 :デフォルトの名無しさん:04/09/11 18:24:36
>>862
OS・ライブラリのオーバヘッドが問題になるのなら、
自分で管理すれば?

878 :デフォルトの名無しさん:04/09/11 20:11:06

( ´゚,_」゚)(((( ´,,_ゝ`))))(´ν_.` )
        
   笑う角には福きたる!


879 :デフォルトの名無しさん:04/09/11 20:21:54
signal関数について質問です.
サーバプログラムで
signal(SIGCLD,Catch);
として,void Catch(){}に子が死んだときの処理を書いたのですが,
コンパイルエラーが出て,invalid conversion from void(*)() to void(*)(int)となりました.
その後signalのプロトタイプはvoid (*signal(int sig, void (*func)(int)))(int);
ということを知ってvoid Catch()をvoid Catch(int x){}としたのですが,xには
一体何がわたったのでしょうか...これだとコンパイルが正常にできるのですが,
何を渡したのかわからないので不安です.

880 :デフォルトの名無しさん:04/09/11 20:28:33
そりゃ、引数にした値が渡されるんでしょ。

881 :デフォルトの名無しさん:04/09/11 20:29:38
>>879
エラーだったらコンパイルできないと思うがなぁ
あと、簡単な英語なんだから辞書片手でもメッセージ読んだほうが
void Catch(int hoge){

882 :デフォルトの名無しさん:04/09/11 20:30:57
>>881
あ、後半読んでなかった
まあ辞書片手に(ry

883 :デフォルトの名無しさん:04/09/11 20:37:20
>>880
Catchはfork()された子プロセスが死んだときに呼び出されるわけで,
プログラム中でCatch(hoge);のように呼び出すわけではないのですが

884 :デフォルトの名無しさん:04/09/11 20:39:51
>>883
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/signal.2.html
100回音読してくれ

885 :755:04/09/11 20:42:07
>>846
ごめんなさい、本当にわからなくて。

例えば、配列の名前を「Array」配列の大きさをNとしてN=100000としたいなら、

int main()
{
int*N;
N=(int*)malloc(100000*sizeof(int));

〜Array[N]を使った処理〜
free(N);
}

ということでいいのでしょうか?

886 :デフォルトの名無しさん:04/09/11 20:43:57
>>885
オウム返しの返答しないように
試せばわかる事を聞き返さない

887 :デフォルトの名無しさん:04/09/11 20:46:39
>>885
おしい

int main()
{
int *Array;
Array = (int*)malloc(100000 * sizeof(int));

〜Array[N]を使った処理〜
free(Array);
}


888 :755:04/09/11 21:16:53
>>887
100000個の配列をちゃんと作っているか確認するために
下のような適当なプログラムを組んでみました。
ところが、i=2506の処理が終わった後、
「行番号 13: '=' の左辺値オペランドが不当」
というエラーが出ました。
どうしたら修正できるのでしょうか?

#include<stdio.h>
#include<stdlib.h>
#define N 100000

int main()
{
int i;
int*Array;
Array=(int*)malloc(N*sizeof(int));

for(i=0;i<N;i++)
{
Array[i]=i;
printf("Array[%d]=%d\n",i,Array[i]);
}

free(Array);
}

889 :デフォルトの名無しさん:04/09/11 21:23:49
>>888
実はmalloc に失敗していたとか

890 :デフォルトの名無しさん:04/09/11 21:25:13
>>889
翻訳中に表示された診断メッセージのように見えるが・・・

891 :デフォルトの名無しさん:04/09/11 21:27:12
>>888
当方の環境では、エラーでないで完走するんだが・・・

892 :デフォルトの名無しさん:04/09/11 21:29:48
うちも問題無いなあ
Ultra-C Proがヘンなんじゃない?

893 :デフォルトの名無しさん:04/09/11 21:32:06
>>888
じゃ、これは?

#include<stdio.h>
#include<stdlib.h>
#define N 100000
int Array[N];

int main(void){
   int i;
   for(i = 0; i<N; i++)
   {
      Array[i] = i;
      printf("Array[%d]=%d\n", i, Array[i]);
   }
}


894 :デフォルトの名無しさん:04/09/11 21:34:22
Ultra-C Pro
http://softplaza.biglobe.ne.jp/shop/sboat/ultracpro/

895 :デフォルトの名無しさん:04/09/11 21:35:33
Ultra-C Proって勉強用のインタプリタだったんだね


896 :755:04/09/11 21:44:28
>>891
>>892
ソフトは何を使っていますか?

>>893
それだと、
行番号 4: 配列のサイズが不当
行番号 10: 'Array' が未定義
というエラーがでました。

897 :891:04/09/11 21:47:07
>>896
VC2003
なんかウルトラマンの限界かなぁ・・・?

898 :デフォルトの名無しさん:04/09/11 21:49:05
>>896
そんな変なインタプリタじゃなくて、普通のコンパイラを使うことをお勧めする。

899 :デフォルトの名無しさん:04/09/11 21:49:19
>>896
Borland C++
>行番号 4: 配列のサイズが不当
てことはSuper-C Proでも使うしかないね

900 :デフォルトの名無しさん:04/09/11 21:52:09
>>896
> 行番号 4: 配列のサイズが不当
> 行番号 10: 'Array' が未定義

それは想像できるエラーだね。
だって100000は大きすぎるもん

891 892では無いけど、処理系はGCCかVC++だよ。前者はPC-UNIX系(Linuxなど)、
後者はWindows、でデファクトスタンダードですよ。

901 :デフォルトの名無しさん:04/09/11 21:52:49
Intel C++ Compilerおすすめ

902 :デフォルトの名無しさん:04/09/11 22:16:56
>>900
処理系にもよるが、400KBは「たかが」だったり・・・

903 :755:04/09/11 22:30:14
皆さんたくさんのご意見有難うございます。

>>900
「int *Array;
Array = (int*)malloc(100000 * sizeof(int));
free(Array);

をっていないから、Ultra-Cでは配列が大きすぎるという事になってしまうのですね。

今更なんですけど、作ることのできる配列のサイズってコンパイラの種類とかで
違うんですか?
VisualC++6.0(ここで言っているVCでしょうか)だとうまくいったりするのですか?


904 :デフォルトの名無しさん:04/09/11 22:33:15
windows+cygwin+gcc強いぞ

905 :デフォルトの名無しさん:04/09/11 22:35:43
>>903
をっていないから?いみふめ
質問に答えると、そうです。

906 :デフォルトの名無しさん:04/09/11 22:36:22
普通のコンパイラだったらスタック領域のサイズは指定できるよ

907 :デフォルトの名無しさん:04/09/11 22:38:12
相手がCインタプリタだしなぁ

908 :デフォルトの名無しさん:04/09/11 22:40:53
>>893の場合はスタック領域じゃないし…。

909 :755:04/09/11 22:47:43
>>905
「をっていないから」→「を使っていないから」でした・・・。

910 :デフォルトの名無しさん:04/09/12 01:12:24
メモリ確保なんだから環境依存(含むコンパイラ)が教科書的回答

実際は400Kぐらいならwinのまともな「コンパイラ」ならなんでもいける
だろ

911 :デフォルトの名無しさん:04/09/12 01:15:04
スモールモデルなんて言葉もあったものだ

912 :デフォルトの名無しさん:04/09/12 01:16:25
物理メモリの利用可能領域が24MBていふぉしか

913 :デフォルトの名無しさん:04/09/12 02:07:24
コンピュータ演習か。

914 :デフォルトの名無しさん:04/09/12 14:29:51


915 :デフォルトの名無しさん:04/09/12 15:11:37
C言語のprintf関数ののソースとか見てみたいのですが
どこかにないでしょうか?

916 :デフォルトの名無しさん:04/09/12 15:12:54
>>915
あるよ、うちのLinuxには。

917 :デフォルトの名無しさん:04/09/12 15:20:57
>>916
マジッスか
どっかにUPしてもらえませんか

918 :デフォルトの名無しさん:04/09/12 15:29:13
UPもなにも…フリーだし…

919 :デフォルトの名無しさん:04/09/12 15:31:01
せこせこするな。UPしてやれよw

920 :デフォルトの名無しさん:04/09/12 15:31:47
>>918
たった一つの関数のソース見るためだけに
わざわざOS落としてきたりはキツイっす

921 :デフォルトの名無しさん:04/09/12 15:34:18
>>920
あっそう。

922 :デフォルトの名無しさん:04/09/12 15:37:07
>>920
で、お次は
「たった一つの関数を理解するために
何千行ものコードを読むのはキツイっす」
か?


923 :デフォルトの名無しさん:04/09/12 15:44:02
>>922
それはないっす

924 :デフォルトの名無しさん:04/09/12 15:46:30
http://openbsd.secsup.org/src/lib/libc/

925 :デフォルトの名無しさん:04/09/12 16:11:32
>>924
かなり参考になります
どうもっす

926 :デフォルトの名無しさん:04/09/12 16:14:43
VCとかBCBとかにはちゃんと付いてきているはずなんだがな。

927 :デフォルトの名無しさん:04/09/13 22:15:13
>>926
あっそう。

928 :デフォルトの名無しさん:04/09/14 00:13:59
文字列⇒整数変換をしたいのですが、
標準関数の atoi() を使うと 0 がエラー扱いになってしまいます。
この制限を解決するスマートな方法はないでしょうか?

929 :デフォルトの名無しさん:04/09/14 00:20:38
strtol使うとか。

930 :デフォルトの名無しさん:04/09/14 00:21:05
>>928
if(sscanf(mojiretsu, "%d", &seisuu) != 1) goto hell;

931 :デフォルトの名無しさん:04/09/14 00:23:14
sscanfよりstrtolのほうがいいよな。

932 :デフォルトの名無しさん:04/09/14 00:24:14
評価基準を示さずに結論だけ言うDQNは放置

933 :デフォルトの名無しさん:04/09/14 00:30:40
930にはなぜsscanfを使うか理由が書いてないな。

934 :デフォルトの名無しさん:04/09/14 00:35:55
>>929
strtol() もエラー値が 0 なのでだめそうです。

>>930
sscanf() なら 0 が入力されてもエラー値と混同しないですね。
ありがとうございます。


935 :デフォルトの名無しさん:04/09/14 00:37:25
どうやら質問者の方が頭よさそうだなw

936 :デフォルトの名無しさん:04/09/14 00:43:02
>>934
もう少し身長にマニュアルを読んだほうがいいよ。

937 :デフォルトの名無しさん:04/09/14 00:45:02
935の頭は質問者と同レベル。

938 :デフォルトの名無しさん:04/09/14 00:45:15
>>934
はぁ…

939 :デフォルトの名無しさん:04/09/14 00:46:07
>>934
エラーかどうかを戻り値で判断すると思い込むのは危険だな。

940 :デフォルトの名無しさん:04/09/14 00:46:55
標準出力とファイル出力を選択できる機能はどうやれば出来ますか?

941 :デフォルトの名無しさん:04/09/14 00:47:26
>標準関数の atoi() を使うと 0 がエラー扱い
もうちょっとちゃんと言え。
>strtol() もエラー値が 0 なのでだめそうです。
もうちょっとちゃんと読め。

942 :デフォルトの名無しさん:04/09/14 00:47:41
>>939
オレも初めて数ヶ月は戻り値が全てと思ってたよ・・・

943 :デフォルトの名無しさん:04/09/14 00:48:40
>>940
どうやって選択するの?

944 :デフォルトの名無しさん:04/09/14 00:49:07
>>940
fprintfやfputsなどの引数を変えればいいのでは?

945 :デフォルトの名無しさん:04/09/14 00:49:13
dup()dup2()

946 :デフォルトの名無しさん:04/09/14 00:49:32
pipe()

947 :デフォルトの名無しさん:04/09/14 00:51:20
>>943
そこで悩んでます。if文とかでも出来そうかなとは思うんですがイマイチわからなくて

948 :デフォルトの名無しさん:04/09/14 00:52:13
write(1, ...);
write(2, ...);
でいいんじゃねw


949 :デフォルトの名無しさん:04/09/14 00:52:37
>>947
コマンドライン引数でファイル名が指定されていればファイルに、指定されていなければ標準出力に書き出すとか。
argc,argv(main関数の引数)の使い方はわかる?

950 :デフォルトの名無しさん:04/09/14 00:54:35
>>949
すいませんわかりません…

951 :デフォルトの名無しさん:04/09/14 00:54:42
if(/*標準出力なら*/)
  fp = stdout;
else
  fp = fopen("hoge.txt", "w");

fprintf(fp, "Hello");

952 :デフォルトの名無しさん:04/09/14 00:58:48
>>950
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
if(argc<=1)
fp=stdout;
else
fp=fopen(argv[1],"w");
if(fp==NULL)
return 1;
fprintf(fp,"はろーわーるど\n");
if(argc>1)
fclose(fp);
return 0;
}

コンパイルしてできた実行ファイルがtestonなら、
testonで標準出力に、teston file.txtならfile.txtに書き出す。

953 :デフォルトの名無しさん:04/09/14 00:59:33
>>951
あ、出来そうですね。ありがとうございます

954 :デフォルトの名無しさん:04/09/14 01:00:54
>>952
神様ありがとう!感謝します。

955 :デフォルトの名無しさん:04/09/14 01:01:47
>>941
よく読んでみました。
strtol() の返り値が 0 の場合、第2引数が数値かどうかを判断すればいいわけですね。

long value = strtol(numStr, &endptr, 10);
if (value == 0 && (*endptr != '\0')) goto ERROR;

こんな感じでしょうか・・・。

956 :デフォルトの名無しさん:04/09/14 01:04:36
>>955
数字列のあとの空白("-387 "←こういうの)を許さないならそれでいい。

957 :956:04/09/14 01:05:27
例がまずかったな
"0 "

958 :デフォルトの名無しさん:04/09/14 01:11:34
>>957
アドバイスありがとうございます。
stdinから入力されたCSV形式の数値解析をしたかったんですが、
sscanf(), strtol() どちらでも実現できそうですので、
もう少し考えてみてよりシンプルな処理になる方を使ってみます。

959 :デフォルトの名無しさん:04/09/14 01:39:02
>>958
まだ、いまいち分かってないっぽいな。
どうでもいいけど。

960 :デフォルトの名無しさん:04/09/14 03:01:39
現在あるデータをC言語を使って処理するプログラムを作り、
それがほぼ終わりました。この課題を通してやっと初級の入り口に
立てて、プログラミングの面白さが分かった気がします。
本業ではないですが、プログラミングを続けてレベルアップしたいと
思っています。しかし、次のデータとか、特に課題が見つかりません。

何か面白い課題はないのでしょうか。
恐らくこのままではプログラマーでもない私は今やっているような
面白い課題に自然に巡り合うことは今後もうないと思います。

面白いデータや課題があれば、教えてください。
よろしくお願いします。

961 :デフォルトの名無しさん:04/09/14 03:14:16
オレが学生のころは、ゲーム作ったり、テキストエディタを作ったり、
お絵かきツールを作ったり、言語のインタプリタを作ったり、いろいろしてた。

作るといっても、書籍のソースを打ち込んで、改造したりってのがほとんどだったけど。


962 :デフォルトの名無しさん:04/09/14 03:28:09
>>961
どうもありがとうございます。
ツールという課題がありますね(思いつきもしませんでした・・
自分が使いたいと思うツールを作って使うのは面白そう。



963 :デフォルトの名無しさん:04/09/14 03:39:50
>>962
このスレでも宿題スレでもいいからテンプレリンク含め目を通せばいいよ

964 :ビル・ジョブス:04/09/14 04:41:03
>962
次はWin32APIを勉強するとかデバイス制御を勉強するのがお奨めです。
コンピュータ言語なんて単なる表現ツールですよ。
(C言語は他の言語に比べてかなり洗練されてるから止められないけど)

965 :デフォルトの名無しさん:04/09/14 10:16:52
>>939
つーか「エラー値」と聞いて何かを早合点している時点でアウツ

966 :デフォルトの名無しさん:04/09/14 11:51:25
>>964
C++だとさらに洗練されてるから
より止められないけど

967 :デフォルトの名無しさん:04/09/14 14:40:03
おはよう (ノ゚Д゚)おはよう
おやすみ  (つ∀-)オヤスミー
こんにちわ ( ゚∀゚)ノィョ―ゥ

という感じのテキストデータが列挙されているテキストファイル
を読み込んで、指定した文字数以上の顔文字を削除するプログラムを
組みたいのですが、どうすればいいですか。

968 :デフォルトの名無しさん:04/09/14 15:09:49
ある32ビットの型に対して、32ビット(or more)のビットシフトを行うと、すべてゼロになることを期待していたのですが、
結果は、シフトする数の32の剰余をシフトしたもになります。
これは仕様でしょうか・・・。


969 :デフォルトの名無しさん:04/09/14 15:18:23
>>967
まず、テーブルをどこに持つか、だ。
実行ファイルに埋め込むのか、それとも(ry

あと、そのAAげとズザザ━━━━⊂(゚Д゚⊂⌒`つ≡≡≡━━━━!!

970 :デフォルトの名無しさん:04/09/14 15:26:41
>>968
IA-32アーキテクチャだと、シフトする数の下位5bitのみが有効なんでそんな感じ。
Cの仕様としてどう決ってるのかは知らない。

971 :デフォルトの名無しさん:04/09/14 15:52:37
>>970
なるほど、サイズについてマスクかけてるんですね。
あふれたらすべてゼロにしたい場合には条件判断しかないですか?

972 :967:04/09/14 16:05:45
>>969
テーブルはテキストファイルから読み込みますです。

973 :デフォルトの名無しさん:04/09/14 16:08:21
>>971
1ビットシフトを繰り返すという方法も考えられるけど、
条件判断入れたほうが速いな。

974 :デフォルトの名無しさん:04/09/14 16:11:25
>>972
あとは哀愁のstrtok()でも使えばよろしいんじゃありませんか、

975 :デフォルトの名無しさん:04/09/14 16:13:55
>>968
unsigned __int64にキャストしてみるといいかもしれない。

976 :デフォルトの名無しさん:04/09/14 17:35:53
>>975
int -> int64 -> intの二段階キャスト?それって効率わるくない?

977 :デフォルトの名無しさん:04/09/14 17:38:41
効率の問題なのか?

978 :デフォルトの名無しさん:04/09/14 19:14:08
>>977
効率が悪いって事は、かっこ悪いコードになり得る悪寒

979 :デフォルトの名無しさん:04/09/14 19:17:12
>>978
キャストするよりシフト繰り返しのほうが効率が良くてかっこいいんだ!
と言いたいんだね

980 :デフォルトの名無しさん:04/09/14 19:21:46
(´-`).。oO( なんで低級言語自慢だろう… )

981 :デフォルトの名無しさん:04/09/14 19:42:59
(´-`).。oO( 「なんて低級言語自慢だろう…」「なんで低級言語自慢なんだろう…」のどっちだろう… )


982 :デフォルトの名無しさん:04/09/14 19:48:26
935だが、やっぱり質問者のほうが頭いいみたいだなwww
特に >>955-959 あたりのやりとりなんぞまるで大人と子供

983 :デフォルトの名無しさん:04/09/14 20:03:11
>>982
時間帯によるんじゃない?
昼だし。無職か学生さんでしょ?

984 :デフォルトの名無しさん:04/09/14 20:04:56
>>982-983
ネタだろうとは思うが
馬鹿かお前ら

985 :デフォルトの名無しさん:04/09/14 21:19:15
おーし、散々既出かもしれないけど、聞いちゃうぞー。

int global_hoge;

main(){

int hoge[global_hoge];

return 0;
}

と宣言できるか出来ないかは処理系依存?


986 :デフォルトの名無しさん:04/09/14 21:20:47
>>985
できるできない以前に、そんな書き方する奴の気が知れない

987 :デフォルトの名無しさん:04/09/14 21:28:29
malloc系が使えない仕様なのよ

988 :デフォルトの名無しさん:04/09/14 21:41:59
>>987
malloc作れば問題ないのでは?

989 :デフォルトの名無しさん:04/09/14 21:45:09
>>988
ヒープ領域が使いたくないんじゃないかな

990 :985:04/09/14 21:54:30
一応標準cなので、使おうと思えば使える。

が、前任者のやつらが相当へぼかったらしく
malloc関連で相当バグらせたらしい。

よって今回は多少メモリ食ってもmallocは使用禁止。

その中で何とかスマートにと悪あがきしたのが
>>985

ワケワカラン


991 :デフォルトの名無しさん:04/09/14 21:59:07
>>990
修正できないお前がヘボだ
使用禁止にしたやつもヘボだ
悪あがきの代案がヘボだ

992 :デフォルトの名無しさん:04/09/14 21:59:09
>>985
C99で可能になった奴だっけ?コンパイラ依存だろ

実装は見たことないけど、結局malloc/freeにナンジャネーノ

993 :デフォルトの名無しさん:04/09/14 21:59:17
>>985
C99な環境であれば可能だけど。
あとは、allocaが使えるかもしれない。

994 :985:04/09/14 22:04:49
皆様、どうもです。

>>991
代案plz

モウツカレタヨ


995 :デフォルトの名無しさん:04/09/14 22:07:30
>>994
だから
malloc作れよ!!

996 :デフォルトの名無しさん:04/09/14 22:15:35
すごい多重婚

mallocの代替にmy_malloc作っても一緒だろ?
おんなじバグになるだけだと思うが

997 :デフォルトの名無しさん:04/09/14 22:16:40
だから
次スレ作れよ!!

998 :デフォルトの名無しさん:04/09/14 22:17:13
C99でできるようになったっていうのは始めて知った。
で、調べてみたら、別にグローバル変数で渡す必要はないみたいだね。
引数に配列の要素数を渡してやってもできるみたい。。

999 :デフォルトの名無しさん:04/09/14 22:19:30
999!

1000 :デフォルトの名無しさん:04/09/14 22:19:45
C1000

1001 :1001:Over 1000 Thread


205 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)