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

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

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

1 :デフォルトの名無しさん:03/07/09 00:10
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

コンパイラを探しているなら >>2-13 を。
C machineはCに非ず
上記を逸した場合の結果は激しく未定義だYO!

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

C言語なら俺に聞け! Part 60
http://pc2.2ch.net/test/read.cgi/tech/1056806789/

2 :デフォルトの名無しさん:03/07/09 00:11
【コンパイラ】
gcc
http://gcc.gnu.org/

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

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

3 :_:03/07/09 00:11
http://homepage.mac.com/hiroyuki44/hankaku09.html

4 :デフォルトの名無しさん:03/07/09 00:11
>>1
乙NULL

5 :4:03/07/09 00:12
宣伝に負けた( ̄o ̄;)

6 :デフォルトの名無しさん:03/07/09 00:16
宣伝君をだれか出入り禁止にしてくれ。鬱陶しくてかなわん。

7 :デフォルトの名無しさん:03/07/09 00:21
>>6
禁止は無理だけど、削除依頼してくれれば消すよ。

8 :デフォルトの名無しさん:03/07/09 00:23
MTっていう乱数生成アルゴリズム知ってますか?

9 :デフォルトの名無しさん:03/07/09 00:24
有名だな

10 :デフォルトの名無しさん:03/07/09 00:24
>>2-13なのに続きが現れる気配なし…

11 :デフォルトの名無しさん:03/07/09 00:25
>>10
ねーもん

12 :デフォルトの名無しさん:03/07/09 00:26
インタプリタのサイトはテプレから外さないか?

13 :デフォルトの名無しさん:03/07/09 00:28
と亀さんはいった。

14 :デフォルトの名無しさん:03/07/09 00:28
亀さんそれじゃあだめだよ。

15 :デフォルトの名無しさん:03/07/09 00:29
なまらやる気の無い亀さん?

16 :デフォルトの名無しさん:03/07/09 00:33
東京発13:XXのぞみXX号に乗って静岡駅で降りる
ここまでは、目撃されている情報から間違いがない
そして、今度は東京行きのぞみXX号にのって…

17 :デフォルトの名無しさん:03/07/09 00:34
>>8
http://www.math.keio.ac.jp/~matumoto/mt.html

18 :デフォルトの名無しさん:03/07/09 00:55
fread ってどするの?

19 :デフォルトの名無しさん:03/07/09 00:58
よむんだよ。

20 :デフォルトの名無しさん:03/07/09 01:04
>>18
#include <stdio.h>
typedef size_t At;
typedef const void * N;
typedef size_t T;
typedef FILE * DoCoMo;

At fread(N,T,T,DoCoMo);

21 :前スレ912:03/07/09 01:31
レス遅くなりました。
前スレの913,914さん、ありがとうございました。
特に914さんの説明、かなり納得できました。
どうもでした。

22 :デフォルトの名無しさん:03/07/09 02:46
#include <stdio.h>
#include <stdlib.h>
int main(){
int a=1000,b=1000,i=0,mina=0,minb=0,r=rand();
printf("%d %d %d\n",i,a,b);
for(i=1;i<100;i++){
if(16000<r&&r<24000){
a+=4; b-=4;
}
if(24000<r&&r<32000){
a-=2; b+=7;
}
if(mina<a) mina=a;
if(minb<b) minb=b;
printf("%d %d %d\n",i,a,b);
}
printf("mina=%d minb=%d\n",mina,minb);
}
どんな(1-32768のどれか)乱数を出すかで、乱数がどの範囲に入るかで
a,bの値が下がったり上がったりするプログラムを作ったつもりなんですが、
aの値もbも1000を出力したままずっと変わりません。何でなんですか?


23 :デフォルトの名無しさん:03/07/09 02:58
r = rand() がループの外だから

24 :デフォルトの名無しさん:03/07/09 03:05
C言語についてなんですが、文字コード番号を打って入力し、出力する方法が分かりません。
どなたか知ってたら教えてください

25 :デフォルトの名無しさん:03/07/09 03:12
>>24
>>1

26 :デフォルトの名無しさん:03/07/09 03:15
日本語についてなんですが、脳内語を入力し、口語を出力する方法が分かりません。
どなたか知ってたら教えてください

27 :22:03/07/09 03:32
#include <stdio.h>
#include <stdlib.h>
int main(){
int a=1000,b=1000,i=0,j,mina=1000,minb=1000,a0=0,b0=0;
printf("%d %d %d\n",i,a,b);
for(j=0;j<20;j++){
for(i=1;i<100;i++){
if(16000<rand()&&rand()<24000){
a+=4; b-=4;
}
if(24000<rand()&&rand()<32000){
a-=2; b+=7;
}
if(mina>a) mina=a;
if(minb>b) minb=b;
printf("%d %d %d\n",i,a,b);
a0+=mina; b0+=minb;
}
printf("mina=%d minb=%d\n",a0/1000,b0/1000);
}
}
上のプログラムにちょっと付け足したものです。
mina,minbを試行で何度も出して、試行回数で割って
平均値を求めようとしたんですけど、mina,minbは変な値が出てきました
普通は1000程度の数がでます。どこがおかしいんでしょうか?


28 :デフォルトの名無しさん:03/07/09 03:35
>>22
おまい、わざとだろ

29 :デフォルトの名無しさん:03/07/09 03:56
>27
>if(16000<rand()&&rand()<24000){
最初のrand()と二つ目のrand()は別の値になる。

30 :前スレ1000:03/07/09 09:05
マヌケだ…

31 :前(々)スレ999:03/07/09 09:07
勝った・・・

32 :デフォルトの名無しさん:03/07/09 09:39
#include <stdio.h>

int main(void)
{
char str[] = "abcdefg";
int k;

for(k = 0; k < 7; k++){
if(str[k] == "b"){
printf("%s\n", str);
break;
}
}
return 0;
}

abcdefgが出力されるはずなんですが・・・。
移植性の無いポインタ変換という警告が出てます。
よろしくお願いします。

33 :デフォルトの名無しさん:03/07/09 09:42
関数内で fopen したファイルのポインタを呼び出し元に返すことは可能か?
例えば、こんな感じ。

main(){
 FILE *file;
 func(file);
}

void func(FILE* f){
f=fopen("xxx", "r");
}

この場合、勝手にクローズされちゃう?

34 :デフォルトの名無しさん:03/07/09 09:50
>>32
str[k] と "b" を比較しているから。

>>33
当然可能。勝手にクローズするはずがない。行方不明になるが。



35 :デフォルトの名無しさん:03/07/09 09:51
>>33

void func(FILE** fp) {
 *fp = fopen(...);
}

FILE* func() {
 return fopen(...);
}

36 :33:03/07/09 09:53
ごめんなさい。書き方悪かった。
return しないでできる?引数渡しで。


37 :デフォルトの名無しさん:03/07/09 10:06
出来るってばよ。

38 :デフォルトの名無しさん:03/07/09 10:15
>>36
35を良くみろ。

39 :デフォルトの名無しさん:03/07/09 11:13
returnしなけりゃ処理が戻ってこないから難しいな。

40 :デフォルトの名無しさん:03/07/09 11:23
質問
varchar型に格納されている文字列の比較ってどうやるん?
そのまま == で比較したらキャストエラーが出るのだが

varchar A[10][5];
varchar B[10][5];

---詳細省略--------------------------------------------
varcharのA配列にSQLで取った値をカーソルFETCHで値格納
varcharのB配列にSQLで取った値をカーソルFETCHで値格納
-------------------------------------------------------

if(A[1].arr == B[1].arr){

}


41 :デフォルトの名無しさん:03/07/09 11:27
Cにvarcharなんていう型はありません。

42 :デフォルトの名無しさん:03/07/09 11:32
Pro*Cは駄目なの?

43 :デフォルトの名無しさん:03/07/09 11:33
>>1

44 :デフォルトの名無しさん:03/07/09 11:51
>>40
AとBは二次元配列だから、添え字がおかしいんじゃないの?

あと、varchar同士の比較は、長さを比較して、一致してたら
memcmpを使えばいいのかな?
Pro*Cって知らんから、間違ってるかもしれんけど。

45 :デフォルトの名無しさん:03/07/09 12:13
Pro*cは、SQLをCのソースに埋め込む開発ツールですな。
ということで、スレ違いなんだってばさ。

46 :デフォルトの名無しさん:03/07/09 14:32
激しくアフョ丸出しで悪いんだけど、
画面をクリアする方法ってどこ探しても載ってないんすよね・・・

47 :デフォルトの名無しさん:03/07/09 14:37
>>46
載ってる。

48 :デフォルトの名無しさん:03/07/09 14:37
>>46
Cと関係ないからな

49 :デフォルトの名無しさん:03/07/09 14:44
system("cls"); /* Windows/MS-DOS */
system("clear"); /* UNIX/Linux */

50 :デフォルトの名無しさん:03/07/09 14:46
int i;for(i=0;i<1000;i++){printf("\n");}

51 :46:03/07/09 15:12
>>49
激しく感謝。

52 :デフォルトの名無しさん:03/07/09 15:16
C言語ならオレだよオレオレ

53 :デフォルトの名無しさん:03/07/09 15:41
>>52
すげえ。C 言語とかいっといてオレだよとかいってるよ。この人。

54 :デフォルトの名無しさん:03/07/09 16:55
>>53
それ言うならスレタイが既に(ry

55 :デフォルトの名無しさん:03/07/09 18:10
>>40
if(A[1].arr == B[1].arr)
でなくて
if(strcmp(A[1].arr, B[1].arr)==0)
では。

56 :55:03/07/09 18:22
厳密に言うと
if (A[1].len == B[1].len
&& strcmp((char*)A[1].attr, (char*)B[1].attr)==0)
かな。スレ違いなのでこれくらいに。

57 :_:03/07/09 18:32
http://homepage.mac.com/hiroyuki44/

58 :デフォルトの名無しさん:03/07/09 18:35
>>56
varcharの文字列は0がついてるとは限らないから、strcmpで比較はまずいよ。

59 :デフォルトの名無しさん:03/07/09 18:39
strncmp

60 :デフォルトの名無しさん:03/07/09 19:32
>>52はオレオレ詐欺!

61 :デフォルトの名無しさん:03/07/09 20:48
registerは古くさいですか?

62 :デフォルトの名無しさん:03/07/09 20:49
名無しさん  2003/07/09(Wed) 19:20

◎無修正画像をご覧下さい◎無料パスワードをゲットすれば、もっと凄い画像とムービーがご覧頂けます◎
      ★見て見ておまんこ★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html

63 :デフォルトの名無しさん:03/07/09 20:54
staticって何ですか?
「静的変数」と言われても良く分かりません。

64 :デフォルトの名無しさん:03/07/09 20:55
古いです。

65 :デフォルトの名無しさん:03/07/09 20:56
#include <stdio.h>
#include <stdlib.h>
int main(){
int a[99],i1,i2,i3,i4;
for(i1=0;i1<99;i1++){
a[i1]=rand()%51;
}
for(i2=1;i2<12;i2++){
for(i3=0;i3<99;i3+=49){
while((a[i3]==a[i3+1]||a[i3]==a[i3+2]||a[i3]==a[i3+3]||a[i3]==a[i3+4]||a[i3+1]==a[i3+2])
||(a[i3+1]==a[i3+3]||a[i3+1]==a[i3+4]||a[i3+2]==a[i3+3]||a[i3+2]==a[i3+4]||a[i3+3]==a[i3+4])){
a[i3+1]=a[i3+1+(4*i2)]; a[i3+2]=a[i3+2+(4*i2)]; a[i3+3]=a[i3+3+(4*i2)]; a[i3+4]=a[i3+4+(4*i2)];
}
i4=(i3/49)+(i3%49);
printf("a[%d]=%d\n",i4,a[i4]);
}
}
}
トランプを5枚配ったときのトランプの出方を出力使用としたのに、
このソースでは実行すると何にもでてきません
一応、同じカードを引かないように工夫はしたつもりです。

66 :デフォルトの名無しさん:03/07/09 21:02
ここって、バグを指摘するスレなの?

67 :65:03/07/09 21:02
放置でつか?

68 :デフォルトの名無しさん:03/07/09 21:04
>>67
ソース読むのメンドクセ

69 :デフォルトの名無しさん:03/07/09 21:05
>>65
よーわからんが動いたぞ。

70 :65:03/07/09 21:12
間違えました。上のプログラムはちゃんと動きます
でも、なんで結果は、a[0],a[1],a[2]が延々とでてしまうんでしょうか

71 :デフォルトの名無しさん:03/07/09 21:26
>>70
正直ソースが煩雑で見る気にならない。
山から1枚カードを引く関数 pull_card()
を作ってmainから必要な数だけ呼べ。
そうすればすっきりして、おかしいところもわかるだろ。

72 :デフォルトの名無しさん:03/07/09 22:12
>>65
おまえ、www.ioccc.orgに出馬しろ、ぜひ。天然は強い。

73 :デフォルトの名無しさん:03/07/09 22:24
>65
ひょっとして、0-nまでの数を、n個の配列に、重複無く・ランダムに
放り込む方法を知らないとか?

74 :デフォルトの名無しさん:03/07/09 22:26
本当は頭のいい人なのかもしれない

75 :デフォルトの名無しさん:03/07/09 22:26
知るとか知らないとかいうもんか?
ちょっと考えれば思いつくと思うが。

76 :デフォルトの名無しさん:03/07/09 22:32
∩( ´Α`)質問です

static const int big_tbl[] = {
/*
ウンザリするほど巨大なテーブル
*/
};

static void func(void){
/*
テーブル使ってほにゃらら
*/
}

があった時、ソースが激しく見づらいので、

static void func(void){
/*
テーブル使ってほにゃらら
*/
}

static const int big_tbl[] = {
/*
ウンザリするほど巨大なテーブル
*/
};
という配置のしたいのですが、どうすればいいんでしょうか?
前方参照みたいなことは可能ですか?

77 :デフォルトの名無しさん:03/07/09 22:34
乱数の出方によっては、whileが無限ループにならないか?

78 :デフォルトの名無しさん:03/07/09 22:35
>>76
staticをexternに。

79 :78:03/07/09 22:37
じゃなくて、staticを消して先頭にstatic const int big_tbl[];

80 :78:03/07/09 22:37
またまちがった(T_T)
staticを消して先頭にextern const int big_tbl[];

81 :78:03/07/09 22:41
またまちがった(T_T)
externを消して先頭にstatic const int big_tbl[];


82 :デフォルトの名無しさん:03/07/09 22:41
>>80

extern const int big_tbl[];

static void func(void){
/* テーブル使ってほにゃらら */
}

const int big_tbl[] = {
/* ウンザリするほど巨大なテーブル */
};

こんなカンジですか?
ありがとうございます。今環境がありませんが後で試して見ます

83 :78/80:03/07/09 22:43
>>82
そう。
元のままの方がいいと思うけどね

84 :デフォルトの名無しさん:03/07/09 22:47
tableは大きいなら別のファイルにするという手もあるな。

85 :デフォルトの名無しさん:03/07/09 23:17
別ファイルにしてインクルード、
もしくは実行時にファイルから読み込み。

86 :デフォルトの名無しさん:03/07/09 23:19
>>65
シャッフルアルゴリズム
1. とりあえず順列にでいいから配列に全部の数を詰める。
2. i 番目の要素と別の要素とを入れ替える作業を i = 0 〜 (n-1) まで順番に行う。
3. それを何度か繰り返す。

87 :デフォルトの名無しさん:03/07/09 23:36
define マクロについて質問です。
既製のソースをそのままで for の条件式の所にだけチェック用の関数を入れたいのですが

#define for(a) for(a)

のようにはできても

#define for(a;b;c) for(a;check(b);c)

のようにはできません(「;」は区切りに使えないみたいです)

置き換え後は別に for じゃなくてもいいので
#define for(a;b;c) {a;while(b){c;}}
とかも考えたのですが、左側部分の問題は残ったままです。

カンマで
#define for(a,b,c) {a;while(b){c;}}
とすると、そもそも現在のソース全てに手を入れなければならずに、
元に戻すのも大変な上、
for(a=0, b=0; a < b; ++a, --a)
みたいに書いてある所はどうしようもなくなってしまいます。
何か方法はないでしょうか?

88 :デフォルトの名無しさん:03/07/09 23:45
>>87
#define FUNCTIME(f,r) \
{    \
    unsigned long time = GetTickCount();  \
    (r) = (f);  \
    time = GetTickCount() - time;  \
    printf("%s time = %lu[ms]\n",#f,time);   \
}



89 :デフォルトの名無しさん:03/07/09 23:47
VCじゃデバッグしか使えないから

90 :デフォルトの名無しさん:03/07/09 23:52
あ、勘違い。

91 :デフォルトの名無しさん:03/07/10 00:18
>>87
無理。

92 :デフォルトの名無しさん:03/07/10 01:14
>>65
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
  int have[5];
  int opn[52]={0};
  const char mark[4][3]={"▲","■","●","★"};
  const char num[13][3]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
  int i,r;
  srand(time(NULL));
  for(i=0;i<5;i++)
  {
  r=rand()%52;
  if(opn[r]) continue;
  else {opn[r]=1;have[i]=r;}
  }
  for(i=0;i<5;i++) printf("%s%s\n",mark[have[i]/13],num[have[i]%13]);
  return 0;
}

93 :92:03/07/10 01:17
>>92 間違えた。
if(opn[r]) continue;

if(opn[r]) {i--;continue;}

94 :デフォルトの名無しさん:03/07/10 01:42
>>87
awkとかperlで加工しちゃったら?

95 :デフォルトの名無しさん:03/07/10 02:35
>>94
同意。で、それやるなら「プリプロ後ファイルを」行連結しつつ処理かな。
それでも "for (x;y" なんて意地悪な文字列があるとコケがちなんで、
文字列識別位はしないといかんかも。

>>87
どうしても既成のソースいじれないの?
正規表現置換で for (a; CONDCHKFOR (b); c) とかにしちゃって
チェック外す時に #define CONDCHKFOR なり、
inline static int CONDCHKFOR (int a) { return a; }
で良い気がするんだけど。

96 :デフォルトの名無しさん:03/07/10 02:49
>CONDCHKFOR
やぼったい

97 :デフォルトの名無しさん:03/07/10 03:25
>>87
#define for(a;b;c) for(a;check(b);c)


for(a;

と展開されるはず

だいたい大して楽になってないじゃないか

98 :うぇ〜〜〜〜:03/07/10 07:30


99 :デフォルトの名無しさん:03/07/10 11:22
#include<stdio.h>

int main()
{
printf("1+2=%d\n",1+2);

return 0;
}
↑これをコンパイルして実行したら
何か一瞬だけ表示されて閉じちゃうんですけど…何ででしょ?
ちなみにVisual C++.net2003使ってます、よろしくお願いしまつm(__)m

100 :デフォルトの名無しさん:03/07/10 12:10
main でファイルから読み込んでいた文字列を、
関数内で行うようにしたいのですが、うまくいきません。
具体的に、
main(){
char file[]="filename";
 char a[LENGTH], b[..], c[...];
 char str[LENGTHLINE];
 FILE *fp;
 /* a の読み込み */
 if ((fp=fopen(filename, "r"))!=NULL){
  fgets(str, LENGTHLINE, fp);
  sscanf(str, "%s\n", &a);
  fclose(fp)
 }
 /* b の読み込み */
 /* c の読み込み */
 処理
}


101 :デフォルトの名無しさん:03/07/10 12:11

となっているところを、
main(){
 char file[]="file";
 char a[LENGTH], b[..], c[..];
 read_abc(file, a, b, c);
 処理
}

void read_abc(char *file, char *a, char *b, char *c){
 char str[LENGTHLINE];
 FILE *fp;
 /* a の読み込み */
 if ((fp=fopen(file, "r"))!=NULL){
  fgets(str, LENGTHLINE, fp);
  sscanf(str, "%s\n", &a);
  fclose(fp);
 }
 /* b, c の読み込み */
}
というようにしているのですが、
コンパイルは通っても segmentation Fault になってしまいます。
main で配列サイズを決めていても、read_abc で配列サイズを確保しなくては
ならないのでしょうか?
また、一般的には関数間での文字列の受け渡しはどのようにするのでしょうか。
ご教授お願いいたします。


102 :デフォルトの名無しさん:03/07/10 13:54
sscanf(str, "%s\n", &a);


103 :デフォルトの名無しさん:03/07/10 14:36
>>99
プログラムが終了すればコマンドプロンプトも閉じられる。
そういう仕様。(at Windows コマンドプロンプト)
つか、スレ違い。

>>101
>sscanf(str, "%s\n", &a);
a はポインタぢゃないのか?
ところでコレ、sscanf の仕様を理解して使っているならいいが、それにしても
無駄だな…

104 :デフォルトの名無しさん:03/07/10 16:47
デバッグ出力用のマクロの引数を
printfみたいな、引数の数無制限みたいな感じにしたいんですが

↓現在こんな感じ
#ifdef DEBUG_
#define DEBUGOUAT( _f_ , _v_ ) \
{\
fprintf(stdout,_f_,_v_);\
}\
#else
#define DEBUGOUAT( _f_ , _v_ )
#endif

こうやっても、_v_の所は、一個しか引数かけないです。
どう記述したら、無制限にできるのですか?

105 :デフォルトの名無しさん:03/07/10 17:03
>>104
コンパイラが C99 に対応してれば

#ifdef DEBUG_
 #define DEBUGOUAT(...) fprintf(stdout, __VA_ARGS__)
#else
 #define DEBUGOUAT(...)
#endif /* DEBUG_ */

が使えるんだが、そうでなけりゃ関数作るしか。

int debugprintf(const char *form, ...)
{
  va_list p;

  va_start(p, form);
  return vfprintf(stdout, form, p);
}

#ifdef DEBUG_
  #define DEBUGOUAT debugprintf
#else
  #define DEBUGOUAT /* none */
#endif /* DEBUG_ */

106 :デフォルトの名無しさん:03/07/10 17:05
>>104
#ifdef DEBUG_
#define DEBUGOUT(params) printf params
#else
#define DEBUGOUT(params)
#endif

DEBUGOUT(("Hoge %s.\n", "hoge"));

で、fprintf は諦める。
stderr とかに出したい場合はそれなりの関数を用意する。

107 :デフォルトの名無しさん:03/07/10 17:08
そういや、

((void*)0)(i = 0);

とできて、さらに i = 0 が実行されないというのは、
C++ のみの仕様だっけ?
C89 でもできるなら

#ifdef DEBUG_
#define DEBUGOUT printf
#else
#define DEBUGOUT ((void*)0)
#endif

でいいんだけど。

108 :デフォルトの名無しさん:03/07/10 18:20
#define DEBUGOUT 0 ||
で、最適化を期待

109 :デフォルトの名無しさん:03/07/10 20:44
何秒間の間に数字の1を何回押したかというプログラムを作りたいのですが
誰か教えて下さい。

何秒間というのはランダムです(5秒〜30秒ぐらいの間)


110 :デフォルトの名無しさん:03/07/10 20:55
> 誰か教えて下さい。
何を?

111 :デフォルトの名無しさん:03/07/10 20:57
malloc関数について教えてください!

mallocが返す値ってポインタですよね。
IBMにあったサンプルプログラムで下記のようなコードがあるんですけど、
TIFFRead~()の3つ目の引数で、ポインタにint型の整数を加えているのがわかりません。
確保した領域がどこにあるのかを示す値に加えちゃたら
どこか変なところを指しちゃったりしないんですか?


char *buffer;
int imageOffset=0;

buffer = (char *) malloc(bufferSize)

for (stripCount = 0; stripCount < stripMax; stripCount++){

if((result = TIFFReadEncodedStrip (image, stripCount,buffer + imageOffset,stripSize)) }

112 :デフォルトの名無しさん:03/07/10 20:58
>>109
>>1を読めないような奴に、何を教えても無駄。

113 :デフォルトの名無しさん:03/07/10 20:59
>>111
buffer += imageOffset じゃないから大丈夫。

114 :デフォルトの名無しさん:03/07/10 21:06
質問(C言語)
構造体 name のメンバ変数 strName の値をqsort関数を使い
ソートを行いたい。
どうやれば良いのか教えてください。

typedef struct _Name{
char strName[30] ;
} Name ;

Name name[7] ;

strcpy( name[0].strName, "C" ) ;
strcpy( name[1].strName, "X" ) ;
strcpy( name[2].strName, "B" ) ;
strcpy( name[3].strName, "BB" ) ;
strcpy( name[4].strName, "A" ) ;
strcpy( name[5].strName, "AB" ) ;
strcpy( name[6].strName, "ZX" ) ;


115 :デフォルトの名無しさん:03/07/10 21:09
strName をソートすんの?

116 :デフォルトの名無しさん:03/07/10 21:13
>>115
そうです。
文字列ですが出来ますか??

117 :デフォルトの名無しさん:03/07/10 21:16
>>116
本当に?
strName でソートすんじゃないの?

118 :デフォルトの名無しさん:03/07/10 21:20
strNameをkeyにしてnameをソート

#include <stdio.h>
#include <string.h>
typedef struct _Name{
char strName[30] ;
} Name ;
int NameCmp(const void *a, const void *b){
return strcmp(((Name*)a)->strName,((Name*)b)->strName);
}
main(){
Name name[7] ;
int i;
strcpy( name[0].strName, "C" ) ;
strcpy( name[1].strName, "X" ) ;
strcpy( name[2].strName, "B" ) ;
strcpy( name[3].strName, "BB" ) ;
strcpy( name[4].strName, "A" ) ;
strcpy( name[5].strName, "AB" ) ;
strcpy( name[6].strName, "ZX" ) ;
qsort(name, 7, sizeof(Name),NameCmp);
for(i =0;i<7;++i)
printf("%s\n",name[i].strName);
}


119 :デフォルトの名無しさん:03/07/10 21:21
>>117
そうです。
strNameでソートします。

120 :デフォルトの名無しさん:03/07/10 21:25
>>99
スレ違いだけどヒント。

int main()
{

(σ゜Д゜)σゲッツ!!
return 0;
}








若しくは、コマンドプロンプト開いて、
プロンプト>実行ファイル名

121 :デフォルトの名無しさん:03/07/10 21:26
(σ゜Д゜)σゲッチャー!!だろ

122 :デフォルトの名無しさん:03/07/10 21:31
ヒントだからさ。

123 :デフォルトの名無しさん:03/07/10 21:36
>>113
なるほど。言われてみれば確かにそのとうりですね。
ありがとうございます。

でも、それじゃあ buffer + imageOffset ってどういう処理をしてることになるんでしょうか。
度々すいませんがお願いします。

124 :デフォルトの名無しさん:03/07/10 21:38
>>123
buffer先頭からimageOffsetだけポインタをインクリメントした先のポインタを返す。

125 :デフォルトの名無しさん:03/07/10 21:40
>>118
ありがとうございます。

126 :デフォルトの名無しさん:03/07/10 21:47
>>124
なるほど。
よく見れば>>1にも書いてあるのに
丁寧にどうもありがとうございました。

127 :デフォルトの名無しさん:03/07/10 22:21
うに

128 :デフォルトの名無しさん:03/07/10 22:31
int型変数、a,b,の値をそれぞれ10,4として、次の文をそれぞれ
実行したときのaの値を表しなさい。
(1) a/=b
(2) a+5*b--
(3) a=a!=b
(4) a=a%b
(5) a=a>b
(6) a=a||b
(7) a++
(8) a=!a
(9) a+=b*2
(10) a=(++a)*(b++)


129 :デフォルトの名無しさん:03/07/10 22:32
マルチすんなよボケ

130 :デフォルトの名無しさん:03/07/10 22:33
>>128
>>1読めバーカ

131 :デフォルトの名無しさん:03/07/10 22:36
(10)は未定義

132 :デフォルトの名無しさん:03/07/10 23:01
stderr ってなんだよ

stdinやstdoutは
unko.exe < data.txt
unko.exe > data.txt
で、使えること知ったけどよ。

stderr ってなんだよ


133 :デフォルトの名無しさん:03/07/10 23:05
unko.exe > data.txt
とやっても、data.txtに書き出さずに、プロンプトにエラーメッセージを表示できる。

134 :デフォルトの名無しさん:03/07/10 23:16
>>133

突然、変なこと聞くけど
unko.exe > data.txt
data.txtへリダイレクトしている内容を、Cのプログラムで直接受け取ることは不可能ですか?

int main(int argc, char **args){
unko.exe の出力をこの中でいじる!
}

135 :マルチでごめん!:03/07/10 23:17
>>134
system("unko.exe > data.txt ");
data.txtを開いて読むというのは無しね。 

136 :デフォルトの名無しさん:03/07/10 23:18
どうしたいのかよくわからん。
リダイレクトはファイルへしかできない。
標準出力に出されたものを、標準入力から取り込むならパイプがあるが。

137 :デフォルトの名無しさん:03/07/10 23:18
>>133
( ゚∀゚ )なるほど

ありがたい

138 :134:03/07/10 23:23
>>136
/* wget で取り込んだhtmlファイルをdata.txtという名前で保存する*/
system("wget http://hanyan.co.jp -O data.txt ");
data.txtを開いて読む。
ということをやっていたプログラムをファイルの使えない
組み込みLINUXに移植することになりましたので、よい方法を探しています。

wget の出力を、C言語の中で、charの配列か何かで受け取る方法は無いかなあと。



139 :デフォルトの名無しさん:03/07/10 23:27
共有メモリとかあるはずだが。

140 :デフォルトの名無しさん:03/07/10 23:30
popen

141 :デフォルトの名無しさん:03/07/10 23:33
unko.exe | hoge.exe

142 :134:03/07/10 23:49
>>140
それだ〜〜〜〜〜っ!
ありがとう。ありがとう。

143 :デフォルトの名無しさん:03/07/11 00:00
文字で図形を描こう
繰り返しを使い、三角形を画面に表示させましょう。ただし、表示する三角形の
高さをキーボードから指示するものとします。


高さが n の三角形を表示するには、
1行目ではスペースをn-1回表示し、アステリスクを1回表示
2行目ではスペースをn-2回表示し、アステリスクを3回表示

k行目ではスペースをn-k回表示し、アステリスクを2k-1回表示

という処理をn行目まで繰り返します。



144 :デフォルトの名無しさん:03/07/11 00:00

□□□□□□□*↓
□□□□□□***↓
□□□□□*****↓
□□□□*******↓
□□□*********↓
□□***********↓
□*************↓
***************↓


あとは、簡単ですからプログラムを作ってみよう。

応用編
□□□□□□□*↓
□□□□□□*□*↓
□□□□□*□□□*↓
□□□□*□□□□□*↓
□□□*□□□□□□□*↓
□□*□□□□□□□□□*↓
□*□□□□□□□□□□□*↓
***************↓


にチャレンジしてみよう。


145 :143−144:03/07/11 00:01
よろしくおねがいします。

146 :デフォルトの名無しさん:03/07/11 00:04
>>145
自分でやれ!

147 :デフォルトの名無しさん:03/07/11 00:06
>>143
しゅくだいは、じぶんでしましょうね。(いちおうひらがなでかいておきます)

148 :デフォルトの名無しさん:03/07/11 00:17
>>144
>>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

149 :デフォルトの名無しさん:03/07/11 00:23
>>101
sscanf()のパラメータが間違いだらけ。
受け渡し方としては、まぁいいんでないかい?
尤も、LENGTHとLENGTHLINEの値によっては問題あり。

150 :デフォルトの名無しさん:03/07/11 00:27
>>101
・sscanf()のパラメータが間違いだらけ。
・そもそもsscanf()の必然性が不明。
・LENGTHとLENGTHLINEを分ける理由も不明。
・fileもレゾンデートルが不明。
・a,b,cを読むたびにファイルを開きなおすのか? その辺も不明。

「具体的」と書く以上、もっとちゃんと元のソースを載せろよ。
元々おかしいのか、コピーの段階でおかしくなったのか判らないじゃないか。


151 : :03/07/11 00:35
LinuxでC言語を使ってMACアドレスを取り出すにはどうするの?

152 :デフォルトの名無しさん:03/07/11 00:42
>>151
>>1

153 :デフォルトの名無しさん:03/07/11 01:45
>>143-145
ここまでハッキリとアルゴリズムが示されていて、何がわからないと言うのだろうか?

154 :デフォルトの名無しさん:03/07/11 01:47
C。

155 :デフォルトの名無しさん:03/07/11 02:03
外部シンボル "__imp__timeEndPeriod@4" は未解決です
外部シンボル "__imp__timeBeginPeriod@4" は未解決です

というエラーが出ます。

ちゃんと
#include <mmsystem.h>
をインクルードしてから、
timeBeginPeriod(1);
を使っているのですが

156 :デフォルトの名無しさん:03/07/11 02:06
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/



有償?

157 :デフォルトの名無しさん:03/07/11 02:12
>>155
それはリンクエラー
ヘッダーファイルをインクルードしたかどうかは関係ない。

158 :155:03/07/11 02:16
winmm.libをリンクしたらいきました
しかし、なぜMSDNで検索してもtimeEndPeriodは見つかりませんなんだ?

159 :デフォルトの名無しさん:03/07/11 03:36
正常に動いていたプログラムを2つのファイルに分割しコンパイルしたところ、
次のようなエラーが発生しました。
codemlmain.c が main を含み、codemlwrap.c が関数 codemlwrap を含むファイルです。
read_control_file, get_num_of_trees などは codemlmain 内で定義し、
codemlmain ファイル内からのみ呼び出している関数です。
codemlwrap.c, codemlmain.c 内の関数のプロトタイプは codemlmain.h で
宣言し、codemlmain.c からのみ include しています。
codemlwrap.o: In function `read_control_file':
codemlwrap.o(.text+0x554): multiple definition of `read_control_file'
/tmp/ccIGiNsI.o(.text+0x0): first defined here
/usr/bin/ld: Warning: size of symbol `read_control_file' changed from 897 to 893 in codemlwrap.o
codemlwrap.o: In function `get_num_of_trees':
codemlwrap.o(.text+0x8d4): multiple definition of `get_num_of_trees'
/tmp/ccIGiNsI.o(.text+0x384): first defined here
codemlwrap.o: In function `get_tree':
codemlwrap.o(.text+0x978): multiple definition of `get_tree'
/tmp/ccIGiNsI.o(.text+0x428): first defined here
codemlwrap.o: In function `get_seq':
codemlwrap.o(.text+0xa1c): multiple definition of `get_seq'
/tmp/ccIGiNsI.o(.text+0x4cc): first defined here
codemlwrap.o: In function `print':
codemlwrap.o(.text+0xba4): multiple definition of `print'
/tmp/ccIGiNsI.o(.text+0x654): first defined here
collect2: ld returned 1 exit status

以上、よろしくお願いいたします。

160 :デフォルトの名無しさん:03/07/11 03:43
>>159
オブジェクトファイルを二重にリンクしようとしてないか?
makefileなどを見なおしてみるように。
尚、これ以上はスレ違い。

161 :_:03/07/11 03:48
http://homepage.mac.com/hiroyuki44/jaz09.html

162 :デフォルトの名無しさん:03/07/11 04:19
>>159
1 ファイル内のみでしか使わない(staticな)関数の宣言は
  そのファイルの頭で宣言する(ヘッダファイルを使用しない)
2 ファイル外で使う(externな)関数と変数の宣言は、ヘッダファイルにまとめ
  その関数及び変数を使用する全てのファイルの頭で #include する
3 2で宣言した関数と変数は、全てのファイルの中で
  必ず、1回だけの定義をする必要がある

>>160
別にスレ違いではないような…

163 :デフォルトの名無しさん:03/07/11 05:55
>>159
関数プロトタイプを勉強しませう。

164 :デフォルトの名無しさん:03/07/11 07:54
>>162
リンク手続きの問題なら、コンパイル環境の使い方になるからスレ違い。
まぁ、あんたの指摘するような問題もあるからその点に関してはスレ違いではないな。

165 :159:03/07/11 10:03
まだ Makefile とか書いていなくて、
gcc -c codemlwrap.c
gcc -o codemlmain codemlmain.c codemlwrap.o
としているだけなのですが、問題ありますか?
>>162
>>3 2で宣言した関数と変数は、全てのファイルの中で
>>  必ず、1回だけの定義をする必要がある
これは全てのファイルを通して、各関数が1回だけ定義されている必要がある、
ということですよね。

codemlmain.c, codemlwrap.c の両方で #include しましたが同じ結果になります。
んんー、特に問題ない気がするのですが・・・。

166 :159:03/07/11 10:16
同一ファイル内からしか呼び出さない関数を全て static にしたら
できました。お騒がせしました。
でも、これって static 付けなきゃいけないもんなんですか〜?

167 :デフォルトの名無しさん:03/07/11 10:24
>>166
疑問があるなら調べろよ。
staticとは何か理解しているのか?

168 :デフォルトの名無しさん:03/07/11 10:56
>>166
ソース晒してみ?
static宣言しなくても普通はコンパイルできるんだがな。
#ヘッダファイルじゃなくてソースをincludeしているに一票。

169 :デフォルトの名無しさん:03/07/11 13:14
関係ないけど
gcc -c codemlwrap.c
gcc -c codemlmain.c
gcc -o codemlmain codemlmain.o codemlwrap.o
これと>165のは同じ意味ですか?

170 :デフォルトの名無しさん:03/07/11 13:59
だから関数プロトタイプを勉強しろって。

171 :デフォルトの名無しさん:03/07/11 15:16
>>170
なんとかの一つ覚え?

>>169
ほぼ同じ。
但し、>>165ではcodemlmain.oが生成されない。
つーのはgccの話であって、コンパイラによっては一概に言えない。

172 :169:03/07/11 16:27
なるー

173 :デフォルトの名無しさん:03/07/11 16:45
Cをはじめて3日目です。
平方根を求めるプログラムを作っているのですが、実行時にエラーになってしまいます。
コンパイル時の警告メッセージも意味がわかりません。

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

/*平方根を求めるプログラム*/
intmain()
{
char*i;
intl;
doublej,k;
for(l=0;l!=EOF;l++)
{
printf("数値を入力してください。\n");
gets(i);
i[strlen(i)-2]=NULL;
j=atof(i);
k=sqrt(j);
printf("平方根は%fです。\n",k);
}
return0;
}

174 :デフォルトの名無しさん:03/07/11 16:48
>>173
sageているし、ネタだと思っていいのか?
iはどこを指しているの?

175 :デフォルトの名無しさん:03/07/11 16:58
>>173
あえて言おう!

> 平方根を求めるプログラムを作っているのですが、

君が作っているのは平方根を求めるプログラムを使うプログラムだ!

176 :デフォルトの名無しさん:03/07/11 17:02
gets(i);
i[strlen(i)-2]=NULL;
j=atof(i);

scanf("%d", &j);

177 :デフォルトの名無しさん:03/07/11 17:08
>>173
char* i; → char i[128];
i[strlen(i)-2]=NULL; → 不要

178 :デフォルトの名無しさん:03/07/11 19:31
>>173
君にはまだ早いような気がします。


179 :デフォルトの名無しさん:03/07/11 19:41
こんばんわ。
ちょっと質問させてください。

12bitの整数型を使ってmalloc()で領域を確保したいのですが
どうすれば12bitの値を扱えるのでしょうか?

180 :デフォルトの名無しさん:03/07/11 19:43
>>179
ビットフィールド

181 :デフォルトの名無しさん:03/07/11 19:44
int12 *p;
p = malloc(sizeof(int12));

182 :デフォルトの名無しさん:03/07/11 19:45
>>179
32ビットで我慢しろ。

183 :デフォルトの名無しさん:03/07/11 19:49
C言語にも
http://java.sun.com/j2se/1.4/ja/docs/ja/api/
みたいな関数リファレンスってネットにありますか?

184 :デフォルトの名無しさん:03/07/11 19:51
>>183
JISに仕様書があるけど、とてもみづらいので、
http://www.bohyoh.com/CandCPP/C/Library/index.html
これで。全てサポートしていないかもしれないけど。

185 :デフォルトの名無しさん:03/07/11 19:53
swprintfとか載ってねーな

186 :183:03/07/11 20:05
>>184
今の自分にはこれで十分そうです。
ありがとうございます。

187 :179:03/07/11 20:10
>>180
ビットフィールドって7bit以上でも使えましたっけ?

>>181
Linux上でgccを使ってるのですが、
コンパイル時にint12で弾かれてしまいます。
どうしたらいいでしょうか。

>>182
12bitは決定で変えられないんです。


188 :デフォルトの名無しさん:03/07/11 20:15
>>187
12bitの整数を扱わなければいけないのはなぜ?
何をしようとして必要なんだ?

189 :179:03/07/11 20:18
>>188
画像処理で使うのですが、
機械の都合でピクセル毎の輝度が12bitで与えられるからです。


190 :デフォルトの名無しさん:03/07/11 20:19
C++でclass Int12を作って、それを使うとか。

191 :デフォルトの名無しさん:03/07/11 20:20
>>189
演算は32bitで行って、必要なときに12bitにつめればいいんでないの?

192 :デフォルトの名無しさん:03/07/11 20:21
>>187
何だかよー分からんが、
例えばフロッピーディスクの FAT のように、
12 ビット長の値の羅列を扱う必要があるって状況なわけね?

12 ビットの型を用意することはできないので、
(ビットフィールドを使っても、
 その構造体のサイズはバイト単位になってしまう)、
8 ビットの配列を使って、
それを 12 ビットの配列であるかのように扱うしかない。

例えば、char a[3]; とすると、CHAR_BIT が 8 だとすると
((int)a[0] << 4) | (a[1] >> 4) と
((int)a[1] & 0x0F) << 8 | a[2] を
第 0, 1 要素として扱うわけだ。

193 :デフォルトの名無しさん:03/07/11 20:21
それって12bitしか使わなければいいのでは?

194 :デフォルトの名無しさん:03/07/11 20:28
>>189
頭が固い奴は(ry

195 :デフォルトの名無しさん:03/07/11 20:38
>>187
あれってひとつのメンバーに割り当てられるのは6ビットまでなの?

196 :デフォルトの名無しさん:03/07/11 20:39
ビットフィールドじゃ解決にならないってば

197 :デフォルトの名無しさん:03/07/11 20:40
>>189
12bitで画像処理ってIKONOS画像か?
算術演算のみでビット演算しないんだったら32bit整数で間に合うと思うけど。

198 :179:03/07/11 20:44
>>190
C++は全く齧ったことがないのですが、ちょっと調べてみます。

>>191
12bitの値を32bitの型で受けるんですか。
やってみます。

>>192
>12 ビット長の値の羅列を扱う必要があるって状況なわけね?
はい。その通りです。

ちょっと難しそうですが、例に挙げていただいた通りやってみます。

>>193
12bitしか使わなければいいっていうのは
どういうことでしょうか?

>>197
算術演算のみです。32bitで間に合いますか。
ちょっと考えてみます。

199 :デフォルトの名無しさん:03/07/11 20:45
>>196
それなら191も駄目ってことになるけど。

200 :デフォルトの名無しさん:03/07/11 20:51
具体的にはその12bit整数配列に対してどういう処理が必要になるの?

201 :200:03/07/11 20:58
12bit のintを使おうとせずに、12bitデータが入ったデータ領域に対して処理をするような関数を作っていったほうがいいと思われ。

202 :179:03/07/11 21:02
>>200
ここにある処理と同じことがしたいです。
http://www-6.ibm.com/jp/developerworks/linux/020517/j_l-libtiff.html
基本的には、ただ配列から値を取り出せれば問題ないと思うのですが。


203 :デフォルトの名無しさん:03/07/11 21:16
12bitなのは輝度だけなの?

204 :179:03/07/11 21:22
>>203
はい。
他の要素(サイズとか圧縮方式とかメモとか)は
ヘッダーに格納されていて、別の関数で取り出します。

205 :デフォルトの名無しさん:03/07/11 21:25
答えになっていないと思う。

206 :デフォルトの名無しさん:03/07/11 21:36
>>199
なんでやねん。
ビットフィールドと、ビット演算は違うぞ。

そもそも、ビットフィールドって互換性がぐちゃぐちゃだから、外界とのやり取りにはつかえないし。

(まあ、ビット演算の方もエンディアンの問題が歩けど。)

207 :179:03/07/11 21:36
>>205
失礼しました。
12bitの配列は輝度だけです。
RGB+1の合計4つの12bit整数で1ピクセルができます。

208 :デフォルトの名無しさん:03/07/11 21:37
int12arrを12ビット整数の配列のポインタ
idxを取り出したい12ビット整数の配列のインデックス
として、以下の関数でデータを取り出す。
int GetInt12(unsined char* int12arr, int idx)
{
  int int12;
  if (idx%2) {
    int12 = array[3*idx/2]<<4 + array[3*idx/2+1]>>4
  } else {
    int12 = array[3*idx/2+1]<<8)&0x00000f00 + array[3*idx/2+2]
  }
  return int12;
}
速度が気になるならマクロかinline関数にする。


209 :デフォルトの名無しさん:03/07/11 21:43
>>202
ソース見せられても困るんだけど。
そうじゃなくてさ、int12の配列に対して具体的に何がしたいのか。

indexで要素を取り出すとか、
指定範囲を取り出すとか、
指定範囲に書き込むとか、
コピーするとか、移動するとか。

そういう風に必要な処理を作って、それらを使って最終的な目的を果たせばいいでしょ。

210 :209:03/07/11 21:45
おっと、取り出せばいいって言ってるか。
じゃぁ、>>208で解決?

211 :179:03/07/11 21:56
>>208
サンプルコードまで書いて頂いて、ありがとうございます。
参考にさせて頂いてしっかり身に付けたいと思います。

>>210
はい。解決です。
長々とお騒がせしましてすみませんでした。


レスして頂いた方、ありがとうございました。
とても勉強になりました。

212 :デフォルトの名無しさん:03/07/11 22:05
ビット演算してる最中にエンディアンでハマるようなトロいやつはシスプロに向かん

213 :デフォルトの名無しさん:03/07/11 22:13
エンディアンの確認を忘れてハマルことはたまにあるな。

214 :デフォルトの名無しさん:03/07/11 22:52
>>212
ビット演算してる最中にエンディアンではまるなんてことがあると思ってる奴は、プログラマに向かん。
エンディアンではまるのは、外部とのやり取りか、変なキャストをした時だけだろ。

215 :デフォルトの名無しさん:03/07/11 23:23
外部とのやり取りか、変なキャストをするときだけ特別なのか、あんたは

216 :デフォルトの名無しさん:03/07/11 23:28
>>215
はぁ ?
それ以外で、エンディアンではまる例をあげてみなよ。

217 :デフォルトの名無しさん:03/07/11 23:37
だからハマんねーつってるだろ

218 :デフォルトの名無しさん:03/07/11 23:39
とっても恥ずかしーバグ出して欝な香具師同士で傷のなめ合いでもするスレかここは

219 :デフォルトの名無しさん:03/07/11 23:42
>>217
なんだ、日本語できないクンだったのか...。

エンディアンではまる (可能性がある) のは、外部とのやり取りか、変なキャストをした時だけだろ。

220 :kei:03/07/11 23:50
課題1:3科目(英数理)の点数をキーボードから入力して、それらの点数のうち最も高い点数を表示するプログラムを作りなさい。
自分が作ったのは下のです
#include<stdio.h>
main()
{
int eng,math,sci,max;
printf("英語の点数--->");scanf("%d",&eng);
printf("数学の点数--->");scanf("%d",&math);
printf("理科の点数--->");scanf("%d",&sci);
if(eng>math){
if(eng>sci){
max=eng;
}
else{
max=sci;
}
}
else{
if(math>sci){
max=math;
}
else{
max=sci;
}
}
printf("最高点は%d点です\n",max);
}
でもどうやら「関数」構造でなければならないらしいのですが、その時の講義に法事の為出席できなくて関数がわかりません。
本も読んだのですがプロトタイプが必要とかそれくらいしか理解できなかったです。
基礎論なので難しい関数は使わないはずです。void return ansとか本に書いてあります。
他のスレにも書いたんですが、レスないのでお願いします。


221 :デフォルトの名無しさん:03/07/11 23:56
>>219
うっせえ、日本語以前にC言語できないクソにタメ口たたかれる憶えはない
いつまでもてめえのスキルを当然だと思っていろヘボ

222 :デフォルトの名無しさん:03/07/11 23:59
>>220
その程度なら特に関数はなくても困らないけど、
まぁ関数作るとしたら
3つの値を引数にとって、その中の最大値を返す関数
を作るかな。

int max(int eng, int math, int sci)
{
 /* 中身は自分で考えてちょ */
 return ans;
}
こういうの作って、

printf("最高点は%d点です\n",max(eng, math, sci));
こういうことする。

数学の関数と同じで、関数は引数をとって、結果として値を返す。
その値は数学と同じ様な格好で使う。
printf も scanf も main も関数だし、
それが使えてるなら特に難しいことはないと思う。

あと、main の最後では return 0; を忘れずに。

223 :デフォルトの名無しさん:03/07/12 00:02
ちなみに220はマルチです。

224 :デフォルトの名無しさん:03/07/12 00:05
>あと、main の最後では return 0; を忘れずに。
voidがない処理系だろ、そんくらい嫁

225 :デフォルトの名無しさん:03/07/12 00:09
>>221
> タメ口

彼には、あれがタメ口に聞こえるんだ...。
好意的な解釈する奴だな。(藁

226 :デフォルトの名無しさん:03/07/12 00:11
>>225おいエンディアン、反論できないと自作自演かw

227 :デフォルトの名無しさん:03/07/12 00:12
で。答えは何なの?

228 :デフォルトの名無しさん:03/07/12 00:13
エンディアンではまるやつはバカ


229 :kei:03/07/12 00:15
ご丁寧にありがとうございます。
せっかく教えていただいたのに答えがわかりません。関数なしのプログラムが僕の精一杯なのかも…
223さん、マルチってどういった意味でしょうか?
224さん、それはどういうことですか?
なんだか聞いてばかりでごめんなさい。お願いします。

230 :デフォルトの名無しさん:03/07/12 00:15
エンディアンうそつかない。

231 :デフォルトの名無しさん:03/07/12 00:22
ハオハオ

232 :デフォルトの名無しさん:03/07/12 00:25
>>223
> 他のスレにも書いたんですが、レスないのでお願いします。
>>224
main() だから戻り値の型は int だろう。
>>225
8〜23行目をコピペして max → ans にして、
int ans; をつければ終わりだよ。

233 :デフォルトの名無しさん:03/07/12 00:29
>>232
>main() だから戻り値の型は int だろう。

そうだよ。それを百も承知で国家する場合を知らんらしいな。

234 :デフォルトの名無しさん:03/07/12 00:34
国家する?

235 :デフォルトの名無しさん:03/07/12 00:36
ねむ。。。漏れもそろそろ国家するぞ

236 :デフォルトの名無しさん:03/07/12 00:43
国家とリス

237 :デフォルトの名無しさん:03/07/12 00:43
C++ では main の return 0; を省略することは規格で許されている。
C では main の return 0; を省略することは規格で許されていない。

238 :デフォルトの名無しさん:03/07/12 00:52
そんな役所気質な...

239 :デフォルトの名無しさん:03/07/12 00:55
>>226-228
わかりやすい、自演ありがとう。

で、君は何に反論して欲しいんだ ? (藁

240 :227:03/07/12 00:59
真実はいかに?俺はどっちでもいいんだけど

241 :デフォルトの名無しさん:03/07/12 00:59
>>230で結論出たんだからもういいじゃん。

242 :デフォルトの名無しさん:03/07/12 01:02
キャストに変も糞も無いと思うけど?

243 :kei:03/07/12 01:06
>>232
レス遅くなってすいません。
どうもありがとうございました。
良い人ばかりで嬉しいです。

244 :199:03/07/12 01:15
あーなんか喧嘩になっとる。。。

>>206
互換性がぐちゃぐちゃ?12bit割り当てたつもりが実際はそれ以上割り当てられることもあるとか?

245 :デフォルトの名無しさん:03/07/12 01:27
>>242
はぁ ? 腐るほどあるけどな。
まあ、出会ったことないなら、それに越したことはないよ。

>>244
それに加えて、MSB/LSB のどっちからビットを割り当てるとかがぜんぜん決まってないよ。
>>214 が書いてる通り、キャストや外部とのやり取りしないなら問題ないけどな。

246 :199:03/07/12 01:32
>>245
この場合はどちらから割り当てるかってのは関係ないと思うけど、「それに加えて」ということは244で言ったことがありえるの!?

247 :199:03/07/12 01:35
あー、関係ないと言ったのは例えばbitfield.member=12345;とやった時(12345を受けるだけの大きさを持っている)、
ビットパターンがどうであろうとbitfield.memberの値は12345でしょ?ということ。

248 :デフォルトの名無しさん:03/07/12 01:37
>>242
int a = 0xFF000000;

*(char*)&a はなーんだ?

249 :デフォルトの名無しさん:03/07/12 01:39
>>245
あんた、何の為にキャストすんの?
ある型を無理矢理、他の型に変換する為に必要だからじゃないの?
それとも、何か他に笑えるキャストがあるとでも?

250 :デフォルトの名無しさん:03/07/12 01:41
くだらん! おまえのはなしはくだらん!

251 :デフォルトの名無しさん:03/07/12 01:49
>>248
int a=1;にしろよ。0xFF...が入らないという問題も起こりうるだろ。

252 :デフォルトの名無しさん:03/07/12 01:50
くだらない事で議論するな。この、方形ヤロウども!!

253 :デフォルトの名無しさん:03/07/12 02:02
例えば、速度重視の場合でアライメントが16bitだったとしよう、
で数パターンしかない情報が3つと、フラグが1つの情報が絶対に必要。
そうしたら、普通は1-5-5-5bitで16bit内に情報を詰めると思うんだけど?
勿論キャストなんてしないしですが、エンディアンとやらは問題になりませんか?
値セットや値を取り出すとき。<<>>

254 :デフォルトの名無しさん:03/07/12 02:04
>>251
これって、ソフト的なエンディアン判定に使えるんだよな。

255 :デフォルトの名無しさん:03/07/12 02:04
>>253
最後の<<>>はなんですの?

256 :デフォルトの名無しさん:03/07/12 02:07
>>253
[0] [1]
とデータが入っていると、

リトルエンディアンの場合
[1] << 8 + [0]
が 16 ビット値になる。

ビッグエンディアンの場合
[0] << 8 + [1]
が 16 ビット値になる。

257 :デフォルトの名無しさん:03/07/12 02:11
>>253
ならない
が、通常、そのデータを外部に保存する必要がある為
その時にエンディアンが問題となる

>>255
シフトでしょ

258 :デフォルトの名無しさん:03/07/12 02:13
>>256
それだと、セット時に値を壊さないか?

259 :デフォルトの名無しさん:03/07/12 02:13
x <<>> = 6; とか出来たらちょっと便利かも。

260 :デフォルトの名無しさん:03/07/12 02:14
>>258
どの値が壊れるの?

261 :デフォルトの名無しさん:03/07/12 02:16
>>257
まったくもって訳わからんよ?
何故、値を保持する目的のデータを外部に
ま・た・保持しなおすの?

よっぽど外部以外の事にしたくなんだね。

262 :デフォルトの名無しさん:03/07/12 02:16
>>259
どう言う値が入ると便利だと思ってるの?

263 :デフォルトの名無しさん:03/07/12 02:21
>>262
上位nビットをクリアするときとか。
nが変数のとき

x <<>> = n; で上位 n bitクリアできる。

ようするに
x <<= n;
x >>=n;

エンディアンのことは何にも考えてないので突っ込まないでね。

264 :デフォルトの名無しさん:03/07/12 02:24
>>261
>>253が言ってる事は
typedef short i16 ; /* short は16bit */
typedef struct { char flag ; char data[3] ; } info ;
これを、キャストを使わずにシフトとビット演算のみで
infoの値をi16にセットしたりi16からinfoの値を取り出す事で
エンディアンとは全く関係ない

265 :デフォルトの名無しさん:03/07/12 02:27
>>264
要するにその構造体をパックしたいの?

266 :デフォルトの名無しさん:03/07/12 02:27
>>263
&= 使え。

267 :デフォルトの名無しさん:03/07/12 02:27
>>263
関係あるのはエンディアンでは無く算術シフトやね

268 :264:03/07/12 02:29
>>265
>>253の説明から、それ以外、どのように解釈すれば良いと?

269 :デフォルトの名無しさん:03/07/12 02:29
>>264
で、リトルエンディアンとビッグエンディアンで
同じコードで問題無いの?
どっちにシフトするの?
って話じゃないの?

270 :デフォルトの名無しさん:03/07/12 02:32
>>268
あ、俺は261じゃないよ。ずっと見ているだけだった。
もしそうならエンディアンは関係ないなぁ。
関係あるのはファイルに書き出すときと読み出すときだな。

271 :デフォルトの名無しさん:03/07/12 02:34
>>269
int i = 257 >> 1 ;
この結果がエンディアンで変わるとでも?

272 :デフォルトの名無しさん:03/07/12 02:35
>>270
メモリでもエンディアンは問題になるが?

273 :デフォルトの名無しさん:03/07/12 02:36
>>272
ファイルからの読み出し時と書き出し時にバイトオーダーを統一する処理をするだろ?

274 :デフォルトの名無しさん:03/07/12 02:36
>>274
はぁ?
Bit処理って書いてあるだろ?

275 :デフォルトの名無しさん:03/07/12 02:37
>>267
こうだ!

x &= ~0 >> n;

俺って頭いい〜。

276 :275:03/07/12 02:39
アンカー間違えました
>>266でつ

277 :デフォルトの名無しさん:03/07/12 02:39
今日は、とても芳ばしい香具師がいるようで…

278 :273:03/07/12 02:39
ネットワークでのhtonlやntohlみたいに。

279 :デフォルトの名無しさん:03/07/12 02:40
>>275
x &= ~0u >> n;

符号ありで符号が残されるかどうかは未定義だけど、
符号なしなら符号ビットは残されない...よね?

280 :デフォルトの名無しさん:03/07/12 02:41
>>279
うん

281 :デフォルトの名無しさん:03/07/12 02:45
>>279
xを符号なしにキャストすれば
~0uも符号無しの演算になると思う…

282 :デフォルトの名無しさん:03/07/12 02:48
で、リトルエンディアンとビックエンディアンで
bit = 1;//ビットのつもり
bit << 6;//6ビット目
valure | bit;//セット
見たくセットして問題ないの?
例えば、マスク処理とかで
valure & 0xf0;//上位ビットが欲しい
なんて場合でも?

283 :281:03/07/12 02:48
良く考えたら、やっぱり、駄目やね…

284 :デフォルトの名無しさん:03/07/12 02:51
>>282
そういうのは問題ない。

285 :デフォルトの名無しさん:03/07/12 02:53
>>282
>bit << 6; /* 6ビット目と言う表現は別にして */
問題ない
ただし、ファイルから読み込む時、ファイルに吐き出す時は要注意

286 :デフォルトの名無しさん:03/07/12 02:53
>>282
キャストがなければ大丈夫。
intをキャストでcharに分割したときとか、その逆とかで問題が起きる。

287 :デフォルトの名無しさん:03/07/12 02:54
0xf0でマスク取ってるのは問題にならないの?

288 :285:03/07/12 02:55
>ただし、ファイルから読み込む時、ファイルに吐き出す時は要注意
は、この場合、全く関係無かったから、無視してちょ

289 :デフォルトの名無しさん:03/07/12 02:55
>>287
対象のエンディアンが変われば、マスクのエンディアンだってかわるっしょ。

290 :デフォルトの名無しさん:03/07/12 03:00
>>289
だから
valure & 0xf0; /* 上位はエンディアンに関係なく上位だ */
エンディアンを考慮しなければならない時は
(異なるエンディアンの)ファイルをバイト単位で読み込んで
そのまま、何もせずに、マスク処理をほどこす時

291 :デフォルトの名無しさん:03/07/12 03:02
そりゃ違うフォーマットのデータだものな。

292 :デフォルトの名無しさん:03/07/12 03:03
>>290
突っ込む相手を間違えてるぞ。

293 :290:03/07/12 03:09
>>292
書き込んだ直後に気付いたけど
>>287の答えとしては、少し不適切だから
そのままでも良いかと思わなくもなかったり…

294 :デフォルトの名無しさん:03/07/12 03:24
まぁね。

295 :教えてください:03/07/12 08:05
/*InputTest.cpp*/

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

char *ary[1000];
void test();
void main()
{
test();
printf("\n\n");
}

void test() {
char c;
int i=0;
do{
printf("\nEnter string: ");
char s[256];
ary[i] = gets( s );
printf("You typed: %s", ary[i] );
i++;
printf("\n\t****Press any key to continue or quit to press (q)**** ");
c = getch();
}while( c != 'q' );
printf("\nHere:\n");
for( int j=0; j < i; j++ )
printf("\n%s", ary[j] );
}

296 :295:03/07/12 08:09
上記のコードだと全て、最後のインプットのみになってしまいます。
本来なら、
dog
cat
bird
となるはずですが、どなたか原因が分る方教えてください。

Enter string: dog
You typed: dog
****Press any key to continue or quit to press (q)****
Enter string: cat
You typed: cat
****Press any key to continue or quit to press (q)****
Enter string: bird
You typed: bird
****Press any key to continue or quit to press (q)****
Here:

bird
bird
bird

Press any key to continue

297 :295:03/07/12 08:11
補足です。本来なら
dog
cat
bird
となるはずなのに、
bird
bird
bird
となってしまいます。なぜでしょうか?どなたか原因が分りますか?

298 :_:03/07/12 08:16
http://homepage.mac.com/hiroyuki44/jaz09.html

299 :デフォルトの名無しさん:03/07/12 08:16
>>295
ポインタを理解してください。

300 :デフォルトの名無しさん:03/07/12 08:17
>>297
s[256]はループするたびに書き換わる。
aryにはその領域へのポインタしか入れないんだから、常に最後に入力したものが表示されて当然。


301 ::03/07/12 08:24
>>300
ありがとうございます。早速
char s[256];
をループの前、にもっていきましたが、結果はおなじでした。
そのあと、グローバル・バリアブルにしましたが、やはり、
結果は同じでした。


302 :297:03/07/12 08:26
でも>>300さん、応えてくださって感謝します。

303 :デフォルトの名無しさん:03/07/12 08:27
>>301
なぜそんな事する?


304 :297:03/07/12 08:30
>>303
ポインタに慣れていないので、今の自分にはそれが精一杯です。
しかし、charのポインタのアレーを使うことが条件なのです。

305 :300:03/07/12 08:33
>>301
要するに>>299
ポインタ配列に入れた値は全てsを指しているからそうなるの。


306 :297:03/07/12 08:38
>>305
要するに配列のインデックスをインクリメントしても、全てのインデックス
を指してしまうのでしょうか? インデックスごとに違うものをさすことは
不可能なのでしょうか?

307 :300:03/07/12 08:41
>>306
sを二次元配列にするなどして、ループするごとに違う領域に書き込むようにすればよい。
今のままでは大勢で一人を指さしているようなもの。

308 :デフォルトの名無しさん:03/07/12 08:41
ary[i] = gets( s );

ary[i] = strdup(gets( s ));
にでもしろ。

>しかし、charのポインタのアレーを使うことが条件なのです。
宿題なら余所いけ。

309 :297:03/07/12 08:43
>>305
char *c[] = {"dog", "cat", "bird" };
for( int i=0; i < 3; i++ )
printf("%s", c[i] );

このようにテストした時は、ちゃんと大丈夫だったのに。
どうすれば、キーボードのインプットをそれぞれのインデックスに
アサインできるのでしょうか?

310 :297:03/07/12 08:53
>>308
ありがとうございます。strdup というファンクションは私の5冊の本の
いずれにもでてないので、知りませんでした。感謝します。

>>307
ありがとうございます。2D配列を使いたいのですが、ポインタの練習
なので、それはだめとのことです。Javaのように簡単ではないですね。
ことでそ。


311 :300:03/07/12 08:54
ところで、>>295でコンパイルが通るということはC++としてコンパイルしているんだな。
それと、よく見たらs[]ってブロックを抜けているじゃない・・・
たまたまデータが消えずに残っていたんだな。

312 :デフォルトの名無しさん:03/07/12 08:56
>ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

313 :300:03/07/12 08:57
あれ?ブロックを抜けた後じゃなくて関数から抜けたあとだっけ?
自動変数が消滅するのは。

314 :デフォルトの名無しさん:03/07/12 09:00
>>313
ブロックでしょ、
たまたま、毎回同じ所に確保されてるっだけかと。

315 :297:03/07/12 09:00
>>311
>それと、よく見たらs[]ってブロックを抜けているじゃない・・・
すみません、この意味をおしえてください。

>>312
今回は知らなかったけど、次からそうします。

316 :300:03/07/12 09:09
>>315
ブロック(ここではdoの)を抜けた後にブロック内で定義した自動変数sを、ブロックを抜けたあとにポインタを介してアクセスしてもいいのかどうかと・・・・
勘違いしていることがあるかもしれないので自信ない。

317 :デフォルトの名無しさん:03/07/12 09:10
朝っぱらから書き込み激しいな

318 :300:03/07/12 09:11
少なくともsという名前にはアクセスできないけど、その領域はどうだったかなぁと。
>>314さんはブロックを抜ければその領域は不安定なものになると言っているけど。そうなるのは関数を抜けたあとかもしれないので。

319 :デフォルトの名無しさん:03/07/12 09:13
厨房キター!
延髄反射で質問を返してきまふ。

320 :デフォルトの名無しさん:03/07/12 09:14
延髄かよ

321 :297:03/07/12 09:15
>>316
sはループの中のみと思ったので、ポインタが絡むとそこまで気を
つかわなければいけないんですね。ありがとうございました。

>>317
こちらは今、金曜午後8時です。

322 :デフォルトの名無しさん:03/07/12 09:15
とりあえず解法としては
sを2次元にしてary[i]=s[i];とするかmallocしかないと思うのだがどうか?
dog,cat,birdしか入力されないとわかってるならほかにもあるが。

323 :300:03/07/12 09:16
>>319
申し訳ない。
こんなこと考えたこともなかったもので。自動変数のアドレスを返すというのは考えたことがあるんだけど。

324 :デフォルトの名無しさん:03/07/12 09:19
>>310
ANSI Cにstrdupはないから

325 :300:03/07/12 09:22
イメージとしてはループするたびs[]をつくるんだから、毎回消えるとも言えるか。
じゃあ>>314さんの言うとおりでいいのか。

326 :デフォルトの名無しさん:03/07/12 10:33
つまりだ、>>295はスレ違いの質問をしているわけだ、と。
>>299-324は釣られてしまった、と。
阿呆な回答なんかしてるんじゃね、と。

>>295
宿題丸投げなら宿題スレへ行け、と。
C++の質問したいならC++スレで叩かれろ、と。
Cで書きたいならはじめからファイル名が間違っているぞ、と。

327 :デフォルトの名無しさん:03/07/12 11:05
HP-UX11iのHP Cですが、oracle9.2.0のライブラリをリンクしたCプログラムで
dirname()関数の動作が異なってしまいます。

cc -o test1 -L/oracle/app/oracle/product/9.2.0/lib32/ -lclntsh test1.c

通常は、dirname()の引数で指定してパス名文字列が書き換わることはないですが、
上のコマンドラインでclntshをリンクした場合、dirname()の引数に指定したパス名
文字列からファイル名が削除されてしまいます。
(dirname()のリターン値が示す文字列と同じになる)

何かご存知ないですか?

328 :デフォルトの名無しさん:03/07/12 11:37
>>327
>何かご存知ないですか?

知ってる。しかしスレ違いなので書かない。

329 :327:03/07/12 14:11
>>328
HP板に逝くべきでしょうか?

330 :デフォルトの名無しさん:03/07/12 14:35

米オークションサイトのeBayのツールを日本語化しています。
Resource Hackerで日本語に置き換えているのですが文字化けが発生してしまいます。
日本語化のサイトを見て回ったのですがこのソフトのタイプの対応例が無く、
どのリソースの始めの部分にも

STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

が書いてあったので検索しました所、
かろうじて英語で表示しろという命令らしい?事がわかりました。
fontの指定するリソースが無いので上記の文章で
英語として表示させている?と思うのですが、
これをどのように置き換えれば日本語が表示されますでしょうか?
どなたかお教えいただければ幸いです。

331 :デフォルトの名無しさん:03/07/12 16:53
>>330
>>1
スレ違い

332 :デフォルトの名無しさん:03/07/12 17:56
C++マンセー

333 :デフォルトの名無しさん:03/07/12 18:00
C++はウンコカス

334 :デフォルトの名無しさん:03/07/12 18:40
333に反応するやつはさらにカス

335 :デフォルトの名無しさん:03/07/12 18:58
>>334
自分のことか?w

336 :デフォルトの名無しさん:03/07/12 19:25
一通りCの基本はできるようになったんですが、
次に何をしようか悩んでます。
APIの使い方を覚える?
それとも、SDKでも覚えてWinアプリ作成?

337 :デフォルトの名無しさん:03/07/12 19:27
>>336
スレ違い
>>1読め

338 :デフォルトの名無しさん:03/07/12 20:01
>>336
http://pc2.2ch.net/tech/#4

339 :デフォルトの名無しさん:03/07/12 20:02
>>338
それはネタか?

340 :デフォルトの名無しさん:03/07/12 20:09
TCHARとはなんでしょうか?

341 :デフォルトの名無しさん:03/07/12 20:39
先生

342 :デフォルトの名無しさん:03/07/12 22:49
関数の中に関数を作る方法を教えてください。

343 :デフォルトの名無しさん:03/07/12 22:58
>>336
SDKに1票

344 :デフォルトの名無しさん:03/07/12 22:59
>>342
C はやめて、Pascal 使え。

345 :デフォルトの名無しさん:03/07/12 23:00
>>343
わざと吊られたんだろ?そうだよな?そうだと言ってくれー!

346 :デフォルトの名無しさん:03/07/12 23:05
>>340
これです。
#ifdef UNICODE
typedef WCHAR TCHAR , *PTCHAR ;
#else
typedef char TCHAR , *PTCHAR ;
#endif

charやWCHARでなくてTCHARを使っていれば、文字コードが
ワイドキャラクタ環境でもマルチバイト環境でもソースの変更
の必要性がなくなる。

はなっからワイドキャラクタ(=UNICODE)を想定してなければ
charで十分。



347 :デフォルトの名無しさん:03/07/12 23:10
初歩的な質問なのですが、gccのオプションの-cってどんな意味があるんでしょうか?

348 :デフォルトの名無しさん:03/07/12 23:11
>>347
マニュアルに書いてあるだろ?

349 :デフォルトの名無しさん:03/07/12 23:11
>>342
C++ なら工夫すれば作れるんだけどなぁ。
ローカルクラスの static メンバ関数にすれば。

350 :デフォルトの名無しさん:03/07/12 23:13
>>348
コンパイルのみでリンクしないと書いてあるのですが、
リンクしないという意味がよくわからなくて。。。

351 :デフォルトの名無しさん:03/07/12 23:13
同じこと考えてる奴がもう一人いたか。。

352 :デフォルトの名無しさん:03/07/12 23:14
>>347
オプション -o はなんですか?これがヒント。

353 :デフォルトの名無しさん:03/07/12 23:16
>>350
オブジェクトファイルをつくって終わり?

354 :デフォルトの名無しさん:03/07/12 23:18
もうちょいヒントをください

355 :デフォルトの名無しさん:03/07/12 23:20
>>354
とりあえず本でも買って読めよ、
金が無いなら図書館に行けばあるだろう。
大抵の本に書いてある。

こんな事くらいで聞いてるくらいじゃ、この先ずっと聞きっぱなしか?

356 :デフォルトの名無しさん:03/07/12 23:21
>>354
ここは初心者質問スレじゃねーんだよ、かえれ!

357 :デフォルトの名無しさん:03/07/12 23:25
>>354
a.c -> a.o
b.c -> b.o
a.o+b.o+etc -> a.out
上2行がコンパイルで最下行がリンクです。

358 :デフォルトの名無しさん:03/07/12 23:27
>>354
なぜこんなオプションがあるかというと。
たとえばオブジェクトライブラリを作るときに便利だからです。

359 :340:03/07/12 23:31
>>346
ありがとう
どこのヘッダーにその定義があるのでしょうか?
windows.hかな?

360 :343:03/07/12 23:36
>>345
いえ、わざとではありません。
釣られてもないです

361 :346:03/07/12 23:36
>>346, 359
windef.hかな?

362 :デフォルトの名無しさん:03/07/12 23:50
>>359
tchar.h

363 :デフォルトの名無しさん:03/07/12 23:58
>>351 誰の事よ

364 :デフォルトの名無しさん:03/07/13 00:24
>>349
はぁ ? もうちょっと具体的に書いてくれると、もっと笑えると思う。

365 :デフォルトの名無しさん:03/07/13 00:33
これじゃあかんのか?
void f()
{
 struct Inner {
  static void foo() {
   std::cout << "foo()" << std::endl;
  }
 };
 Inner::foo();
}


366 :デフォルトの名無しさん:03/07/13 00:35
>>364 >>365
スレタイみれ。

367 :デフォルトの名無しさん:03/07/13 00:40
>>366
そんなことは分かってるし。

368 :デフォルトの名無しさん:03/07/13 00:41
>>367
そんなことは分かってるし。 

369 :デフォルトの名無しさん:03/07/13 00:42
つまらん質問ですがおまいら聞いてください。
"C" はなんで "C言語" と言うのでしょうか!?

Fortran COBOL Pascal BASIC

"言語" ってつけるとなんか変に聞こえるんだけど。

370 :デフォルトの名無しさん:03/07/13 00:44
石田先生の訳に準拠
以上

371 :369:03/07/13 00:51
>>370 ガーン そんだけですか。ガックシ

372 :デフォルトの名無しさん:03/07/13 00:57
俺は C と呼ぶことにしているがな。

373 :デフォルトの名無しさん:03/07/13 00:58
>>372
えっち

374 :デフォルトの名無しさん:03/07/13 01:00
>>369
漏れもCダケで通じるときはCだぞ。
逆に他の言語も後ろに言語って付けることがないとは言えないな〜。

375 :369:03/07/13 01:05
みなさん

 すぃ〜

ですか。よかった。なんか周りが "しーげんご" という人ばっかりで。
( "しー" じゃないですよね… )

376 :デフォルトの名無しさん:03/07/13 01:07
>>369
もう少し C 言語の歴史を勉強シレ!

377 :デフォルトの名無しさん:03/07/13 01:12
でも、イパーン人に対してだけは C 言語って使うな。
C だけだと通じないことが多いだろうし。

378 :369:03/07/13 01:12
>>376
へへぇ〜!
顔あらっておととい来ます。

みなさんどもでした!

379 :よし@C++:03/07/13 01:47
英語・国語・数学の点数を入力して、それらの点数のうち、どれか一つでも90点以上であれば“合格”、
または平均点が60点以上であれば“合格”と表示するプログラムを、関数構造を使って作成せよ。
という課題がでたんですが、正直全然わかりません。基礎論の授業の前期テストなんでホントは簡単なはずなんですが…
勉強がたりなかったようです(:_;) どなたか教えていただけませんか?

380 :デフォルトの名無しさん:03/07/13 01:47
C++かこっちか迷いましたがここに書きます

func().a;

こういう風にできるらしい
びくーりしたーよ

381 :デフォルトの名無しさん:03/07/13 01:48
>>379
(・∀・)C/C++の宿題やらせてください。ver10
http://pc2.2ch.net/test/read.cgi/tech/1057070174/

382 :デフォルトの名無しさん:03/07/13 01:57
>>379
名前から見ると C++ の質問か?
C++ はスレ違いだぞ。
まぁ、確かにそれは C で十分なわけだが。
そういや、何か上のほうでもちょっと違うけど似たような質問があったなぁ。

点数を入力する関数、
どれか1つでもある点数以上であれば真を、さもなくば偽を返す関数、
平均点を返す関数、
の3つを作ればそれでええんでないかな(main 除く)。

>>380
C++ なら普通に使う。
まぁ、最初は違和感があるやもしれん。
俺もそうだった。

383 :デフォルトの名無しさん:03/07/13 02:02
>>380
これは何を表してるのでしょうか?

384 :よし@C++:03/07/13 02:03
>>382
スレ違い申し訳ありません。失礼しました。
CとC++の違いも分からないような素人なので。以後気をつけます。

385 :デフォルトの名無しさん:03/07/13 02:08
>>383
点が見えずらいかもしれんが、
こんな感じ

struct AAA func();

で、構造体AAAがfuncから帰ってきたから、AAAのメンバにアクセスすると
C++だけどね

386 :デフォルトの名無しさん:03/07/13 02:08
>>383
戻り値が構造体なら
そういう風に使うこともあるってことさ。

387 :デフォルトの名無しさん:03/07/13 03:50
*func();
こうやって戻り値を間接参照するってのもあまりやらないな。

388 :デフォルトの名無しさん:03/07/13 03:55
非 const な参照返しなら func() = 0; てなことも。
まるで関数に代入しているよう。

389 :デフォルトの名無しさん:03/07/13 03:55
C++ なら
func()->foo(); ってこともするけどな。

390 :デフォルトの名無しさん:03/07/13 03:57
>>388
スレち(ry

391 :デフォルトの名無しさん:03/07/13 04:00
>>390
違いを見分けられる男なんですね。

392 :デフォルトの名無しさん:03/07/13 04:01
参照なんてCにはないじゃん

393 :デフォルトの名無しさん:03/07/13 08:03
>>336
やっぱSDK!

394 :デフォルトの名無しさん:03/07/13 08:14
#ifndefと
#if !definedって
何が違うんでしょうか?
親切な方教えていただければ幸いです。

395 :デフォルトの名無しさん:03/07/13 08:27
Cだと構造体へのポインタを返して
func()->a
の方が多いかな?
でも、
func().a
も小さい構造体や共用体を返すときには使うよ。

396 :デフォルトの名無しさん:03/07/13 08:28
MFCとSDKって何が違うんですか?
普通Windowsアプリを作るときはどちらを使いますか?
言語はどれを使ったらいいんですか?

397 :デフォルトの名無しさん:03/07/13 08:30
>>394
歴史の違いもあるけど、
#if defined(MACRO1) && defined(MACRO2)
って使い方ができるようになった。
#ifdef/#ifndef
だけだとこういうことはできない。

398 :デフォルトの名無しさん:03/07/13 08:31
>>396
スレ違い。

399 :デフォルトの名無しさん:03/07/13 08:38
>>394
同じじゃないの?

400 :399:03/07/13 08:40
>>397
そうだったのか・・・ Σ(゚Д゚;
漏れの勉強不足でした・・・

401 :デフォルトの名無しさん:03/07/13 08:41
>>397
&&なら
#ifdef MACRO1
#ifdef MACRO2
〜〜〜
#endif
#endif
これでできると思うけど。

402 :_:03/07/13 08:52
http://homepage.mac.com/hiroyuki44/

403 :394:03/07/13 09:07
>>397
>>401
すっきりしました
ありがとうございます

404 :デフォルトの名無しさん:03/07/13 10:56
|| だとちょっとね。

405 :デフォルトの名無しさん:03/07/13 13:30
0〜100までの数をランダムで取得して、
それを表示したいんですが、どうやって乱数を
発生させたらいいですか?

406 :デフォルトの名無しさん:03/07/13 13:33
>>405
こんな所で聞くより、googleで検索すれば瞬時に分かるんだが。

407 :デフォルトの名無しさん:03/07/13 13:37
>>405
rand()

408 :デフォルトの名無しさん:03/07/13 13:37
>>394
#elif の場合は、
#elifdef, #elifndef ってのがないから、
defined ってのがどうしても必要になる。

409 :デフォルトの名無しさん:03/07/13 13:39
int a=rand(1^100);
printf("%d",a);

410 :デフォルトの名無しさん:03/07/13 13:47
>>409
( ´_ゝ`)プッ

411 :デフォルトの名無しさん:03/07/13 14:08
なぜ俺はこんなに天才なんですか?

412 :デフォルトの名無しさん:03/07/13 14:09
>>409
srand()もコールしる!

413 :デフォルトの名無しさん:03/07/13 14:09
そんなこともわからないようじゃ天才とは言えんな

414 :デフォルトの名無しさん:03/07/13 14:12
>>413
ここが2chだと言う事を忘れるな。

天才→天災

415 :デフォルトの名無しさん:03/07/13 14:40
WinMainが未解決ってどういうことですか?

416 :デフォルトの名無しさん:03/07/13 14:41
>>415
問題が山積ということです。

417 :デフォルトの名無しさん:03/07/13 14:42
迷宮入り

418 :デフォルトの名無しさん:03/07/13 14:44
>>404
とりあえず、
#ifdef MACRO1
#define MACRO1OR2
#endif
#ifdef MACRO2
#define MACRO1OR2
#endif
#ifdef MACRO1OR2
〜〜〜
#endif
ぐらいか。

>>408
ネストすればいいだけだろ。
#ifdef xxx
〜〜〜
#else
#ifdef yyy
〜〜〜
#else
〜〜〜
#endif
#endif

>>413-414
下らん餌に食いつくなよ。

419 :デフォルトの名無しさん:03/07/13 14:47
大学の参考書だけでは足りないので、本屋で違ったのを買おうと思って
いるのですが、どの参考書がいいでしょうか?
この参考書を使っているがいいというのがあれば教えてください。

420 :デフォルトの名無しさん:03/07/13 14:47
>>415
WinMainを記述してないと言う事。ウインドウズアプリではWinMainが必要。
逆にコンソールアプリではMainが必要。
http://pc2.2ch.net/test/read.cgi/tech/1056280510/l50
で聞くといいよ。

421 :デフォルトの名無しさん:03/07/13 14:48
Mainと書いたらコンパイルエラーがでますた。

422 :デフォルトの名無しさん:03/07/13 14:49
>>419
足りないところを補う本。

423 :デフォルトの名無しさん:03/07/13 14:55
感じない日々を補うための映画ならば泣けるのに

424 :419:03/07/13 14:56
>>422
そういった名前の本があるのですか?

425 :デフォルトの名無しさん:03/07/13 15:20
>>421
そんなコンパイラは捨てろ。
普通は、リンクエラーだ。

426 :デフォルトの名無しさん:03/07/13 16:24
なぜ俺はこんなに最強なんですか?

427 :デフォルトの名無しさん:03/07/13 17:12
すんません、簡単な質問なんですけど
現在コンパイラはccを使ってます。
一般的にccとgccってどっちが早いんでしょう?
どっちのほうが使ってる人多いんでしょうか?
ネットで検索かけてもよくわかりませんでしたので
どなたか教えてください

428 :デフォルトの名無しさん:03/07/13 17:15
cc はコマンド名。
Solaris だったら Sun C Compiler だろうし、
他のハード/OS なら gcc の別名かもしれない。

429 :デフォルトの名無しさん:03/07/13 17:15
cc はユーザーフロントエンドだっけ?
ccはgccを呼んでいるから、直接gccを呼んだほうが早いんちゃう?

430 :479:03/07/13 17:16
単なるエイリアスか。
ならいっしょかな。

431 :479:03/07/13 17:18
>>427
ちなみに使っているのが多いのはgccだろうな。
>>428の理由で ccが動く処理系よりもgccの動く処理系のほうが多いから。

432 :427:03/07/13 17:21
みなさんレスありがとうございます。
これからはgccを使っていこうと思います。

433 :デフォルトの名無しさん:03/07/13 19:47
エイリアスというかシンボリックリンク。

434 :デフォルトの名無しさん:03/07/13 20:28
なぜ俺はこんなに最狂なんですか?

435 :デフォルトの名無しさん:03/07/13 20:30
printfの魅力にとりつかれたから

436 :デフォルトの名無しさん:03/07/13 20:57
たまには保守しとこ。落ちたらいやだし。

437 :デフォルトの名無しさん:03/07/13 22:23
>>427
質問が不正確だぞ
プログラミングでは「早い」と「速い」を使い分けろ
それから翻訳速度と実行速度のどっちを問うているのかも
いいか、『ものすごく』重要だ
おまえがそもそもプログラミングを学ぶこと自体の意義にかかわることだ

人が多いかどうかはゲスな問題だ
おまえは世の中の何の役に立ちたいんだ?
もしかして、究極に残酷な問題が根底にあるかも知れんぞ

438 :デフォルトの名無しさん:03/07/13 22:27
キモイ

439 :デフォルトの名無しさん:03/07/13 22:32
コワイ

440 :デフォルトの名無しさん:03/07/13 22:34
てか、無茶なことを言っている >>429 への
ツコーミは禁止なんですか?

441 :デフォルトの名無しさん:03/07/13 22:40
スレ違いだから禁止

442 :デフォルトの名無しさん:03/07/13 22:47
究極に残酷な問題が根底にあるから禁止

443 :デフォルトの名無しさん:03/07/13 23:51
LPDWORDって、unsigned long*
だったんですか?
int型のポインタ渡そうとしたら起こられましたけど

444 :デフォルトの名無しさん:03/07/13 23:53
>>443
スレ違い。

名前からしてポインタ

445 :デフォルトの名無しさん:03/07/13 23:56
unsigned long far*
とみた

446 :デフォルトの名無しさん:03/07/14 00:08
>>444
windowsスレのほうですか?
お邪魔しました

447 :デフォルトの名無しさん:03/07/14 00:11
環境依存質問なんですが、cygwin + g++ 3.2 で
malloc で 1420 バイトまでしか確保できないんです。
それ以上確保しようとすると Segmentation fault します。
(C++ の) new char[] でも同様で例外さえ投げずにコア吐きます。
そこまでにヒープを明示的に使っている個所はなく、
メモリが足りないとは思えません。また malloc やメモリアロケータを
置き換えたりもしていません。
何故こんな事になってしまっているのでしょうか?

448 :444:03/07/14 00:11
int型の"ポインタ"と言っているな。見間違えた。見当違いなレスをしてしまった。

449 :デフォルトの名無しさん:03/07/14 00:12
>>447
mallocを呼ぶとセグメンテーション違反?
信じられないな・・・

450 :447:03/07/14 00:14
環境を書くのを忘れていました。
80486でメモリは1Mです。


451 :447:03/07/14 00:14
追記です。
malloc(1420) の直後に
malloc(1) としても駄目です。
はじめから
malloc(1421) でも駄目です。
挙動としてはメモリ不足にも見えなくはないんですが
それなら 0 が返ってきますよね?

452 :デフォルトの名無しさん:03/07/14 00:16
>>451
malloc(1421)とだけ書いたコードでもそうなるの?

453 :447:03/07/14 00:17
>>450
それなら理由もわかるんですが…。
本当は 8086 で 640k ですた!

なんちゃって、本当は P4 で 1024M です。

454 :デフォルトの名無しさん:03/07/14 00:19
>>447
実際にエラーを起こす、出来るだけ簡単なコードを晒してみそ

455 :447:03/07/14 00:19
>>452
はい、>>451 で書いた感じになります。
1420 単体は OK で、はじめからそれ以上でも、
その後に追加でも NG です。


456 :デフォルトの名無しさん:03/07/14 00:22
#include <stdlib.h>
int main()
{
malloc(1421);
return 0;
}

これだけでセグメンテーション違反・・・・やっぱり信じられない。

457 :デフォルトの名無しさん:03/07/14 00:23
バッファーオーバーなんとやら?
どっかでメモリをおかしな状況にしてるとか?

458 :デフォルトの名無しさん:03/07/14 00:24
>>456
ちゃうやろ
そこまでにとかいているから、他の処理部分もあるんやろ?
でなきゃやってられねーぜアニキ

459 :452:03/07/14 00:25
>>458
452の質問に「はい」と答えているから・・・

460 :デフォルトの名無しさん:03/07/14 00:26
>>447
レッツ再起動

461 :447:03/07/14 00:28
>>454
晒そうと思って簡単なコードを書こうと思い、 >>456 さんの書いたコードと同じ物で試したら大丈夫でした。
というかバリバリ平気で 10メガくらい普通に確保できてるみたいです。

でよく考えたら stdlib.h インクルードして中田のですが、
恐ろしいことに windows.h に宣言が入っているみたい…
大丈夫だった時はライブラリを指定しなかったのですが、
これはリンクしてるライブラリを疑うべき状況でしょうか?

462 :デフォルトの名無しさん:03/07/14 00:28
そういえばうちの環境だとwhile(malloc(1))とやるとそのうちkillされるな。
NULLが返る前に。

463 :デフォルトの名無しさん:03/07/14 00:28
gcc のコンパイルに失敗してたり?

464 :デフォルトの名無しさん:03/07/14 00:29
>>461
なら確保した領域の扱い方に問題がある可能性が高い。
きっとどこかでうっかりミスしていると思うよ。

465 :デフォルトの名無しさん:03/07/14 00:30
>>461
君の全く別の部分のコードを疑うべき!!
多分変なところのメモリを書き換えちゃってる。

466 :デフォルトの名無しさん:03/07/14 00:31
>>447
gccなら↓にチャレンジ♪

#include <stdlib.h>
int main()
{
int i=1421;
char buf[i];
return 0;
}

467 :デフォルトの名無しさん:03/07/14 00:50
なぜ書き込みがない?

468 :447:03/07/14 00:50
>>464
まだヒープから確保したものを使ってないんです。

そろそろスレ変えるべきかもと思いました。
こちらの説明にもだいぶ Windows SDK 色がでてきたので…。

>>456 さんの指摘する通りのメモリ破壊の可能性を探ってみて
その可能性もないと判断できたら Windows API系のスレに再度質問しようと思います。
みなさんありがとうございました。

469 :デフォルトの名無しさん:03/07/14 00:53
>>468
WinのAPIじゃなくてgccのスレの方が良いと思うが…

470 :デフォルトの名無しさん:03/07/14 00:54
ハゲ同
この場合、APIは関係ない

471 :447:03/07/14 00:59
>>469-470
そうみたい…。
問題があると思っていたDIB取り扱い部分を切り離して
メッセージループ付近で
単純に1メガ確保→直後に解放
のコードを書いただけで駄目だったっぽいです…。
gcc のライブラリってヒープ足りなくなったらって自動的に OS から追加確保してくれないんですっけ?


472 :デフォルトの名無しさん:03/07/14 01:02
>>471
自動的にヒープを追加してくれる OS の存在を、私は知らない。

473 :472:03/07/14 01:03
って、ちょっと話の内容を勘違いしたかも。

474 :デフォルトの名無しさん:03/07/14 14:05
(・д・)
Cってまだ現役なんだなあ...とこのスレ見て感動

475 :デフォルトの名無しさん:03/07/14 18:09
ダマレコゾウ >(・д・,,)

476 :デフォルトの名無しさん:03/07/14 18:23
関数の最後で、よくポインタ変数をインクリメントしているのを見るんですが
これはいったいどんな役割があるんですか?

477 :デフォルトの名無しさん:03/07/14 18:30
>>476
具体例を挙げてみてくれ。

478 :476:03/07/14 18:47
void sample(char **x, int *k, int n)
{
while(n-- >0){
switch(**x){
case '0':
sscanf(*x+1, "%o", k);
break;
case 'x':
sscanf(*x+1, "%x", k);
default:
sscanf(*x, "%d", k);
break;
}
x++;
k++;
}
}

xはmainで読み込んだ文字列。
nは読み込んだ文字列の数です。

文字列の先頭の文字によって読み込む進数を変えるプログラムです。

479 :476:03/07/14 18:49
スペースがちゃんと適用されてない・・・見えづらくてすいません。
しかもsage忘れた(;´Д`)

480 :デフォルトの名無しさん:03/07/14 19:19
>>479
関数の最後ではないではないか。
ループをひとつ回る毎にxとkを進めてるだけで、
つまりは次の文字列(x)とその文字列の数(n)を処理するようにしてるってことだ。

481 :デフォルトの名無しさん:03/07/14 19:29
>>478
ループカウンタを用意してやった方が分かりやすいと思うがなぁ。

void sample(char **x, int *k, int n)
{
 int i;
 for(i = 0; i < n; ++i) {
  switch(x[i][0]) {
  case '0':
   sscanf(&x[i][1], "%o", &k[i]);
   break;
  case 'x':
   sscanf(&x[i][1], "%x", &k[i]);
   break;
  default:
   sscanf(x[i], "%d", &k[i]);
   break;
  }
 }
}

482 :デフォルトの名無しさん:03/07/14 19:46
void sample(char **x, int *k, int n)
{
 int i;
 for(i = 0; i < n; ++i) {
  switch(x[i][0]) {
  case 'x':
   k[i] = strtol(&x[i][1], NULL, 16);
   break;
  default:
   k[i] = strtol(x[i], NULL, 0);
   break;
  }
 }
}


483 :476:03/07/14 20:06
>>480-482
いろいろなアドバイス、どうもありがとうございましった!!

484 :デフォルトの名無しさん:03/07/14 20:36
while(n-- >0){
これってwhile(n--){でいいよね。

485 :デフォルトの名無しさん:03/07/14 20:38
よくない。

486 :デフォルトの名無しさん:03/07/14 20:40
nはintだから負の場合もある

487 :デフォルトの名無しさん:03/07/14 20:41
>>485
なんで?nの初期値が負だった場合に違いが出るから?

488 :487:03/07/14 20:42
やっぱり・・・
「読み込んだ文字列の数」なのに負の数を渡す方が悪いと思うけど・・・

489 :デフォルトの名無しさん:03/07/14 21:03
カウンターコードというやつじゃよ。

490 :デフォルトの名無しさん:03/07/14 21:23
>>488
例えば君が仕事として関数を作り、それをDLLとして提供したとしよう。
たまたま実行中に引き数が負になる状況が発生したら、
そんな暢気なことは言えなくなるのだよ。

491 :デフォルトの名無しさん:03/07/14 21:38
wihle(1)
{
printf("あれれ・・・止まんないよー\n");
}

492 :デフォルトの名無しさん:03/07/14 21:43
>>484
if(n>0)
 while(n--){


493 :デフォルトの名無しさん:03/07/14 21:53
たまたま実行中に末尾に'\0'のつかない配列をstrlenに渡したり、書き換え不能な領域をstrcatの第一引数にする状況が発生したら、
そんな暢気なことは言えなくなるのだよ。

494 :デフォルトの名無しさん:03/07/14 22:02
たいしてコード量が増えないなら、安全側にプログラムするのは職業プログラマなら常識。
>>493 みたいなこという奴はおこちゃま。

495 :デフォルトの名無しさん:03/07/14 22:20
>>478
%oと%xに対応するのはunsigned int *

496 :デフォルトの名無しさん:03/07/14 22:29
>>494
自分が増やしたコード量を認識してないらしいな
なんせ「常識」つーくらいの常習者

STOPダイアログやSegmentation Faultとの重複コード書いて何やってんの?

497 :デフォルトの名無しさん:03/07/14 22:31
>>496
> STOPダイアログやSegmentation Faultとの重複コード書いて何やってんの?

日本語に訳してくれ。

498 :493:03/07/14 22:34
496は俺じゃないからな・・・
安全を云々言うならunsigned intにするが。

499 :デフォルトの名無しさん:03/07/14 22:35
>たまたま実行中に引き数が負になる状況が発生したら、

だいいち責任範囲というものがまるでわかってない
他社製品のバグが出たときの対応まで保証してられるか

500 :デフォルトの名無しさん:03/07/14 22:45
500

501 :デフォルトの名無しさん:03/07/14 22:54
だいいち人生はトラップだらけということがまるでわかってない

502 :デフォルトの名無しさん:03/07/14 23:17
と言うか責任範囲とかにすりかえてる点で、既に使えない奴の烙印は押されてるよ。

503 :デフォルトの名無しさん:03/07/14 23:23
だいいち人生の主人公は自分だけということがまるでわかってない

504 :デフォルトの名無しさん:03/07/14 23:25
int i[]={0,1,2,3,4,5,6,7,8,9};
これがOKで、

int i[][]={
{0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8},
{10,11,12,13,14,15,16,17,18}
};
これはダメ、、どうして?

505 :デフォルトの名無しさん:03/07/14 23:28
>>504
配列の要素の大きさが分からないから。
int i[][N]ならOK(Nは定数)

506 :デフォルトの名無しさん:03/07/15 00:32
>>504
仕様です。

507 :デフォルトの名無しさん:03/07/15 02:57
規格博士に質問です

malloc()で割り当てられた(NULLでない)ポインタpを
remalloc()に渡し、メモリの再割り当てに失敗した(NULLが返ってきた)時は
元の領域は、解放されるんでしょうか?
それとも、領域は残っているのでしょうか?

また、fopen()で開いたストリームの(NULLでない)ポインタfpを
freopen()に渡し、ストリームを開くのに失敗した(NULLが返ってきた)時は
元のストリームは、閉じているのでしょうか?
それとも、開いたままなのでしょうか?

自分で同様の関数を書けば関係ないと言われそうですが
規格上で、どうなってるのかを知りたいので宜しくお願いします

508 :507 訂正:03/07/15 03:00
× remalloc()に渡し、メモリの再割り当てに失敗した(NULLが返ってきた)時は
○ realloc()に渡し、メモリの再割り当てに失敗した(NULLが返ってきた)時は

509 :デフォルトの名無しさん:03/07/15 03:05
>>507
規格博士じゃないが。

s/remalloc/realloc/だよな? 元の領域は解放されずに残るよ。
だからrealloc前のポインタは保存しておかないとfreeできなくてリークしちゃう。

freopenは、成功しようが失敗しようが元のファイルはfcloseされる。

510 :デフォルトの名無しさん:03/07/15 03:17
>>509
サンクスコ
これで、安心して眠れます

511 :デフォルトの名無しさん:03/07/15 03:50
>>509

いやあ、昔々のC言語だと、reallocに失敗するとメモリが
解放されちまったのよ。そんなバカなと思うだろうが、
実際バカなので、今じゃ直ってるけどな。

ANSI-C以前の暗黒時代の話なので、今時そんな実装を気に
する必要はないが。


512 :デフォルトの名無しさん:03/07/15 04:37
BCBスレで聞いてたのですが、こちらのスレの方にあってきたので質問させてください。
ある固定長のデータを構造体にコピーするときアライン以外に気をつけることはありますでしょうか?

char []="0123456789" を

struct hoge{
char a[4];
char b[3];
char c[3];
};
にコピーして要素ごとに処理しやすくしたいんです。
当然、各要素の最後に"\0"がないので取り出した要素の使い方にも注意が必要ではあるのですが。



513 :デフォルトの名無しさん:03/07/15 04:40

char hogehoge[]="0123456789";
としてください。失礼。あ、"\0"が・・・うーむ・・・。


514 :デフォルトの名無しさん:03/07/15 05:38
別にそのままでも変わらないような気がするんだが
やっぱウニオンかな
union hoge{
char hogehoge[10];
struct{
char a[4];
char b[3];
char c[3];
};
} hage={"1234567890"};

int main(){
fwrite(hage.a,1,4,stdout);
return 0;
}

515 :山崎 渉:03/07/15 09:33

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

516 :デフォルトの名無しさん:03/07/15 10:23
質問です。
みなさんが gets ではなく fgets を使えと おっしゃるのは、getsにバッファ長の引数が無く、
バッファオーバーランの危険があるという理解でよいでしょうか?

517 :デフォルトの名無しさん:03/07/15 10:58
>>516
>>1のC FAQ 日本語訳を見ての発言でしょうか?

518 :デフォルトの名無しさん:03/07/15 11:07
>>514
printf("%.4s\n", hage.a);
或いは
printf("%.*s\n", sizeof(hage.a), hage.a);

って、書いてから気付いたけどstructに名前がついてないな。
struct {...} s;
として、
hage.s.a
か。

>>516
そうです。

519 :デフォルトの名無しさん:03/07/15 14:50
>>518
hage.a にアクセスしたじてんで、hage.a は[1][2][3][4][\0]になるのでしょうか?


520 :デフォルトの名無しさん:03/07/15 14:52
>>519
んなわきゃーない。

521 :デフォルトの名無しさん:03/07/15 20:05
>>520
ああ、だからsizeof(hage.a)でブッコ抜くんすね。
"\0"がないから、char *tmp=hage.a; とかってすると、hage.bやらhage.c やらも引っ付いてくるのが
気持ち悪かったのでつ。

522 :デフォルトの名無しさん:03/07/15 20:37
int i;
for(i=0;i<10;i++) ;

無限ループになります。なんで?
コンパイラのバグですか?

523 :デフォルトの名無しさん:03/07/15 20:39
おまえのPCが遅すぎるんだ

524 :デフォルトの名無しさん:03/07/15 20:45
>>522
それはコンパイラのバグ

そういやIntelのコンパイラで
short i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%d%d\n, i,j );
}
}
とやると、外側のループが1回しか実行されないバグがあったな

525 :デフォルトの名無しさん:03/07/15 20:46
>>524
shortなんか使うなという教え

526 :デフォルトの名無しさん:03/07/15 21:01
>>522
参考までにコンパイラと OS を教えちくり。

527 :デフォルトの名無しさん:03/07/15 21:07
>>526
Mini-C,Win98SEです

528 :デフォルトの名無しさん:03/07/15 21:10
Mini-Cってなんだろう・・・

529 :デフォルトの名無しさん:03/07/15 21:11
Mini-C...初めて聞く名だ。
とりあえず Mini-C だと空ループは無限ループになる...と。 、、φ(.. ) メモメモ

530 :デフォルトの名無しさん:03/07/15 22:26
Z80。。

531 :デフォルトの名無しさん:03/07/16 00:24
ネット上や参考書等のC言語ソースで、例えばfopen関数の戻り値はチェックするのに
fclose関数の戻り値をチェックをしていなかったりしています。なぜか自分も自然とそのように
プログラミングしてしまっていますが、このようにエラーのチェックをする時としない時があるのですが、
何を基準にしてする時としない時に分けられるのでしょうか?C言語に特化しておらず、抽象的な話かも
しれませんが、意見を聞きたいのでよろしくお願いします。

532 :デフォルトの名無しさん:03/07/16 00:29
>>531
fclose()失敗したって何もフォロー出来ないからね…

533 :デフォルトの名無しさん:03/07/16 00:36
>>531
戻り値を特に使用しない場合は受け取らない。

534 :デフォルトの名無しさん:03/07/16 00:40
>>531
fopen(file, "r");
のときは
fclose()
の戻り値は無視していい。
しかし、
fopen(file, "w");
のときの
fclose()
の戻り値はチェックしてフォローする必要がある。

>>532
エラーメッセージくらい出さないのか?

535 :デフォルトの名無しさん:03/07/16 00:45
>>534
どういう時に失敗するの?
つーか、その前に、読み書きで失敗しない?

536 :デフォルトの名無しさん:03/07/16 00:53
for example.

/* ディレクトリエントリの読み出し */
FILE *fp = fopen("foo", "w");
char buf[200];
/* ここも当然、読むだけ */
fgets(buf, sizeof(buf), fp);
/* ここでは読みこみも書き出しも発生しないので通常、エラーになり得ない */
fclose(fp);

/* ディレクトリエントリの作成、当然ファイルの実体はない */
FILE *fp = fopen("foo", "w");
/* バッファリングされるのでここでは書き出されない */
fprintf(fp, "bar\n");
/* ここでフラッシュされるので、書き出しが行なわれる */
fclose(fp);

というわけで、ディスクフルのときにライト時のfclose()でエラーが発生する。

537 :デフォルトの名無しさん:03/07/16 00:53
>>535
fflush(3)
close(2)

538 :531:03/07/16 00:53
malloc関数のようなアプリケーションエラーとなる致命的なところでは
エラーチェックは当然だと思うのですが、あたりまえのように
使っていたりするstrcpy関数等も必ずチェックしなければいけないと
思います。確かに戻り値を拾ってきてもエラー文出すぐらいしか
できませんが…。経験で知れということなのでしょうか。

539 :デフォルトの名無しさん:03/07/16 00:56
>>538
strcpy()はエラーを返さない。

540 :デフォルトの名無しさん:03/07/16 00:56
strcpy なんか使わんし。

541 :デフォルトの名無しさん:03/07/16 01:02
>>536
それって、オープンした時にエラーが出るでしょう?

>>537
そりゃ、不正なポインタを渡せばエラーが出るのは当然で
そんなプログラム書く香具師の方が悪いと思うけど?

542 :デフォルトの名無しさん:03/07/16 01:03
>>535
他のプログラムから削除されたりとか、
ディスクをいきなり取り出したりとか、
ディスクがいかれたとか、
まぁ、いろいろありそうやね。
特にゲーム機のメモリーカードとかだと
そういうことに気をもむ必要はありそうやね。

543 :531:03/07/16 01:04
strcpy -> strcmp 間違いでした。

544 :デフォルトの名無しさん:03/07/16 01:07
>>542
メモリーカードか…
それは、考えた事なかったな…

545 :デフォルトの名無しさん:03/07/16 01:07
fopenとかfcloseでメモリーカードのデータが読めるゲーム機なんてあるの?
システムコールとか使うんじゃないの?

546 :542:03/07/16 01:08
まぁ、ゲームプログラマからの受け売りなのだが。

547 :デフォルトの名無しさん:03/07/16 01:08
>>543
strcmpはエラーが発生しない(errnoにだってなにもセットしないよね?)
しかしあれは戻り値を見ないと何も意味がない・・・

548 :デフォルトの名無しさん:03/07/16 01:08
>>545
まぁ、何を使うかは別としてやね。

549 :535:03/07/16 01:15
基本的に他のプログラムに削除されるなんて事は考える必要ないと思うし
稼動中のディスクを抜き差しする香具師の事も考える必要はないと思うけど
(ディスクが壊れるのは(特殊なプログラムを除いて)論外)
確かに(ゲーム機に限らず)メモリーカードのように
動いてるのが見えないものの抜き差しは考えた方が良いかも知れないですね…

550 :デフォルトの名無しさん:03/07/16 01:17
自分で検証もしないで推量だけで折角のヒントを否定する痛い
香具師が集まるスレはここですか?

551 :デフォルトの名無しさん:03/07/16 01:19
>>550
違います

552 :デフォルトの名無しさん:03/07/16 01:21
>>535
>基本的に他のプログラムに削除されるなんて事は考える必要ないと思うし

あ〜あ。
ついでに言えば、ディスクフルになることも考慮しないのかな?

553 :デフォルトの名無しさん:03/07/16 01:25
>>552
それは絶対に他の何処かでエラーが出るでしょう

554 :デフォルトの名無しさん:03/07/16 01:26
>>552
書き込み時にチェックしないの?(^_^;)

555 :553:03/07/16 01:27
ごめん、バッファに溜まってたら出ないね

556 :553:03/07/16 01:29
>>554
FILE *fp = fopen( "xx", "w" ) ; /* 開く */
fwrite ( buf, 1, 8192, fp ) ; /* バッファに溜まる */
fclose ( fp ) ; /* ディスクが一杯 */

557 :デフォルトの名無しさん:03/07/16 01:32
>>556
いつもバッファリング無しにしているから

558 :デフォルトの名無しさん:03/07/16 01:35
>>557
俺は必ずfflush()してるから失念してた

559 :557:03/07/16 01:40
まあ冗談はおいておいて、ディスクフルまで考えたことはなかったかなぁ。

560 :デフォルトの名無しさん:03/07/16 01:42
>>559
フロッピーなんて、たった1.4MBしか使えないんだからすぐ一杯になるよ。

561 :デフォルトの名無しさん:03/07/16 01:45
フロッピーってなに?

562 :557:03/07/16 01:46
>>560
そういえばそうだねー
メモリーカードもフロッピーほどじゃないけどディスクフルになる可能性が高いかも・・・
いつもHDにしか書き込まないもので

563 :デフォルトの名無しさん:03/07/16 01:52
ところで、>>536のコードって、オープンした時に
NULLが返ってくると思うんだけど、
そのまま、fgets()やfprintf()にNULLを渡して大丈夫なの?

564 :デフォルトの名無しさん:03/07/16 01:56
プレステ場合は容量決めとくのが普通だから
ディスクフルはあまり考えんでもいい気もする。

565 :デフォルトの名無しさん:03/07/16 02:00
>>564
ゲーム機じゃなくて、フラッシュメモリとかを考えようよ

566 :デフォルトの名無しさん:03/07/16 02:06
>>565
書き込む前に空き容量を調べるんじゃないの?
あれこそ他から書き込まれるおそれはないし。

567 :デフォルトの名無しさん:03/07/16 02:09
>>566
Cに空き容量調べる関数なんて無いし

568 :566:03/07/16 02:09
カードの故障まで考えるとそうはいかないかな?

569 :566:03/07/16 02:10
>>567
Cの標準関数だけでやるのかよ!

570 :デフォルトの名無しさん:03/07/16 02:12
段々スレ違いになってきた。

571 :デフォルトの名無しさん:03/07/16 02:17
>>570
んじゃ、質問。
fopen()で得たポインタの実体がmalloc()で確保されてる場合
fclose()に失敗したら、その実体はfree()されるの?それとも、リークするの?

572 :デフォルトの名無しさん:03/07/16 02:26
>>571
環境変数MEMLEAK_JOTOを検出した場合はリークする。

573 :デフォルトの名無しさん:03/07/16 02:29
糞レスしたらスレ一覧のレス数に反映されんかった・・・

574 :デフォルトの名無しさん:03/07/16 02:39
>>572
何その変数

575 :デフォルトの名無しさん:03/07/16 02:42
ギャグなんだから笑ってやれよ

576 :デフォルトの名無しさん:03/07/16 02:45
>>571
mallocで確保すると決められてはいない以上、どうなるかはライブラリのつくりに依存するんじゃない?

577 :デフォルトの名無しさん:03/07/16 02:49
errno の取り得る値ってのは仕様では決められてないの?

578 :デフォルトの名無しさん:03/07/16 02:50
>>576
まぁ、malloc()とは限らないけど、
基本的には、何かしらの方法で容量を確保する(されてる)訳で、
それを再利用出来るのだろうか、と言う事
それとも、どうせ僅かな容量なのだから、
そんな細かい事は気にするなって事なのだろうか…?

579 :デフォルトの名無しさん:03/07/16 02:55
昔は何個くらいか固定長でとってある実装が普通だったと思うけど、
今はどうなってるんだろうね。

580 :デフォルトの名無しさん:03/07/16 02:55
>>577
int












って話じゃなくて、何処から、何処までが処理系で
何処から、ユーザが使用して良いかって事?

581 :デフォルトの名無しさん:03/07/16 02:55
>>578
様々な要因でfcloseに失敗してもメモリーの解放はできると思うから、しなかったらライブラリのバグじゃねーか?

582 :デフォルトの名無しさん:03/07/16 02:57
>>580
errno の取る値がマクロか何かでよく定義されてあるけど、
それに互換性はあるのかってこと、と言ってもいいかもしれん。

583 :デフォルトの名無しさん:03/07/16 02:59
>>581
でも、1度 fclose() に失敗しても、
もう1回やれば成功しない保証は無いと考えれば、
解放する方が、バグって考え方もあるよね

584 :デフォルトの名無しさん:03/07/16 03:00
>>583
複数回クローズを試みるのか!
それは考えなかった!

585 :デフォルトの名無しさん:03/07/16 03:04
>>582
互換性が無いから、値を #define してるのだと思われ
ちなみに、Cで標準に定義されてるのは
EDOM EILSEQ ERANGE
の三つだけ…
つーか、これ、1つも使った事ないし…

586 :デフォルトの名無しさん:03/07/16 03:06
ERANGEってstrtolで発生するあれか

>>583
http://www.bohyoh.com/CandCPP/C/Library/fclose.html
無条件に解放しそう・・・

587 :デフォルトの名無しさん:03/07/16 03:13
K&R のさ、malloc/free の実装の説明のさ、morecore ってあるじゃん。
あれの 下から 2 行目くらいの free((void*)(up + 1)); って何?
俺にはどう見ても sbrk から返されて s.ptr が不定な状態のチャンクを
解放しに行ってるようにしかみえないんだけど、何がしたいの?


588 :デフォルトの名無しさん:03/07/16 03:20
>>586
freopen()の説明なんか見ると、
失敗は無視するって書いてあるから、
fclose()も同様に、失敗は無視して解放するのかな…
と言う事は、1度fclose()に失敗したストリームに
2度目のfclose()は無いのだろうか…

589 :デフォルトの名無しさん:03/07/16 03:25
>>587
ソースを見てみないと分からないけど、俺には
>free((void*)(up + 1));
が、何故キャストしてるのかの方が不思議だ
もしかして、upってポインタじゃないとか?

590 :デフォルトの名無しさん:03/07/16 13:41
Cコンパイラさっぱりワカンネ

591 :デフォルトの名無しさん:03/07/16 14:56
最短経路を求めるアルゴリズムはDIJKSTRA法がありますが
最長経路を求める方法はありませんか?

592 :デフォルトの名無しさん:03/07/16 15:06
>>585
なるほど。
標準なのは3つだけなんですか。
よく分かりました。

593 :デフォルトの名無しさん:03/07/16 15:07
http://lvpeace.hp.infoseek.co.jp/index.htm
   ↑
みなさん、薬物、犯す、暴力三昧の元暴走族が
子供を二人産み過去を自慢するようなHPを
立ち上げて「遠い過去の事です♪」などと平和に語っております。
どう思いますか。特攻お願いします。

抜粋
>過去の己を描いただけのHPであることをご理解して欲しい
>俺は最近の族じゃないから!過去だから過去、昔!OK?
>それで俺は最近は族ではなく任侠団体にいたんだよ
>ちゃんと読んでから書き込みして下さいね
http://lvpeace.hp.infoseek.co.jp/yaki.jpg
http://lvpeace.hp.infoseek.co.jp/zoku5.gif


594 :デフォルトの名無しさん:03/07/16 19:02
半角文字なら下のプログラムでできたんですが
全角文字じゃできません。考え方を教えてください。l初心者です。
scanf()やfor文とかしか知らなくてもできると言われたのですが
#include <stdio.h>
void main(void)
{
char a[100];
int i;
i=0;
scanf("%s",a);
while(a[i]!='\0')
{
i++;
}
for(i=i-1;i>=0;i--)
{
printf("%c",a[i]);
}
}

595 :デフォルトの名無しさん:03/07/16 19:35
>>594
「全角文字」が2バイトの文字であるとする。
#define BYTE_OF_MBCHAR 2
#define STRINGNIZE_IMPLEMENTATION(x) #x
#define STRINGNIZE(x) STRINGNIZE_IMPLEMENTATION(x)
#include <stdio.h>
void main(void)
{
char a[100];
int i;
i=0;
scanf("%s",a);
while(a[i]!='\0')
{
i++;
}
for(i=i-BYTE_OF_MBCHAR;i>=0;i=i-BYTE_OF_MBCHAR)
{
printf("%" STRINGNIZE(BYTE_OF_MBCHAR) "s", &a[i]);
}
}


596 :デフォルトの名無しさん:03/07/16 19:48
>>594
>半角文字なら下のプログラムでできたんですが
何が?
>全角文字じゃできません。
何が?
>考え方を教えてください。
何をしたいのか教えてください。
>初心者です。
言い訳のつもり?

597 :デフォルトの名無しさん:03/07/16 20:02
説明不足でした。
12SD と入れたら DS21
あ位う123絵オ と入れたら オ絵321う位あ
という感じに出力されるプログラムです


598 :デフォルトの名無しさん:03/07/16 20:10
ANSI以前の書式で書かれたソースをANSI形式に変換するツールってありますか?

int function(giko mona)
int giko
char *mona
{

}
↑のようなのを↓のような風に変換したいのですが、大量にあって手作業では時間がかかりすぎるのです。
int function(int giko , char *mona)
{

}

599 :デフォルトの名無しさん:03/07/16 20:13
perl

600 :デフォルトの名無しさん:03/07/16 21:04
コンパイルの仕方が分かんないです
OSウインドウズXP使ってるんですが
とりあえずBorland C++ Compiler 5.5落としてきて
#include <stdio.h>

maim()
{
printf("TEST");
}
てファイルをメモ帳で書いてtest.cって名前で保存してみたら
一応test Cファイルって出来ました。

コマンドプロンプト
C:\Document ***>bcc32 text.c
て入力してみたんですが
'bcc32' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とかでます。


601 :デフォルトの名無しさん:03/07/16 21:43
>>600
UNIXスレで見たような....
本家のFAQに書いてあるので、それも含めてFAQを全部見ておいたほうがいい。
http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html

602 :デフォルトの名無しさん:03/07/16 21:45
極私的C言語講座 - 環境設定 - Borland C++ Compiler (BCC) の場合
http://member.nifty.ne.jp/Norino/c_lang/c_lang_setup_bcc.html

603 :デフォルトの名無しさん:03/07/16 22:10
>>594>>597
#include <stdio.h>
#include <string.h>
int main(void)
{
    const char s[11]="1山2本3山4";
    char s2[11];
    int i,l,c;
    for(i=0,l=strlen(s),c=0;i<l;i++)
        if(c){s2[i]=s[l-1-i+1];c=0;}//前がワイド文字
        else if(s[i]<=-1){s2[i]=s[l-1-i-1];c=1;}//ワイド文字
        else{s2[i]=s[l-1-i];}//普通文字
    s2[i]='\0';
    printf("%s\n",s2);
    return 0;
}

604 :デフォルトの名無しさん:03/07/16 22:36
>>602
ありがとうございます。
結構分かり易いとりあえず書いてあることやってみました。
完璧と思ったのに、何故か
C:\>pathで
c:\borland\bcc55が出てきません・・・
環境変数のPATHのとこにはちゃんと書いたのに
てか、PATHの他の変数間違えて消しちゃったし・゚・(ノД`)・゚・
どうしおう

605 :デフォルトの名無しさん:03/07/16 23:28
>>604
WinXPだったら一度ログオフしないといじった環境変数が有効にならなかったような。

606 :デフォルトの名無しさん:03/07/16 23:36
>>605
ありがとうございます!
再起かけてみたらちゃんとなりました多謝!!

・・・でも血迷って消しちゃった他の変数は・゚・(ノД`)・゚・
ど、どうなっちゃんですかね。。。

607 :デフォルトの名無しさん:03/07/16 23:36
構造体のポインタの配列を考えているのですが、
構造体 STRUCT が STRUCT の配列
STRUCT **children;
を持つ構造体としたとき、
STRUCT test;
を考えます。
このとき、test の配列 children の要素数 length を動的に取得し、
test->children の要素数 length だけ malloc したいのですが、
test->*childeren = (STRUCT *)malloc(length * sizeof(*STRUCT));
だと、左辺側でエラーになります。
どうすればよいでしょうか。

よろしくお願いします。

608 :デフォルトの名無しさん:03/07/16 23:39
sizeof(*STRUCT))

609 :デフォルトの名無しさん:03/07/16 23:39
・・・でもbcc入力しても相変わらず
'bcc32' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とか言われちゃいます。。。

610 :デフォルトの名無しさん:03/07/17 00:01
>>609
BCCスレ池

611 :デフォルトの名無しさん:03/07/17 00:02
#include<stdio.h>
int main()
{
int *ptr;
int num[2];
ptr = num;
*ptr = 20;
*ptr++=100;
*ptr++=200;

printf("%d\n",num[0]);
printf("%d\n",num[1]);

return 0;
}

このプログラムを実行すると
100
200
と出力されるのですが、*ptr=20の値はどこに行ったのでしょうか?
またnum[2]→num[1]に変更すると
100
204
というように値が変わって出力されてしまいます。



612 :デフォルトの名無しさん:03/07/17 00:03
ダーリン、オーバーランだっちゃ

613 :デフォルトの名無しさん:03/07/17 00:03
>>607
意味が分からない
欲しいのは、ポインタの配列?
それとも、実際の配列?

614 :デフォルトの名無しさん:03/07/17 00:05
やっぱりここもスレ違いなのか。。。
>>610BCCで検索しても何もでないんですよ。。。

615 :デフォルトの名無しさん:03/07/17 00:07
タダで使えるBorland C++ Part3
http://pc2.2ch.net/test/read.cgi/tech/1054390397/

616 :デフォルトの名無しさん:03/07/17 00:13
>>615
ありがとうございます
思いっきり似たような話題でてますね
さっきの質問コピペようかと思ったけど、ちょとじっくり読んでみます。

617 :デフォルトの名無しさん:03/07/17 00:35
>>611
自分で上書きしておいてどこに行ったもなにもないでしょ

618 :デフォルトの名無しさん:03/07/17 00:41
>>611
『後置インクリメント』でググってみよう。

619 :607:03/07/17 00:49
>>613
欲しいのは(malloc したいのは)構造体のポインタの配列です。

620 :デフォルトの名無しさん:03/07/17 00:52
>>619
test->childeren=(STRUCT**)malloc(length*sizeof(STRUCT*));

621 :デフォルトの名無しさん:03/07/17 01:59
12SD と入れたら DS21
あ位う123絵オ と入れたら オ絵321う位あ
という感じに出力されるプログラムお願いします。
printf()、scanf()やfor文、if()、while()、for()、配列だけで
できると言われたのでそれらだけで作ってください。

622 :デフォルトの名無しさん:03/07/17 02:00
同じ質問見たが、宿題か。

623 :デフォルトの名無しさん:03/07/17 02:07
ただしつこいだけです。constなんて習ってません

624 :デフォルトの名無しさん:03/07/17 02:39
>>623
習ってないなら自ら学べ

625 :_:03/07/17 02:40
http://homepage.mac.com/hiroyuki44/

626 :デフォルトの名無しさん:03/07/17 03:24
>>624
激しくガンガリます(`・ω・´)

627 :デフォルトの名無しさん:03/07/17 04:27
・・・正直みんなブチ切れています。
これが多額の税金で更生しPCの(?)職業訓練された元暴走族の方のHPです。
自分のかけた迷惑を省みず大事にしてるお子さんが二人います。

http://lvpeace.hp.infoseek.co.jp/index.htm
   
みなさん、薬物、犯す、暴力三昧の元暴走族が
子供を二人産み過去(+薬物の使用経験)を自慢するようなHPを
立ち上げて「遠い過去の事です♪」などと自慢気に語っております。
どう思いますか。掲示板へ直行お願いします。

抜粋
>過去の己を描いただけのHPであることをご理解して欲しい
>俺は最近の族じゃないから!過去だから過去、昔!OK?
>それで俺は最近は族ではなく任侠団体にいたんだよ
>逮捕12回(結構頑張ったでしょ)
http://lvpeace.hp.infoseek.co.jp/yaki.jpg
http://lvpeace.hp.infoseek.co.jp/zoku5.gif

正直、私たちの重税がこのような方に注ぎ込まれてる訳です。
施設・刑務官・警察の特別手当、いくらあっても足りません。
どうしたら理解して頂けるんでしょうか?

628 :デフォルトの名無しさん:03/07/17 04:38
>>621
まず文字コード体系を判定する必要がある。
日本語などの多バイト文字はコード体系が変われば処理も変わる。

629 :_:03/07/17 04:42
http://homepage.mac.com/hiroyuki44/

630 :デフォルトの名無しさん:03/07/17 09:20
const char *c="abcdefg1234567890zx";
char str[16];
strcpy(str,c);
printf("%s\n",str);
printf("%c\n",str[0]);
printf("%c\n",str[18]);
getchar();
これが、コンパイル通るんだけどどういうこと?
[16]ってことは、[15]までだよね?VC6です。

631 :デフォルトの名無しさん:03/07/17 09:22
>>630
Cは配列の添え字チェックをしない。
str[18]は*(str+18)という意味なので文法上全く問題ない。

632 :631:03/07/17 09:23
三行目は見当違いだったかも。
とにかく文法上問題ないのでエラーになったりしない。

633 :デフォルトの名無しさん:03/07/17 14:03
>>630
const char *c="abcdefg1234567890zx";
char str[16];
char aho[10];
strcpy(str,c);
printf("%s\n",str);
printf("%c\n",str[0]);
printf("%c\n",str[18]);
printf("%s\n",aho);/* これはどうなる? */

634 :デフォルトの名無しさん:03/07/17 14:18
>>633
自動変数の確保の順番は未定義だったはず。

635 :デフォルトの名無しさん:03/07/17 14:19
>>633
質問とまったく関係ない。
そしてそういう余計な話は初心者を混乱させるだけ。

636 :デフォルトの名無しさん:03/07/17 14:20
>>635
オーバーフロウしたものがahoに入るかもしれないと言いたいんだと思われ。
でも>>634

637 :デフォルトの名無しさん:03/07/17 14:52
>>630
コンパイルに関しては>631,632の通りだが
それ以前に
strcpy(str,c);
がいけないことだっていうのはOKなのかな?
18にアクセスしようとしてるからわかってそうだけど。

638 :デフォルトの名無しさん:03/07/17 15:08
>>633
printf の第2引数は、constになってるから、警告が出るんじゃない?(コンパイラーにもよるけど)
ahoは初期化(値が設定)されていないのに参照される可能性がある。みたいな。

639 :デフォルトの名無しさん:03/07/17 15:21
>>638
printfの第二引数以降は...だからなんでも受け付けます。
二行目と三行目のつながりが分からない。

640 :デフォルトの名無しさん:03/07/17 15:21
>>633
これはどうなると聞かれても。
>630が自分のまだ答えてないよ。

641 :デフォルトの名無しさん:03/07/17 18:13
>>639
せやった・・・失敬・・・


642 :デフォルトの名無しさん:03/07/17 21:08
こんばんわ。わからないことがあるので質問させてください。

unsigned int *buffer;
unsigned long int result;

buffer = (unsigned int *)malloc(2048);

for (row = 0; row < height; row++) {
       TIFFReadScanline(tiff, buffer, row, 0);

             for(x=0;x<width;x++){
               result = * ((unsigned int *)(buffer + x));
            
                printf("%d %d %u \n",row,x,result);
                         }
                       }

このようなループがあるんですが
row=0,x=533までしか実行できず、セグメンテーションエラーと言われます。
どのように修正すれば最後まで実行できるでしょうか。
ちなみに
TIFFReadScanline(tiff, buffer, row, 0);
は開いたtiff画像を一行読み取り、各ピクセルの輝度を16bitの整数としてbufferに格納します。
rowは行番号、0は画像番号です。

拙い文章でわかりづらいとは思いますがよろしくお願いします。

643 :デフォルトの名無しさん:03/07/17 21:24
malloc(sizeof(unsigned int)*width)

644 :デフォルトの名無しさん:03/07/17 21:46
rewindってどういうときに使うんでつか?

645 :デフォルトの名無しさん:03/07/17 21:51
人生に疲れたとき。

646 :デフォルトの名無しさん:03/07/17 21:51
>>643
レスありがとうございます。

すみませんが、さらに質問させてください。

考えている対象は一行あたり1024ピクセルの画像で、
1024個の要素を持つint型の配列を読み込む事になるわけなので、
malloc(2048)としたのですが
これは 2byte×1024 = 2048byte ってことで
width = 1024 の時 sizeof(unsigned int)*width
と中身は同じかと思うのですが、いかがでしょうか?

647 :デフォルトの名無しさん:03/07/17 21:53
int は 2 バイトとは限らない。

648 :デフォルトの名無しさん:03/07/17 22:01
32bitなら4byteじゃないかな。

649 :646:03/07/17 22:11
今確認してみました。
intは4byteありました。お騒がせしてすみません。
どうも僕の中では、
char は 8bit で 1byte
int は 16bit で 2byte
と思い込んでいたみたいです。
どうもありがとうございました。

650 :デフォルトの名無しさん:03/07/17 22:11
>>637
いけないこと?
とりあえず試してみたんだけど、通ったから
問題ないのかと思ってた。

18にアクセスしたのは、こういう場合は後ろの方は切れてしまうのかな?
と、思ったのでちょっと試してみたら参照できた。なんで?って感じ。
>>633のやってることの意味がまったく分かりません。
お、オーバー浮浪?

651 :デフォルトの名無しさん:03/07/17 22:27
>>650
>通ったから問題ないのかと思ってた。

Cでは「未定義の動作」に気をつけにゃならん。
エラーが出ることすら保証されていない。

要するに、自分がしていることが本当に正しいかどうかを
自分で判断できにゃならんのだ。真に科学的な態度が要求される。

Cではと言ったが、これができる者だけが長い目で見てやってける香具師だ。

652 :デフォルトの名無しさん:03/07/17 22:32
【GUIライブラリ】wxWindowsでのひょーん スレからやってきますた。
http://pc2.2ch.net/test/read.cgi/tech/1052186697/335

質問です。
bcc32 v5.5.1 な環境において、
char *setlocale(int category, const char *locale) の戻り値を
第二引数にして、setlocale() を再度呼び出すと、
第二引数が破壊され、戻り値が NULL になってしまいます。

一応調べたところ、下記のような記述
> The application shall not modify the string returned
> which may be overwritten by a subsequent call to setlocale().
> アプリケーションは返されたストリングを修正しないものとします、
> それはsetlocale()への後の呼び出しによって上書きされるかもしれません。
> http://www.opengroup.org/onlinepubs/007904975/functions/setlocale.html
がMSのサイトやらMAN pageやらから見受けられたので、この動作は未定義?
とも思うのですがいまいちすっきりしません。

これって、bcc32 固有の不具合なのでしょうか?
それともCの仕様でしょうか?

ちなみに、gcc では locale の設定が行われ、問題なく動作できますた。

よろすくおながいします。

653 :デフォルトの名無しさん:03/07/17 22:54
>>651
未定義の動作だよって報告すら出ないのか?

654 :デフォルトの名無しさん:03/07/17 23:04
struct List
{
std::string buf_;
}

と、

printf("%s",l1.buf_.c_str());

を日本語で説明おねがいします。意味がわかりませんでした。。

655 :デフォルトの名無しさん:03/07/17 23:05
>>654
スレ違い。そりゃCじゃない。

656 :デフォルトの名無しさん:03/07/17 23:07
>>654
マルチ氏ね

657 :デフォルトの名無しさん:03/07/17 23:33
>>650
>strcpy(str,c);
文法的には問題ないのでコンパイルは通るけどコピーするサイズが問題。
strよりcのサイズが大きいために
strをオーバーしてコピーしてしまって
意図しないメモリ領域を壊してしまっている可能性がある。
(バッファオーバーフローとかオーバーランとか言う)

なのでstrがc以上のサイズを持っているかチェックしてからコピーするか
strncpyを使うかしる。

658 :デフォルトの名無しさん:03/07/17 23:39
連結リストや二分木などがわかりやすくのってるサイトってないでつか?
マジお願いします。

659 :644:03/07/17 23:40
お願いします・・・。scanfと関係があるんですか?
バッファに文字を残した場合に、それをリフレッシュするって感じでしょうか?

660 :デフォルトの名無しさん:03/07/17 23:44
>>659
いいえ
いいえ

661 :644:03/07/17 23:44
>>660
ではどういった場合に使うのでしょうか?

662 :デフォルトの名無しさん:03/07/17 23:45
>>658
二分木載っているけど、これでよければ
tp://www1.cts.ne.jp/~clab/hsample/Mem/Mem2.html#void

663 :デフォルトの名無しさん:03/07/17 23:46
>>659
fseek(fp,0L,SEEK_END);
と同じで、scanf()とかとは、直接的には全く関係ない
ただ、rewind()すると、EOFをクリアしたり等々
標準入力で便利に使える処理系が多いのも事実

664 :デフォルトの名無しさん:03/07/17 23:47
>>644
ファイルの先頭から読みなおしたいときによく使うが。

665 :644:03/07/17 23:52
>>663
標準入力で便利に使えるというのは具体的にどういった場合なのでしょうか?


666 :663:03/07/17 23:52
突っ込んでくれないと、おぢさんは悲ひい…

667 :デフォルトの名無しさん:03/07/17 23:53
突っ込んでやるから、ケツを出せ

668 :デフォルトの名無しさん:03/07/17 23:54
>>663
> fseek(fp,0L,SEEK_END);
(void)fseek(stream, 0L, SEEK_SET) だろ

669 :デフォルトの名無しさん:03/07/17 23:55
>>665
>EOFをクリアしたり等々
って書いてあるじゃん

670 :644:03/07/18 00:05
標準入力からのEOFはCtr+Z?
whileの判定でEOFを使ってるならまだしも、コントロールコードを用いてる場合は、
意味がありますか?

671 :デフォルトの名無しさん:03/07/18 00:51
標準出力で rewind すると、
キーバッファクリアになる処理系が存在する。

672 :671:03/07/18 00:51
出力じゃなくて入力だ。

673 :デフォルトの名無しさん:03/07/18 00:53
>>671
それを標準の動作であるかのようなことを言っていた人がいたね。

674 :デフォルトの名無しさん:03/07/18 01:26
'\0' は必ず 0 で定義されるんですか?

675 :デフォルトの名無しさん:03/07/18 01:28
'\0'==0
文字定数か整数定数かの違い

676 :デフォルトの名無しさん:03/07/18 01:39
>>675
その等式はどのコンパイラでも正しいですか?
C言語の規格として定まっているんですか?

677 :デフォルトの名無しさん:03/07/18 01:42
>>676
手持ちの ANSI C/C++ 辞典には
「すべてのビットは 0 である」と書いてあるので、
大丈夫だと思います。

678 :デフォルトの名無しさん:03/07/18 01:50
ところが整数0について「すべてのビットは 0 である」という記述はない。
よって'\0'==0という保証もない。○か×か

679 :デフォルトの名無しさん:03/07/18 01:53
×に一票

680 :デフォルトの名無しさん:03/07/18 02:05
>>678
0 と等しい内部表現を持つ、
という意味で全てのビットが 0 である、
と言ってるんだと思うので×。
でも、その視点は無かっただけにちょっと感動した。

681 :デフォルトの名無しさん:03/07/18 02:06
あ、整数値としての 0 ね。
ヌルポインタじゃなくて。

682 :デフォルトの名無しさん:03/07/18 02:25
文字定数は 'ab' のように、複数の文字からなる場合の値は
処理系定義となっているが、'\0\0' なら全てのビットが 0 なので
'\0\0' == 0 は成り立つ ○か×か

683 :デフォルトの名無しさん:03/07/18 02:48
処理系定義なので何が起こっても構わないので×。

684 :デフォルトの名無しさん:03/07/18 07:44
>>683
処理系定義が、何が起こっても構わないってのはダウト

685 :デフォルトの名無しさん:03/07/18 11:08
おまえら糞壁と一緒だな(藁

686 :デフォルトの名無しさん:03/07/18 12:56
>>657
あーなるほど、そういうプログラムがあるからOSが不安定になったりするのかな?
気を付けるようにします。

687 :デフォルトの名無しさん:03/07/18 12:59
687ゲット!!

>>686
時々セキュリティ情報などでバッファオーバーフロウが云々という記事をみかけるでしょ?あれ。

688 :687:03/07/18 12:59
657に書いてあるじゃん(鬱

689 :デフォルトの名無しさん:03/07/18 13:58
あんなのがあるって事は。
M$の社員にも糞がいっぱいいるってことか。

690 :デフォルトの名無しさん:03/07/18 15:55
VC++で、
文字列が英語の文かどうか判定したいです。
全角文字なら英語でないとすると、

こんなもじ↓

が全角文字で英語にならなくなってしまいます。
上の文字は英語のサイトでも使われてる文字なので、英語として扱いたいです。

691 :デフォルトの名無しさん:03/07/18 16:15
>>689
実際にはコードの時点からオーバーしてるわけじゃなくて
何らかの方法で無理矢理あの状態を作り出されたときに
サイズチェックしてなくてあぼーんするって感じかな。
まあよく知らないんだけど( ´д`)

692 :デフォルトの名無しさん:03/07/18 16:16
"と“は別物だが?
(C), (R), TM あたりで困るというのなら分かるけど。

693 :デフォルトの名無しさん:03/07/18 16:16
英語のサイトで全角文字か…

694 :デフォルトの名無しさん:03/07/18 16:24
>>690
先ずは文字コードについて勉強しろ。話はそれからだ。

695 :デフォルトの名無しさん:03/07/18 16:27
エスケプシケンス使わずに画面をクリアするには、
printf("system・・・・
よく覚えてないです。
どなたか教えてください

696 :デフォルトの名無しさん:03/07/18 16:34
おまえら、画面制御の質問するときは



   環  境  を  書  け

697 :デフォルトの名無しさん:03/07/18 16:36
すみませぬ。
WinXP、BCC5.5です。
環境を書いてなくてすみませんでした。

698 :デフォルトの名無しさん:03/07/18 16:37
system("cls");  /* DOS */
system("clear"); /* UNIX */


699 :デフォルトの名無しさん:03/07/18 16:37
おまえら、画面制御の質問するときは



   そ の 環 境 の ス レ に 行 け



だろ?

700 :デフォルトの名無しさん:03/07/18 16:46
>>698どうもありがとうございます。
勘違いしてました。
タブキーを押すと右に*が移動し、3回動いたら改行する
プログラムを作りたいんですが、根本的に間違ってますでしょうか?
まだ作りかけですが、どうか見てください
#include <stdio.h>
#include <conio.h>
int main(){
int a=1,b=1;
char Key;
for(;;){
system("cls");
Key = getch();
if (Key=="\t"){
a++;
if(a<=3){
printf(" *");
}
else{
printf("\n");
b++;
a=1;
}
}
}
}


701 :690:03/07/18 16:53
>>694

文字コードはShiftJISでやってます。
クリップボード経由のデータなので、もともとの文字コードは意識してないです。

702 :デフォルトの名無しさん:03/07/18 17:18
>>700
コンパイルを通してから出直せ。

703 :700:03/07/18 17:24
コンパイル通るよん♪
まさか、君Cやったことないでしょ?
( ´_ゝ`)プッ

704 :デフォルトの名無しさん:03/07/18 17:25
>if (Key=="\t")

705 :デフォルトの名無しさん:03/07/18 17:26
> if (Key=="\t"){
> if (Key=="\t"){
> if (Key=="\t"){
> if (Key=="\t"){
> if (Key=="\t"){

706 :デフォルトの名無しさん:03/07/18 17:28
正しくはif(Key==\t){

707 :デフォルトの名無しさん:03/07/18 17:30
>>706
ネタはもういいから。

708 :デフォルトの名無しさん:03/07/18 17:32
#include <stdio.h>
#include <conio.h>
int main(){
int a=1,b=1;
char Key;
for(;;){
system("cls");  // 画面を消す。
Key = getch();   // 入力するまもなく通り過ぎる
if (Key=="\t"){  // Keyの初期値(ごみ)と文字列リテラルのアドレスを比較する。
a++;         // aが2になる。
if(a<=3){       //必ず真になる
printf(" *");    //*を表示
}
else{         //以下のコードは通ることなく終了。
printf("\n");
b++;
a=1;
}
}
}
}

( ´_ゝ`)プッ

709 :デフォルトの名無しさん:03/07/18 17:34
それはそうとして conio.h なんか使ってるんだったら他所へいけ。

710 :デフォルトの名無しさん:03/07/18 17:34
違った、最初のifがすでに成り立たないや。
何も表示せずに終了か。

711 :デフォルトの名無しさん:03/07/18 17:39
>>708
こいつもひどいな。

712 :デフォルトの名無しさん:03/07/18 17:44
正しくはif(Key==\t){

713 :デフォルトの名無しさん:03/07/18 17:46
質問者が煽るとグダグダになるという好例ですな。

714 :700:03/07/18 17:52
>>703は偽物です。
でも、やっぱりコードがぐちゃぐちゃなのは確かでしたね。
>>712
マジですか?

715 :デフォルトの名無しさん:03/07/18 17:54
正しくは
if(Key == '\t') {

716 :デフォルトの名無しさん:03/07/18 17:55
どうでも良いけど無限ループじゃない?

717 :716:03/07/18 17:59
700の正しくしたコードきぼんぬ

718 :デフォルトの名無しさん:03/07/18 18:05
>>717
どうでも良いけどなんで俺を騙るんだ?

719 :716:03/07/18 18:27
>>718
なんで俺が煽ったことになるんだ?

720 :デフォルトの名無しさん:03/07/18 18:29
>>719
お前は俺じゃないだろ

721 :デフォルトの名無しさん:03/07/18 18:30
煽ると騙るを間違ってる香具師ハケーン

722 :デフォルトの名無しさん:03/07/18 18:41
>>721
二人いるな


723 :デフォルトの名無しさん:03/07/18 18:41
>>717
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main() {
  int a = 1, b = 1, i;
  char Key;

  system("cls");

  while( (Key = getch()) != 'q' ) {
    system("cls");
    if (Key == '\t') {
      if ( a <= 3 ) {
        for (i=0; i<a; ++i) printf(" *");
        ++a;
      } else {
        printf("\n");
        ++b;
        a = 1;
      }
    }
  }
  printf("\nb = %04d\n", b);
  return EXIT_SUCCESS;
}

724 :716:03/07/18 19:08
>>720
偽物は静かにしてくれ。

>>723
>>700との違いが分からん。
>>700は何がダメなのか。

725 :デフォルトの名無しさん:03/07/18 19:12
>>724
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main() {
  int a = 1, b = 1, i;
  char Key;
  system("cls");
  while( (Key = getch()) != 'q' )
    if (Key == '\t') if ( a <= 3 ) printf(" *", ++a); else printf("\n", ++b, a = 1);
  printf("\nb = %04d\n", b);
  return EXIT_SUCCESS;
}


726 :デフォルトの名無しさん:03/07/18 19:18
>>724
#include <stdio.h>
#include <conio.h>


int main() {
int a = 1, b = 1, i;
char Key;
system("cls");
while( (Key = getch()) != 'q' )
system("cls");
if(Key == '\t') if ( a <= 3 ){
printf(" *", ++a);
}
else {
printf("\n", ++b, a = 1);
}

}


727 :_:03/07/18 19:21
http://homepage.mac.com/hiroyuki44/

728 :デフォルトの名無しさん:03/07/18 20:55
これってどうして二回目のscanfはスキップされるんですか?
よろしくおねがいします

#include<stdio.h>
void main(void){
char c,d;
scanf("%c",&c);
scanf("%c",&d);
printf("%c %c",c,d);
}

729 :デフォルトの名無しさん:03/07/18 20:58
スキップはされない。
ちゃんと改行を読み取って表示する。

730 :デフォルトの名無しさん:03/07/18 21:08
>>729
即レスありがとうございます。

どうにかして改行を読み取らないようにはできないでしょうか?

731 :デフォルトの名無しさん:03/07/18 21:09
printf("Hello", " ", "world");

732 :デフォルトの名無しさん:03/07/18 21:09
>>730
一行読みとる

733 :デフォルトの名無しさん:03/07/18 21:10
ちょっと質問させてください。
引数を整数に直してから表示するプログラムにしたいのですが
以下のようにすると、引数と違った結果になってしまいます。
どうしてでしょうか?


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

main(int argc, char *argv[])
{
int a,b,i;
int x[1],y[1];

x[0] = atoi(argv[1]);
y[0] = atoi(argv[2]);
x[1] = atoi(argv[2]);
y[1] = atoi(argv[3]);

for (i=0;i<2;i++){
printf("%d %d %d\n",i,x[i],y[i]);
}


}


734 :デフォルトの名無しさん:03/07/18 21:11
>>733
オーバーフロウとか

735 :734:03/07/18 21:14
ふたつの意味でね(^_^;)

736 :デフォルトの名無しさん:03/07/18 21:14
>>731-732
できました!
ありがとうございます!

737 :!=733:03/07/18 21:22
ホントに2つだ。。はじめ気づかなかった。

738 :デフォルトの名無しさん:03/07/18 21:25
>>733,737
ちみら、VB出身だな!?

739 :デフォルトの名無しさん:03/07/18 21:29
名前を並び替えたいんだけど、エラーが出てしまう。
どこを直せばいいです??マジでわかんないもんで。

{
char name[5][9] = {"yamada","kawasaki","ishikawa","machida","fukui"};

char tmp[9];

int i, j;

for (i = 0; i < 4; i++){
for (j = i + 1; j < 5; j++);{
if (name[i][0] > name[j][0]){
tmp = name[i]; /*エラー「左辺値が必要(関数 main )」*/
name[i] = name[j]; /*エラー「左辺値が必要(関数 main )」*/
name[j] = tmp; /*エラー「左辺値が必要(関数 main )」*/
}
}

}

for (i = 0; i < 5; i++){
printf("%s\n", name[i]);
}



return(0);


}

740 :デフォルトの名無しさん:03/07/18 21:31
>>739
配列名に代入はできないから。
配列のコピーはmemcpyで。


そういうもののソートは元のデータをポインタ配列にした方がいいと思うけど。

741 :デフォルトの名無しさん:03/07/18 21:32
文字列は = じゃコピーできん。
strcpy()つかえ。

742 :740:03/07/18 21:34
誰もソートとはいってねーか。スマソ

743 :733:03/07/18 21:43
え〜?
さっぱりわからんです。ヒント下さい。

744 :739:03/07/18 21:45
>>740
>>741
文字列は数字みたいに代入することはできないってことか。感謝です。
でもそれをどうやって使えばいいかぜんぜんわかんない。。。。
ありがとうございました。


745 :デフォルトの名無しさん:03/07/18 21:47
>>743
int x[1]で使えるのはx[0]だけ。x[1]を使いたかったらint x[2]とする

746 :739:03/07/18 22:00
ポインタ配列にしようと思って配列をポインタ配列にしてみたけど
( name[5][9 を *name[5][9] など)
コンパイルの時にエラーは出なかったけど実行したらエラーがでてしまった。
どこをどう直せばよかったんですか??

747 :733:03/07/18 22:04
>>745
あ、ありがとうございます。
うわーはずかしいー。

748 :デフォルトの名無しさん:03/07/18 22:04
ポインタには値は入れられないから、アドレスを入れる
たとえばint *i; int j=5; と言う場合
i = &j; って感じに
&は変数のアドレスっていう意味


749 :!=733:03/07/18 22:09
x[0] = atoi(argv[1]);
y[0] = atoi(argv[2]);
x[1] = atoi(argv[2]);  /* 3じゃ */
y[1] = atoi(argv[3]); /* 4じゃ */

750 :デフォルトの名無しさん:03/07/18 22:13
シューティングゲームみたいに上から☆がランダムで
5個降ってくるというふうにCのコンソールで表現したいのですが、
アルゴリズムはどうしたらいいでしょうか?
サンプルがあればお願いします。
できればコメントもお願いします。図々しくてすみません

751 :mainの戻り値:03/07/18 22:14
main()の戻り値、成功なら0、失敗なら1とするのが普通と思うのですが、

で、実際stdlib.h(以下はgccの例)に
#define EXIT_FAILURE 1
#define EXIT_SUCCESS 0
とか書いてありこのマクロを使えというのを昔読んだ記憶があります。とはいえ
しかし、このマクロ使っている人を見たことがありません。

これってどこかで使われてます??

752 :デフォルトの名無しさん:03/07/18 22:16
>>751
>>723>>725

753 :デフォルトの名無しさん:03/07/18 22:19
>>751
OSに依存しないプログラムを書くときは使ってるよ。

754 :デフォルトの名無しさん:03/07/18 22:20
>>751
失敗時はfprintfの戻り値にしている。

755 :デフォルトの名無しさん:03/07/18 22:29
>>750
Cでは無理なんじゃないの?

756 :デフォルトの名無しさん:03/07/18 22:31
>main()の戻り値、成功なら0、失敗なら1とするのが普通と思うのですが、

普通って?
実行環境とのインターフェイスをキミはどう設計しているの??

コーディングの段階で悩むに至った過程こそ
そんなくだらんことが誤差にもならん程の深刻な問題だぞ。

757 :デフォルトの名無しさん:03/07/18 22:33
mainの戻り値はそのプログラムを誰が起動するかでおのずと決まってくる。
hello world の戻り値なんて、ユーザが起動して戻り地なんか無視しているんだからどーでもいい。

758 :デフォルトの名無しさん:03/07/18 22:34
doubleの方がよかったのに

759 :デフォルトの名無しさん:03/07/18 22:36
>>757
勝手にhello worldを起動するのがユーザと決め付けるんじゃねーよ。

760 :デフォルトの名無しさん:03/07/18 22:37
/bin/false

761 :757:03/07/18 22:37
一般論をいったまでだがね。
後学のために、どんなシステムでhello worldを起動しているのか教えてほしいものだ。

762 :デフォルトの名無しさん:03/07/18 22:39
CGI

763 :デフォルトの名無しさん:03/07/18 22:39
>>761
一般論というのならhello worldじゃなくて一般的なプログラムで
話そうじゃないか。 そのプログラムを起動しているのは誰かね?

764 :デフォルトの名無しさん:03/07/18 22:40
>>750
APIを使うしか方法はない。
あとは、他の誰かに聞け


765 :デフォルトの名無しさん:03/07/18 22:42
>>764
はぁ?

cygwin使っても出来ますが何か?

766 :デフォルトの名無しさん:03/07/18 22:43
main関数もライブラリ化しましょう!

767 :デフォルトの名無しさん:03/07/18 22:43
>>726のコードは何をするためのプログラムですか?

768 :デフォルトの名無しさん:03/07/18 22:45
>>767
clsを呼びまくる。

769 :亀さん:03/07/18 23:12
>>674-681
Cでは文字定数はint型で'\0'は、8進表現の0を表す
よって、'\0' == 0 は必ず成り立つ

770 :デフォルトの名無しさん:03/07/18 23:22
常にこういうシェルを通して実行するような
用心深い人もいるかもしれないね。

#!/bin/bash -f

if (( $# == 0 )); then
exe=./a.out
else
exe=$1
fi

if $exe; then
echo 'success!'
else
echo 'failure...'
fi

771 :デフォルトの名無しさん:03/07/18 23:29
>>750
アルゴリズムが何なのか分かっているのか小一時間(略)

772 :デフォルトの名無しさん:03/07/18 23:38
ずれたら・・・
   ,,--―'''""`ヽ'         ̄`ヽ、
           /        ヾ  /       ~`ヽ
         /           ヽ;:  /"""ヾ   ヽ
        /        ;:;;:::''''   l /;:;;:::'''  \   i
      /        /;:;;:::'''           ヽ  ヽ
      |         |  _,,___       . _,,,,__,_ヽ  |
      /        ;/ /   ゙^\ヽ..  , /゙   ¨\,.-
     /        ;:;:ヽ「 ●     | 》  l|    ● ゙》ヽ
     i          /i,.      .,ノ .l|  《      .|ヽ ヽ
     |          | \___,,,,,_/ .'″ ^=u,,,,_ v/ | |
     |          |.                  |. |
     |         ;:|           :::::::       | :|
      |         ヽ.         ( ,-、 ,:‐、   | | 
      |       /ヾ..                  | |
      |          |         __,-'ニニニヽ .  |  |
..       |        `、ヽ        ヾニ二ン"  /  |
        |         ヽ\             /  |
        |          l  `ー-::、_       ,,..'|ヽ./ 
        ヽ.        :人      `ー――'''''  / ヽ
        /;:;:;:;;:;:;: _/  `ー-、          ,.-'"   \ー-、
           ,.-'"  \:      \      .,.-''"     |
         /.     \        ~>、,.-''"      |
    ,,..-‐'''""        ヾ    ,.-''"|    /――――、/

773 :772:03/07/18 23:40
やべっ。なんか変な風にズレてしまった。


774 :デフォルトの名無しさん:03/07/18 23:50
forループでループを回してループ変数 i という名前の
ファイルを読み込む場合どのようにすればよいでしょうか?
もしくは、i.txt というファイルを読み込むにはどのように
すればよいでしょうか?
atoiみたいにiを文字列に変換できればよいのですが。

775 :デフォルトの名無しさん:03/07/18 23:53
itoaか

776 :デフォルトの名無しさん:03/07/18 23:59
http://gametui.hp.infoseek.co.jp/c7.txt
このテトリスすごいんですけど。
このくらいのコードはCを始めてどのくらいでかけるものなのでしょうか?


777 :デフォルトの名無しさん:03/07/19 00:00
本人に聞け

778 :デフォルトの名無しさん:03/07/19 00:01
sprintf()だな

779 :デフォルトの名無しさん:03/07/19 00:05
>>776のファイル名からCで書いた七行テトリスだと期待したのは俺だけか?

780 :名無し:03/07/19 00:17
>>779
おれも思った

781 :739:03/07/19 01:25
>>748
ポインタ配列にすればいいんですね。どうにかそこまでたどり着きました。
ありがとうございます!!



782 :774:03/07/19 01:36
>>775
itoa・・・ですか?
自分の持っている本には載っておらず、ネットで調べても
良く分かりませんでした・・・。

>>778
なるほど。sprintfですね。

783 :デフォルトの名無しさん:03/07/19 01:38
char str[20];
初期化子以外で、この配列をすべて'x'で初期化する関数があれば
教えていただけないでしょうか。


784 :デフォルトの名無しさん:03/07/19 01:42
>>783
memset()

785 :783:03/07/19 01:48
>>784
ありがとうございました。

786 :デフォルトの名無しさん:03/07/19 02:02
最後の '\0' を入れないと文字列としては機能しないけどね。

787 :デフォルトの名無しさん:03/07/19 02:11
任意の変数の値を交換する関数を作りたいんだけど
俺が考えたのは

void swap(void *a,void *b,unsigned int size){
void *temp;
if(a==b)
return ;

temp=melloc(size);
memcpy(a,temp,size);
memcpy(a,b,size);
memcpy(b,temp,size);

free(temp);
return ;
}

サイズを渡さずに引数が交換したい変数だけの関数って作れる?

788 :デフォルトの名無しさん:03/07/19 02:12
>>787
#define SWAP(a, b) swap(a, b, sizeof(a))

789 :デフォルトの名無しさん:03/07/19 02:13
>>787
マクロを選ぶか、関数を選ぶか、
マクロだけを公開するか。
StandardCLibraryって本(C標準ライブラリ実装演習)に載ってるよ。

読んだ事なければ、暇つぶしに良いかも。

ちなみに、Cに限定する話しか乗ってないから、これを全てだと思って、
こだわって立ち止まらないように。
そこらおじいさんと同じになっちゃいます。

790 :デフォルトの名無しさん:03/07/19 02:19
>>787
君が欲しいのはコレであろう
http://pc2.2ch.net/test/read.cgi/tech/1038215563/463

791 :デフォルトの名無しさん:03/07/19 02:21
>>786
ありがとうございます。気をつけます。

792 :デフォルトの名無しさん:03/07/19 02:21
>>788
なるほど。
でもaはポインタでしょ
sizeof(a)が返すのはポインタのサイズじゃないの?
#define SWAP(a, b) swap(&(a),&(b), sizeof(a))
勘違いしてたら突っ込んで

>>789
その本は知らないな。
機会があれば読んでみます。

793 :デフォルトの名無しさん:03/07/19 02:22
俺ならこーする。

#define SWAP(a, b, type) do { type c = b; b = a; a = c; } while(0)

794 :787==792:03/07/19 02:27
>>793
なるほどねぇ。
いろいろあるんだな。
ちょっと感動した。

795 :デフォルトの名無しさん:03/07/19 02:58
>>787
1バイトずつ交換すればmallocを使わずにできる。

796 :kgp:03/07/19 03:14
#include<stdio.h>
#include<stdlib.h>


struct person{
int number;
int height;
int weight;
int sex;
int i;
}

int main()
{
struct person date[20];
int i = 0;

printf("番号、身長、体重、性別を入力してください.\n");
printf("ただし番号は2桁、身長は150〜180、体重は45〜90、性別は男が1で女が2というようにしなさい.\n");

while(getchar() != EOF){
scanf("%d%d%d%d",&date[i].number,&date[i].height,&date[i].weight,&date[i].sex);
i++;
}

return 0;
}
自分ではうまくやったつもりなのですが
コンパイルできません
どこをいじればよいですか?

797 :デフォルトの名無しさん:03/07/19 03:16
;が抜けてる

798 :デフォルトの名無しさん:03/07/19 03:27
>>793
ちょっと do-while を使う意味が分かりません。
普通にブロックで囲んだだけじゃダメなんですか?

799 :デフォルトの名無しさん:03/07/19 03:35
>>798
それが分かるようになるまで、ブロックに囲むだけで良いよ
普通の関数と同様に使ってれば、多分、分かる事だから

800 :デフォルトの名無しさん:03/07/19 03:45
>>800
もったいぶらないで教えてくれよ。

801 :デフォルトの名無しさん:03/07/19 03:47
>>800>>799

802 :デフォルトの名無しさん:03/07/19 03:50
>>799
神!!

俺もそうしよう

これ以降この話題に触れたやつは切る

803 :デフォルトの名無しさん:03/07/19 03:56
>>798
そんなもの使うな、どうせ関数と全く同様に使える訳ではないんだし
それがどうしても必要ならばそろそろC++にうつる時期だ

そんな間に合わせのかたわ位で了見の狭い奴が多いな。
俺はそういう奴が大嫌いだ。だから教えてやる。
if()SWAP();elseとかを考えてみろ

804 :デフォルトの名無しさん:03/07/19 03:58
>>802
そんな事言わずにさ

805 :デフォルトの名無しさん:03/07/19 04:03
どうせ教えるなら、少しひねって、
if()SMAP();else
とかにすれば、可愛げがあるものを…

806 :デフォルトの名無しさん:03/07/19 04:08
>>803
偉そうに書いてるけど、一般人にとっては常識(w

807 :デフォルトの名無しさん:03/07/19 04:09
なんかばっさり切られてるね?

808 :デフォルトの名無しさん:03/07/19 04:26
一般人=プログラマではない=知らない=常識ではない

809 :デフォルトの名無しさん:03/07/19 04:29
>>803
全部大文字にしてあることでマクロであると警告し、
ここに代入文なんぞ突っ込むな! という主張を行っている。
そして、セミコロン対策するのはエディタの自動インデント対策でもあるし、
セミコロンがいるのかいらないのか悩む必要もなくなる。

810 :デフォルトの名無しさん:03/07/19 10:03
下らんトリック使わずに仕様書にマクロだと注意書きしろよ。

811 :デフォルトの名無しさん:03/07/19 11:10
>どうせ関数と全く同様に使える訳ではないんだし

これにつきる

812 :デフォルトの名無しさん:03/07/19 12:15
>>811
putchar(*p++);

813 :デフォルトの名無しさん:03/07/19 12:29
>>812
何を言いたいのかわからないが、それはきちんと「引数を複数回評価するマクロとして実装されているかもしれない」と書かれている。

814 :デフォルトの名無しさん:03/07/19 13:02
注意書きがあるよりも、マクロはマクロらしくあって欲しいし
副作用の発生する関数の呼び方はして欲しくない。

815 :813:03/07/19 13:11
わ! 恥ずかしい・・・

>>812
すまない、812が>>810へのレスと勘違いしたよ。

816 :デフォルトの名無しさん:03/07/19 15:53
>>813
>と書かれている。

何に?
少なくとも規格書ではあるまい

7.1.7 ライブラリ関数の使用法
マクロとして実装されたライブラリ関数の呼び出しでも、
その実引数がただ1回だけ評価され、
かつ必要な箇所ではカッコによって完全に保護されるような
コードに展開されなければならない。

7.9.3.9 putchar関数
int putchar(int c);
(マクロとは一言も書いてない)

817 :デフォルトの名無しさん:03/07/19 16:05
常識とか言ってた人、もう来ないだろうねw

818 :デフォルトの名無しさん:03/07/19 16:55
まあ C のマクロなんて糞なものは使わないのがベター。

819 :デフォルトの名無しさん:03/07/19 17:15
>>818
#define putchar(c) putc(c, stdout)
#deinfe putc(c, fp) do { int x = (c); fp->pos < fp->capa ? fp->fp[fp->pos++] = x : fputc(x , fp); } while(0)

820 :デフォルトの名無しさん:03/07/19 17:46
>>819
つかわねぇなぁ。

821 :デフォルトの名無しさん:03/07/19 17:49
>>819
int x; for (x = 0; x < 256; x++) putchar(x);


822 :デフォルトの名無しさん:03/07/19 19:36
整数値をstdinから読み込むとき
scanf("%d%c" , &hoge , &damy) ;

fgets(buff , sizeof(buff) , stdin) ;
sscanf(buff , "%d" , &hoge) ;
となら
どっちが安定ですか?

823 :デフォルトの名無しさん:03/07/19 19:42
>>818
struct node {
 int nodekind ;
 union {
  struct {
   int childs ;
   struct node *child[MAX] ;
   int low[MAX] ;
  } internal ;
  struct {
   int leafkey ;
   int data ;
  } leaf ;
 } u ;
} ;
#define CHILDS u.internal.childs
#define LEAFKEY u.leaf.leafkey

使っとけ

824 :デフォルトの名無しさん:03/07/19 19:44
>>822
安定って意味がわからんが、一般的には下のほうが良いとされている。


825 :デフォルトの名無しさん:03/07/19 19:49
>>822
せっかく>>1にC FAQのリンクがあるんだから、隅々まで見てきなされ

826 :デフォルトの名無しさん:03/07/19 19:53
>>824
scanf("%d%c" , &hoge , &damy)
こいつだと起きそうな不具合ありますかね?

827 :デフォルトの名無しさん:03/07/19 19:56
葉鍵?

828 :デフォルトの名無しさん:03/07/19 19:59
>>821
あー、Compilerだけで使いたい変数・関数はアンダースコアで使う。
プログラム側はつかっちゃだめとかあったような。

ちなみに、ローカル変数は名前重複可能って、++だけだっけ?

829 :デフォルトの名無しさん:03/07/19 20:32
>>828
ブロック内で定義された変数はその外部に影響しないから名前の重複は無問題。

>>826
数字の後にすぐ改行があるとは限らない。

830 :デフォルトの名無しさん:03/07/19 20:34
>>822
要求仕様ではbuffの中の食べ残しをどうすることになっている?

831 :デフォルトの名無しさん:03/07/19 20:40
>>828
アンダースコアなんて気休めにもならないよ、
ベンダとユーザの境界は常に1つじゃないんだから。
例えばSystemCなんてどっちになる?

ちなみに、ローカル変数だって1つの式の中で2回++はだめだよ。
int giko;
void mona(void)
{
int giko;
{
int giko
}

キミが聞いたことあるのは
おそらくこれがOKってだけのことだろ。

832 :デフォルトの名無しさん:03/07/19 20:45
その++じゃないだろ〜

833 :デフォルトの名無しさん:03/07/19 20:49
>>829
処理系定義のマクロがアンダースコアで始まる変数や関数を参照していたら?

834 :824:03/07/19 22:34
>>822

例えば、以下のようなコードの場合、

#include <stdio.h>

int main(){
int hoge;
char damy;
scanf("%d%c" , &hoge , &damy);
printf("hoge'v value = %d \n",hoge);
scanf("%d%c" , &hoge , &damy);
printf("hoge'v value = %d \n",hoge);
return 0;
}

実行結果は以下の通り

./a
1234
hoge'v value = 1234
a
hoge'v value = 1234 <- 前の奴が残っている

835 :デフォルトの名無しさん:03/07/20 00:02
>>834
scanfの戻り値チェックシヨーネ

sscanfとか関係ねー

836 :デフォルトの名無しさん:03/07/20 00:18
何言ってるんだ?

837 :デフォルトの名無しさん:03/07/20 00:20
>>836
scanfの戻り値はパースに成功した引数の数

838 :デフォルトの名無しさん:03/07/20 00:23
damy
が恥ずかしいな


839 :デフォルトの名無しさん:03/07/20 00:29
恣意的には、恥ずかしいのはこれで
>int main(){

>damy
は、恥ずかしくない。

840 :デフォルトの名無しさん:03/07/20 00:31
好きな女の子の名前付けたっていいじゃんかよう!ヽ(`Д´)ノ ウワァァン

841 :デフォルトの名無しさん:03/07/20 00:34
釣りか?
釣りだな?
釣りなのか?
釣りなんだろ?
釣りなんですか?

842 :デフォルトの名無しさん:03/07/20 00:35
C調言葉なら俺に聞け!

843 :デフォルトの名無しさん:03/07/20 01:10
C調て。オサーンですか?

844 :デフォルトの名無しさん:03/07/20 01:18
サザンだろ

845 :デフォルトの名無しさん:03/07/20 01:59
>>816
JISの規格書にはっきりと書かれている

7.9.7.9 putchar関数
機能 putchar関数は、第2引数としてstdoutを指定したputcと等価とする。

7.9.7.8 putc関数
機能 putc関数は、fputcと等価とする。ただし、マクロとして実装されたputc関数は、streamを2度以上評価することがある。したがって、実引数streamは、副作用を伴わない式でなければならない。


846 :845:03/07/20 02:00
あ、、しまった。二度以上評価するのはstreamか・・・・

847 :845:03/07/20 02:02
ということは>>812はなんら問題ないわけだから、812は何をいいたかったんだろう・・・

848 :デフォルトの名無しさん:03/07/20 02:32
>>847
全てのコンパイラがJIS準拠だと思ってる香具師はDQN

849 :デフォルトの名無しさん:03/07/20 02:49
つまり、
FILE **fp;
の時に
putc(c,*fp++);
みたいな使い方は駄目って事か
正直、知らんかったな…
まぁ、普通に書いてて、そんな書き方する事はないけど…

850 :デフォルトの名無しさん:03/07/20 04:57
JISの規格とANSIの規格は違うの?

851 :デフォルトの名無しさん:03/07/20 05:01
ただの翻訳

852 :デフォルトの名無しさん:03/07/20 06:51
>>850
章のナンバーが微妙に違う

853 :デフォルトの名無しさん:03/07/20 06:54
読み方 : ジス
フルスペル : Japan Industrial Standard
工業標準化法に基づいて、すべての工業製品について定められる日本の国家規格。コンピュータと情報処理はX部門にまとめられている。

読み方 : アンシ、アンジー
フルスペル : American National Standard Institute
アメリカ国内の工業製品の規格を策定する団体。1918年に設立された。日本のJISにあたる。

854 :デフォルトの名無しさん:03/07/20 09:04
そこで何故ISOの解説がありませんか。

855 :デフォルトの名無しさん:03/07/20 09:05
>>848
処理系を特定せずに話している限り、それは仕方ないだろう。
どちらかというと>>793,>>798,>>799,>>803,>>806,>>809,>>811の流れで
>>812のような例を出していることが愚かしいとの>>816の指摘に対して
出展を明らかにしない>>819は空疎な悪あがきとしか言いようがない。

856 :デフォルトの名無しさん:03/07/20 09:50
>>854
しーーーーっ!
せっかくオモロイのにぶち壊すなよ

857 :デフォルトの名無しさん:03/07/20 10:54
(,,*゚o゚*)<

858 :デフォルトの名無しさん:03/07/20 10:57
(,,*゚o゚*)< ふぇろもん!


859 :デフォルトの名無しさん:03/07/20 11:07
??
> 恣意的には、恥ずかしいのはこれで
> >int main(){

int main(void) または int main(int,char**)にしてくれってこと?
あるいは、int main(int,char **,char **)か。

* 恣意的って日本語の使い方あってるのかどうかさえ解らん。
ttp://members.jcom.home.ne.jp/w3c/kokugo/kotoba/Shiiteki.html
一瞬、ιぃかとも思ったよ...

860 :デフォルトの名無しさん:03/07/20 11:12
C的には

861 :デフォルトの名無しさん:03/07/20 11:26
mainを他の関数から呼び出すことはないからint main()でもいいと思うけど・・・

862 :デフォルトの名無しさん:03/07/20 11:30
>あるいは、int main(int,char **,char **)か。

ワラタ

863 :デフォルトの名無しさん:03/07/20 17:28
ポインタで詰まってます。
間接参照でしたっけ。よく分かりません。
説明してもらえませんか?
#include <stdio.h>

int main()
{
int *po , var;
var = 100;
po = &var;

*po = 1010;
printf("変数varの値 = %d" , var);

return 0;
}



864 :デフォルトの名無しさん:03/07/20 17:34
>>863
そのコードを100回くらい読み直してみろ。

865 :デフォルトの名無しさん:03/07/20 17:41
メモリのどこかにint型の領域がある。
普段は名前(var)でアクセスする。
&を付けるとアドレスを返す。
ポインタ(po)にはアドレスが入る。
ポインタに*をつけると名前(var)でアクセスしたのと同じようにアクセスできる。

866 :デフォルトの名無しさん:03/07/20 17:44
メモリっていうのは address と value で出来ていて、
int var で宣言された変数 var は value を持つんだけど、
int *po で宣言された変数 po は address を持つことが出来る。

ゴメン、上手く説明出来ないや。アーキテクチャを学ぶと良いかも。

867 :デフォルトの名無しさん:03/07/20 17:58
>>863
そのコードだと、poにvar(=100)のアドレスを格納した後、
poの指す先(var)を改めて1010に設定していることになる。
だから、vsrの値も100から1010に変更され、1010が表示された。

868 :_:03/07/20 18:00
http://homepage.mac.com/hiroyuki44/jaz08.html

869 :デフォルトの名無しさん:03/07/20 18:00
アセンブラを先にやってるとptr+=sizeof(int)とかして悩んだり悩まなかったり(w

870 :デフォルトの名無しさん:03/07/20 19:07
po = &var; //varの値(100)をポインタ変数poに代入
*po = 1010; //?

うわぁ、分からないヽ(`Д´)ノ

871 :デフォルトの名無しさん:03/07/20 19:30
>>870
*と&の意味ワカル?

872 :デフォルトの名無しさん:03/07/20 19:35
ポインタというのは2つの要素から出来ている。
1つはアドレス。もう1つは参照先の型。
アドレスというのはメモリ上の位置のこと。
そのポインタを入れることの出来る変数がポインタ変数で、
int *po;
のように宣言すると、po がポインタ変数になって、
参照先の型は int であると仮定される。

ある変数のポインタは & を使えば得られる。
例えば
int var;
の var のポインタが欲しければ &var とすれば得られる。
これを po に入れるには、普通の代入
po = &var;
を使えばいい。

873 :デフォルトの名無しさん:03/07/20 19:39
>>870
>po = &var; //varの値(100)をポインタ変数poに代入
違う。

874 :デフォルトの名無しさん:03/07/20 19:39
さて、ポインタがあると何が出来るだろうか。
メモリ上の位置と、その型が分かっているので、
そこの値を参照したり、そこに値を入れたりすることができる。
それを行うには * というものを使って
*po = 100;
とか
printf("%d\n", *po);
とかすればいい。
*po とすると、po の中に入っているアドレスを始点とした
int のサイズの領域を参照することができるのだ。

875 :870:03/07/20 19:44
>>873
違いますか・・・

876 :デフォルトの名無しさん:03/07/20 19:45
で、ポインタと普通の値との違いを見てみよう。
例えば
int var = 100;
int num;
だとして、
num = var;
としたとしよう。
この場合、num に渡されるのは 100 という値だ。
つまり、var と num という二箇所にそれぞれ 100 という値があることになる。
この場合、var++; としても、var は 101 になるが num は 100 のままである。

一方ポインタの場合は渡されるのはメモリ上の位置であって、値そのものではない。
つまり、100 という値が入れられた場所は相変わらず var の一箇所のみである。
位置を共有しているので、var++; とすれば var も *po も 101 になるし、
同様に (*po)++; とすると var も変わる。
なぜなら、var と *po はメモリ上の同じ領域を表しているからである。

877 :デフォルトの名無しさん:03/07/20 19:46
*po = 1010

878 :デフォルトの名無しさん:03/07/20 19:47
最後の一文はその前の文の先頭と同じこと言っちゃってた。スマソ。

879 :デフォルトの名無しさん:03/07/20 19:47
#include <stdio.h>

int main()
{
int *チャンネル , 番組;
番組 = めざましテレビ;
チャンネル = &目覚ましテレビ; //チャンネル = 目覚ましテレビのチャンネル

*チャンネル = 僕だけのマドンナ; //このチャンネルの番組 = 僕だけのマドンナ
printf("変数番組の値 = %d" , var);

return 0;
}

上手く説明できんなぁ

880 :デフォルトの名無しさん:03/07/20 19:54
*(アスタリスク)は単体ではなく型の一部です。
つまり
int *i;とあると、アドレス型の入れ物に&(アンパサンド)でアドレスを
抽出していれる。そうすると、iはそのアドレスを示すのです。
つまり *iではなく、int *であってiはただの入れ物です。

881 :デフォルトの名無しさん:03/07/20 19:56
po = &var; //
*po = 1010; //

これにコメントを付けてみると・・・


882 :デフォルトの名無しさん:03/07/20 20:00
では、このポインタを使うと何が出来るのだろう。
大きく分けて、ポインタには 4 つの利用法がある。

1. 関数を超えてメモリを共有したい。
別の関数に大きなサイズをもった値を渡したい場合や、
特にサイズの決まっていない値(配列)を渡したい場合は、
ポインタだとサイズが小さくなるので便利である
(配列そのものはそもそもポインタを使ってしか渡せない)。
また、別の関数内で変数の値を変更させたい場合にも利用できる。
普通に関数に渡しただけでは num を使った例で
num の値を変えたところで var の値が変わらないのと同じように、
仮引数を操作しても実引数に渡した変数の中身は変えることができない。
でも、ポインタを使えばこれを解決することが出来る。

2. 動的にメモリを確保したい。
malloc という関数を参照。今はまだ気にすることはないと思う。

3. 特殊なデータ構造を実現したい。
リスト構造、木構造などを参照。これもまだ気にすることはないと思う。

4. 参照したいメモリの位置を得ることが面倒な場合に、そのアクセスを簡単にする。
例えば a[foo(n)][bar(b * n + c)] を何度も参照したい場合には、
このポインタをポインタ変数に入れておけば、そのポインタ変数を使って楽に操作できる。
strchr などの関数の戻り値を保存しておくことも良くある。

883 :デフォルトの名無しさん:03/07/20 20:31
みなさん、どうも説明ありがとうございます。
でも、po = &var;
    *po = 1010;
の意味がやっぱりイマイチです。
プリントアウトして寝るまで考えてみます

884 :デフォルトの名無しさん:03/07/20 20:48
間接参照自体はプログラムの中でよく使われるのですか?
ヽ(`Д´)ノ

885 :デフォルトの名無しさん:03/07/20 20:49
poはポインタです。アドレスを蓄えてくれます。
&はアドレスを教えてくれます。
po = &var;でvarのアドレスがpoに蓄えられます。
*はすごいです。実際にアドレスのところまで連れていってくれます。
poはアドレスが代入されて、アドレスを返しますが、
*poは(poに蓄えられたアドレスのところに)代入もできるし、
そこから値をとりだすこともできます。
*po = 1010;はvar = 1010;と同じになります。

886 :デフォルトの名無しさん:03/07/20 20:59
で,*って記号はなんて読むの? nullって読んだらいいのかな.
ってことは*po = nullpo ≒「ぬるぽ」?

887 :デフォルトの名無しさん:03/07/20 21:01
アスタリスクだっけ。

888 :デフォルトの名無しさん:03/07/20 21:05
*po = 1010; でなんでvarの値が変わるのかわからんのです

889 :デフォルトの名無しさん:03/07/20 21:06
poにvarのアドレスが入っていると
*poへの代入はvarへの代入をする。

890 :デフォルトの名無しさん:03/07/20 21:09
poの中の人はvarなんだよ

891 :デフォルトの名無しさん:03/07/20 21:14
varへの代入があったときに
CPUはvarのあるアドレスを使って処理をするわけ。
それができるようにコンパイラが変換してる。

アドレスの値そのものをいじくるんじゃなくて
アドレスを使った処理をする時に*を使うの。

892 :デフォルトの名無しさん:03/07/20 21:18
int *po;
のときpoはポインタで*poは実体、であってる?


893 :デフォルトの名無しさん:03/07/20 21:19
正しいアドレスを指してれば、あってるよ。

894 :デフォルトの名無しさん:03/07/20 21:35
(゜д゜(  人  ) =3 プ

895 :デフォルトの名無しさん:03/07/20 21:54
int po = NULL;
*po = 10;

ぬるぽ

896 :デフォルトの名無しさん:03/07/20 22:44
言いたい事わかるけど そのソース間違ってるよ

897 :デフォルトの名無しさん:03/07/20 23:28
>896
あっ。ポインタになってない 鬱

898 :デフォルトの名無しさん:03/07/20 23:31
>>895
ガッ

899 :デフォルトの名無しさん:03/07/20 23:53
>>863
中学生か?マルチもほどほどにしとけよヴォケ


900 :デフォルトの名無しさん:03/07/20 23:54
遅っ

901 :pop:03/07/20 23:59
1)以下の式を中央差分を使って計算するプログラムを作成してください。df(x)/dxを
計算する。
f(x)=ax*x+bx+c
係数aは10、bは5、cは2とします。答えは、2ax+bになるはずなので数値的に微分した
結果と解析的に求めた値を比べて、計算が正しく行われていることを示してください。
計算範囲は0から2までとします。分割数は各自決めてください。(十分正確に計算できるように)
2)
台形公式を使って、1)の式を積分計算してください。積分範囲は0から2とします。
解析的な解も計算して、数値計算結果を比較してください。a、b、cの値は1)と同様とします。

以上のプログラムと実行結果をお願いいたします.
もう完全にギブです。(T-T)どうかどなたでもよろしいのでお助けください。

902 :デフォルトの名無しさん:03/07/21 00:01
>>901
マルチは駄目ポ

903 :デフォルトの名無しさん:03/07/21 00:06
>>901
前もそんな系統の質問があったな。
法線を求めるって奴で、外積を使う奴だったような…
で、その時も答えたがプログラム的には簡単だ。
君に微積分の知識がないだけだ。

数学を勉強しなさい。
(今回はヒントコードすら面倒)

904 :デフォルトの名無しさん:03/07/21 00:30
コードをできるだけ短く書くこつを教えてください

905 :デフォルトの名無しさん:03/07/21 00:31
同じ処理は関数にまとめる。

906 :デフォルトの名無しさん:03/07/21 00:49
変数名や関数名は1文字〜2文字。
マクロを多様。
#define I if
#define E else
#define F for
などなど…

907 :デフォルトの名無しさん:03/07/21 01:07
>>906
氏ね

908 :デフォルトの名無しさん:03/07/21 01:08
おまえが知ね

909 :デフォルトの名無しさん:03/07/21 01:13
>>906
士ね

910 :デフォルトの名無しさん:03/07/21 01:34
>>906


911 :デフォルトの名無しさん:03/07/21 01:36
スレッドで質問があります。
A,B,Cの3つの処理があって、ABはどっちを先に処理してもよくCはAB終了後でないとだめ。
ここで、A,Bをスレッドにしたいんですが、A、Bが終わるまでCの実行は待たないといけません。
この「A、Bが終わるまで待つ」ことのやり方がよくわかりません。

自分で試してみたのは、チェック用の外部変数を用意して

check=0;
_beginthread(A);
_beginthread(B);
while(check!=2);
C;

こんな感じでやってみました。AとBは終了するときにcheckを1増やします。
簡単なテストプログラムを作ってみたところ上手く動いたのですが、本当にこれでいいのか不安です。
とくに、ABが終わるまでひたすらループで待ち続けるのは、無駄にCPU使ってそうで
もっとスマートな方法があるんではないかと。


912 :デフォルトの名無しさん:03/07/21 01:38
>>910
限りなくVCの香りがするのは気のせいか?

913 :デフォルトの名無しさん:03/07/21 01:39
>>911
マルチタスク(スレッド)のOSには必ずそれを
管理するオブジェクトやAPIが用意されている。
それを利用した方がいい

914 :デフォルトの名無しさん:03/07/21 01:48
>911 mutex, condition variable

915 :911:03/07/21 02:08
今はVCで作ってるけど、できればLINUXでも動く方が望ましいんです。
調べてる途中でmutexとかも出てきたんですけど、どう使えばいいかわからなくて。

今思いついたんですけど、
1、AとBの実行直後に適当な変数にロックをかけて終了時にロックを外すようにする。
2、Cの前でロックかけられてるやつにアクセスする。
こうすれば、AとBが終了するとともにロックが解け、Cが実行される。
というのでいけるかな?明日試してみます。


916 :デフォルトの名無しさん:03/07/21 02:09
うぉおおおおおおおおおおおおおおおおおおおおおお
めちゃ便利
これから毎日使う!

vi _906.h
$cp _906.h /usr/include

917 :デフォルトの名無しさん:03/07/21 02:10
>>915
win32用のpthreadがある
それつかえばlinuxでも動くはず
pthreadはオライリーの本がちゃんとあるので嫁

918 :デフォルトの名無しさん:03/07/21 02:11
>>916
一般ユーザがそこにコピーできるのか

919 :≠915:03/07/21 02:21
% rm -f _906.h

pthread_join 見てみたけど、
ライブラリとして void** を使ってるのはいかがなものか。

920 :デフォルトの名無しさん:03/07/21 02:28
void *へのポインタならvoid *に入ると思うんだけど。。。

921 :デフォルトの名無しさん:03/07/21 02:31
最近c始めたんですけど

#include <stdio.h>
main()
{
int ja; /*国語のテストの点*/
int ma; /*数学のテストの点*/
int en; /*英語のテストの点*/
int ave; /*平均点*/

ave = ( ja + ma + en ) /3;
printf("三教科の平均点は%dです。\n",ave);
}

こう書いてコンパイルすると平均点が47点になるんですけど…
よく分りません。なんで47点?
だれか親切に教えてください。

922 :デフォルトの名無しさん:03/07/21 02:32
>>921
初期化してない変数の値は激しく未定義だYO!

923 :デフォルトの名無しさん:03/07/21 02:33
>>921
初期化していない自動変数にはどんな値が入るか分からない。

924 :デフォルトの名無しさん:03/07/21 02:33
>>921
1. 初期化してない変数には、どんな値が入っているか分からない。
2. 整数同士の割り算では、余りは切り捨てられる
  (但し、片方が正で片方が負の場合の結果は環境依存)。

925 :906:03/07/21 02:33
#define I int main()
I
{
}

926 :デフォルトの名無しさん:03/07/21 02:34
#define I2 int main(int argc,char *argv[])
I2
{
}

927 :デフォルトの名無しさん:03/07/21 02:35
>>921
あなたの得点です

928 :デフォルトの名無しさん:03/07/21 02:35
>>923
お、そうだった。
静的変数だと 0 で初期化されるね...。

929 :デフォルトの名無しさん:03/07/21 02:38
>>922
>>923
>>924
何でもいいから値を入れろってことですか?

あと、初期化の意味が分からん…

930 :デフォルトの名無しさん:03/07/21 02:43
#define I int main(int argc,char **argv,char **env)
#define C printf("%s\n",env[0]);
I
{
C
}


931 :重婚罪の922:03/07/21 02:43
int variable1 = 10; /* 初期化ぽ */
int variable2;
variable2 = variable1; /* 代入ぽ */

932 :デフォルトの名無しさん:03/07/21 02:45
>>929
int ja = 78; /* 初期化 */
int ma = 100; /* 初期化 */
int en;
int ave;

en = 82; /* 代入 */
ave = (ja + ma + en) / 3; /* 代入 */

933 :デフォルトの名無しさん:03/07/21 02:45
ケコーンしまくり

934 :デフォルトの名無しさん:03/07/21 02:46
>>929
初期化(脳内C言語事典78ページより)
変数を参照(使用)するより前に、何かしらの値を入れる事

935 :921:03/07/21 02:50
分かりました!!
アリガト!(´▽`)

936 :デフォルトの名無しさん:03/07/21 02:50
>>934
確かに代入においても参照されるといえば参照されるのだが、
誤解されそうな定義なので却下。

初期化(脳内C辞典201ページより)
変数を宣言すると同時に何かしらの値を入れること。

937 :デフォルトの名無しさん:03/07/21 03:22
もう次スレの時期なんでつか?早いでつね。

938 :デフォルトの名無しさん:03/07/21 04:09
char buf[256];
#define TRACE(_msg_) strcpy(buf,"_msg_");

とやったマクロを使うと失敗してしまうのですが
これを回避する方法ってあるのでしょうか?
11.17を読んだのですがわかりません

939 :デフォルトの名無しさん:03/07/21 04:25
>>938
#define TRACE(_msg_) strcpy(buf,#_msg_);

940 :デフォルトの名無しさん:03/07/21 04:26
#define TRACE(_msg_) strcpy(buf, #_msg_);

941 :デフォルトの名無しさん:03/07/21 04:26
本日3度目のケコーン。

942 :デフォルトの名無しさん:03/07/21 04:42
struct bumon {
char *name;
int bangou,total;
} *part_ptr,part;

のように宣言して他の関数で
while(!feof(fp)) {
part_ptr = (bumon *)malloc(sizeof(bumon));
fscanf(fp,"%d",&(part_ptr + bumonsuu)->bangou);
fscanf(fp,"%s",*(s + ));
printf("%d %s\n",(part_ptr + bumonsuu)->bangou,*s);
if(feof(fp)) break;
bumonsuu++;
}
というのがあるのですが
printfとかfscanfで*nameを使うにはどうすればいいのですか?

943 :デフォルトの名無しさん:03/07/21 04:48
その前に name の参照先はどこよ?

944 :デフォルトの名無しさん:03/07/21 05:03
あと、めっちゃメモリリーク&不正アクセスしてる悪寒。

945 :942:03/07/21 05:26
何が悪いのか分かりました。
char *nameと宣言すれば配列になると勘違いしてました
参照して、値入れなきゃ駄目なんですね。

946 :デフォルトの名無しさん:03/07/21 05:42
>>940
最後のセミコロンは場合によるね

947 :デフォルトの名無しさん:03/07/21 05:53
夏だなあ。みんな、質問の前にK&Rを読もう!君の考えていることの大体は載ってるし、
答えもここの人たちよりもカッコイイのがある。アメリカの一流プログラマはみんな
この本を神棚に祭って、毎日三回読誦してるんだよ。
 
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

948 :デフォルトの名無しさん:03/07/21 05:55
アメリカで神棚て...。

949 :デフォルトの名無しさん:03/07/21 06:13
#include <stdio.h>

int main() {
      char str[] = "hello,world";
      printf("str[0]の内容\t\t= %c\n" , *str);
      printf("str[0]のアドレス\t= %x" , str);
      return 0;
}

このプログラムの意味が分かんないです。
コメント付けてもらえないでしょうか

950 :デフォルトの名無しさん:03/07/21 06:14
>>942
>part_ptr = (bumon *)malloc(sizeof(bumon));

struct bumonな
もしかして、そのソースの拡張子がcppになってるか?
Cを憶えるのにC++で翻訳してると嘘を教え込まれるぞ

それからsizeofにはbumonsuuのとりうる最大値+1を掛けてないのに

>fscanf(fp,"%d",&(part_ptr + bumonsuu)->bangou);
は無理だろ

951 :デフォルトの名無しさん:03/07/21 06:28
>>949
#include <stdio.h>

int main() { /* 引数がないことを示す表記は (void) で () は誤り、ブレースの開き方がK&Rや規格票と違う */
      char str[] = "hello,world"; /* 初期値のある配列はなるべくstaticにせよ */
      printf("str[0]の内容\t\t= %c\n" , *str); /* 入門用サンプルならprintf("%c", str[0]);が適切な表記 */
      printf("str[0]のアドレス\t= %x" , str); /* 入門用サンプルならprintf("%x", &str[0]);が適切な表記 */
      return 0;
}


952 :デフォルトの名無しさん:03/07/21 06:36
>>950
まぁ、それ以前の問題なんだがな...。
長さ不定の場合は、リスト構造にするか、
ある程度の配列を確保して足りなくなったら伸長するのがいいっぽ。
先頭から順番にアクセスするだけなら前者、
[ ] 使ってランダムアクセスしたければ後者、だな。

953 :デフォルトの名無しさん:03/07/21 06:58
>>951
%xを使っていることに対してはつっこまないのか?

954 :951:03/07/21 07:17
>>953
まあそうだね。キミがつっこめばいい。

955 :デフォルトの名無しさん:03/07/21 07:49
初期値のある配列はなるべくstaticにせよ。か。へぇ〜
参照のみの配列はなるべくstatic constにせよ。なら話は分かるけど。

956 :デフォルトの名無しさん:03/07/21 10:30
>>955
初期値のある、一時利用の配列は?

957 :951:03/07/21 10:56
>>956
もしかしてautoって言いたいの?

958 :デフォルトの名無しさん:03/07/21 11:32
http://pc2.2ch.net/test/read.cgi/tech/1058754682/

新スレ
YBBで立つとは思わなかった

959 :デフォルトの名無しさん:03/07/21 15:51
>>883
po = &var; // poというカードにvarの住所を書き込む
*po = 1010; // poのカードに書いてある住所に1010を持っていく。

だろ?

960 :デフォルトの名無しさん:03/07/22 15:40
さーてうめますか。

961 :デフォルトの名無しさん:03/07/22 15:45
埋めるんならageとくか。

962 :派手に埋め立て:03/07/22 17:38
糞スレ〜〜〜ッ!!ばっo(⌒▽⌒)oか〜♪ハジメマシテ〜〜〜ッ☆☆(*⌒ヮ⌒*)
なんで厨房って言われてるかしってるのぉ〜〜〜っ?(#⌒〇⌒#)キャハ
うーんとー、私ぃすっごくすっごく暇でー、\(⌒∇⌒)/
探してたら(◎_◎)なんとっ!☆彡(ノ^^)ノ☆彡ヘ(^^ヘ)☆彡(ノ^^)ノ☆彡
馬鹿みたいな掲示板♪を発見!!!!(^o^)//""" パチパチパチ
さ・む・い〜{{ (>_<;) }} ブルブルすごい数のレスがありますけど、
これ全部1人の方がレスしているんですか?(@@;)すごすぎ …
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘφ(`∇´)φカキコカキコ♪
削除以来、出してくれるよねっ。(*^-^*) お・ね・が・い♪(* ̄・ ̄)ちゅ♪ッ
え?くれないのぉ〜?(;¬_¬)そんなのいやいや〜〜、ガ━━━(゚ロ゚)━━━ン
出してくれなかったら、( `_)乂(_´ ) 勝負! \(^o^)/
☆○(゜ο゜)o ぱ〜んち、☆(゜o(○=(゜ο゜)o バコ〜ン!!( ゚▽゚)=◯)`ν゚)・;'パーンチ
(>_<) いてっ!ダメ!! ゛o(≧◇≦*)oo(*≧◇≦)o″ダメ!!
(☆o☆)きゃ〜〜(@_@;)やられた〜〜(o_ _)o ドテッ ガ━━(゚Д゚;)━━ン!
(+_+) 気絶中。。。。・゚゚・o(iДi)o・゚゚・。うぇぇん <(゜ロ゜;)>ノォオオオオオ!! (゚□゚;ハウッ!
なあんて(#⌒▽⌒#)こんな私っ!σ(^_^)だけど、(///▽///)
お友達になってm(_ _)mくださいませませ♪('-'*)フフ ドガ━━━Σ(ll◎д◎ll)━━━━━ン
ということで。(^-^)vじゃあね〜〜〜♪(⌒0⌒)/~~ ほんじゃo(゜▽゜ヽ)(/゜▽゜)o レッツゴー♪
あ、怒ってる? に・げ・ろ〜C= C= C= C=┌(^ .^)┘
(*^-^*)ノ~~マタネー☆'.・*.・:★'.・*.・:☆'.・*.・:★

963 :デフォルトの名無しさん:03/07/22 17:54
free(malloc(1024));

964 :デフォルトの名無しさん:03/07/22 22:14
for(;;) fork();

965 :デフォルトの名無しさん:03/07/22 22:54
なるほど、落ちるタマか

966 :デフォルトの名無しさん:03/07/22 23:39
お年玉キボンヌ

967 :デフォルトの名無しさん:03/07/22 23:48
double d=0.0;

for(1){
if(d==0.9) break;
d+=0.3;
}



968 :デフォルトの名無しさん:03/07/22 23:49
double d=0.0;

while(1){
if(d==0.9) break;
d+=0.3;
}




969 :デフォルトの名無しさん:03/07/22 23:55
int di = 0;

while(1){
double d = di / 10.0;
if(di == 9) break;
di += 3;
}

970 :デフォルトの名無しさん:03/07/23 18:36
埋めるんじゃねーの?

971 :デフォルトの名無しさん:03/07/24 19:24
int main(){
 const char* c="埋めるんじゃねーの?";
 int i=0;
 while(i<29){
    printf("%s\n",c);
    i++;
  }
  retrun 0;
}

972 :デフォルトの名無しさん:03/07/24 20:43


973 :デフォルトの名無しさん:03/07/24 21:19
>>967
なぁんだ、つまんねえ

974 :デフォルトの名無しさん:03/07/24 21:50
>>973
なぁんだのなんだは何を期待してたんだ?

975 :デフォルトの名無しさん:03/07/24 21:59


976 :デフォルトの名無しさん:03/07/24 22:01


977 :デフォルトの名無しさん:03/07/24 22:09


978 :デフォルトの名無しさん:03/07/24 22:31
>>974
いや、FPUのバグとかそっち系かと

979 :デフォルトの名無しさん:03/07/25 00:17
int naan(int anna)
{
 if(anna <= 0) return 1;
 return naan(naan(naan(anna - 2) / 2) >> 2);
}

980 :デフォルトの名無しさん:03/07/25 05:36
ナーン

981 :デフォルトの名無しさん:03/07/25 10:25
nuun

982 :デフォルトの名無しさん:03/07/25 19:04
兄「おい、もっと開けよ。よく見えないだろ」
妹「これ以上はダメ。恥ずかしいもん」
兄「小学生のころはよく見せ合いっこしたろ」
妹「あのころはまだ子供だったから・・・。私もう中学生なんだよ」
兄「親父には見せたんだろ、オレにはダメだっていうのかよ!」
妹「だってパパは・・・」
兄「じれったいな。オレが開いてやるよ!」
妹「ダメ、お兄ちゃん、ああ・・・」
兄「すげぇ、小学生のときとは全然ちがう」
妹「やめて、そんなに開いたら全部見えちゃうよ・・・」
兄「なんか複雑になってる」
妹「あたりまえでしょ、中学生になって科目も増えてるんだから」
妹の通信簿を無理矢理見ようとする兄。

983 :デフォルトの名無しさん:03/07/25 19:04
>>982
抜きますた

984 :デフォルトの名無しさん:03/07/25 19:05
・・・

985 :デフォルトの名無しさん:03/07/25 19:05


   ≡ (゚∀゚ )
  ≡ 〜( 〜)
   ≡  ノ ノ 



986 :デフォルトの名無しさん:03/07/25 23:28
   ( ゚∀゚) ≡
   (〜 )〜 ≡
    \\ ≡

987 :デフォルトの名無しさん:03/07/26 00:21


                                                               ぬるぽ


988 :デフォルトの名無しさん:03/07/26 10:00


                                                              >987ガッ

989 :デフォルトの名無しさん:03/07/27 04:31
鵜メール

990 :デフォルトの名無しさん:03/07/27 05:13
あとじゅ。

991 :デフォルトの名無しさん:03/07/27 05:24
neuf

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)