C言語なら俺に聞け(入門篇) Part 24

このエントリーをはてなブックマークに追加
1('A`)
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 23
http://pc11.2ch.net/test/read.cgi/tech/1198295362/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 103代目
http://pc11.2ch.net/test/read.cgi/tech/1200318925/
2デフォルトの名無しさん:2008/01/23(水) 19:16:03
3デフォルトの名無しさん:2008/01/23(水) 19:16:24
4デフォルトの名無しさん:2008/01/23(水) 19:18:18
printf("1乙\n");
5デフォルトの名無しさん:2008/01/23(水) 20:23:31
for( ; ; ){
    puts("1乙");
}
6デフォルトの名無しさん:2008/01/23(水) 21:03:28
while(1){
scanf("%c",&command);

switch(command){

{case'a'〜'c'}

case'd':
{exit(0);}←??

default{}
}}}
a〜cはプロトタイプ宣言した関数の呼び出しです。
dのときだけreturn 0;に飛ばしてループを終了させたいんですけどbreak使うんですかね?
このexit(0)を使うやり方だとどうもループさせた時に入力エラーが一回余分に出てしまいます;
7デフォルトの名無しさん:2008/01/23(水) 21:05:38
return 0; はどこですか
8デフォルトの名無しさん:2008/01/23(水) 21:17:48
入れるとしたら
default{…;}
}(1)}(2)}

(1)だと繰り返さず終わってしまうので(2)の方を考えてます。
9デフォルトの名無しさん:2008/01/23(水) 21:23:55
やりたいことがよく分からない。
直接 return 0; したらだめなのか?
10デフォルトの名無しさん:2008/01/23(水) 21:30:30
>>6
何をしたいのか整理してくれないか?
ついでに、擬似コードをやめてC言語で書いてくれ
11デフォルトの名無しさん:2008/01/23(水) 21:41:06
うーん、擬似コードがよくわかりません。そのまま書いたつもりなのですが…

あと一番上のscanf(%c,command)の%cを%xに、
case(a~d)を1~4に変えることで正常に作動させることができました;
12デフォルトの名無しさん:2008/01/23(水) 21:43:20
・・・お前の持っているCコンパイラは

case'a'〜'c'}

こんなコードもコンパイルしてくれんの?
13デフォルトの名無しさん:2008/01/23(水) 21:44:08
KY
14デフォルトの名無しさん:2008/01/23(水) 21:44:28
1~4って5だけどいいの?w
15デフォルトの名無しさん:2008/01/23(水) 21:53:27
それは 1^4 。
1~4 はコンパイルエラー。
16デフォルトの名無しさん:2008/01/23(水) 21:55:37
ついでに文句いうなら無限ループはwhile(1)よりfor(;;)のがいいよ
優秀なコンパイラたんだと警告だす
17デフォルトの名無しさん:2008/01/23(水) 21:57:34
それはむしろ無能だろ。
while(1) のみ定型句と見なしてエラー出さないくらいしてくれ。
18デフォルトの名無しさん:2008/01/23(水) 21:59:49
それはもう数年後に出る人工知能つきコンパイラたんにご期待ください
19デフォルトの名無しさん:2008/01/23(水) 22:08:10
int flg = 1;
while(flg){
scanf("%c",&command);
switch(command){
case 'a':
case 'b':
case 'c':
break;
case 'd':
flg = 0;
break;
default:
}
}

だせぇ・・・
while(command!='d')やらwhile(command)も考えたがダサい。
なんか上手いやり方ないか?
20デフォルトの名無しさん:2008/01/23(水) 22:09:39
まず何をやりたいのかをまとめてくれ。
21デフォルトの名無しさん:2008/01/23(水) 22:12:07
float f;

scanf("%f", &f);
printf("%f",f);

で、実行して、fに100.1とか入力すると、
100.09998とか表示されてしまうんですが、何故なのでしょうか?
22デフォルトの名無しさん:2008/01/23(水) 22:12:36
打ち切り誤差
23デフォルトの名無しさん:2008/01/23(水) 22:14:35
>>22
直す方法は何かなっいですか?
24デフォルトの名無しさん:2008/01/23(水) 22:15:37
double ならある程度マシにはなる。
それもいやなら固定小数点でググれ。
25デフォルトの名無しさん:2008/01/23(水) 22:16:10
printf("%.1f",f); でごまかす
26デフォルトの名無しさん:2008/01/23(水) 22:16:25
固定小数点でも同じだろ。
27デフォルトの名無しさん:2008/01/23(水) 22:17:07
10進固定小数点なら大丈夫だろ。
100.1 に関しては。
28デフォルトの名無しさん:2008/01/23(水) 22:18:23
「10進固定小数点」とか新語を作るなよ。
29デフォルトの名無しさん:2008/01/23(水) 22:19:58
BCDと固定小数点がごっちゃになってるやつ多いな。
30デフォルトの名無しさん:2008/01/23(水) 22:22:11
例えば10倍の下駄をはかせばいいだけだろ?
31デフォルトの名無しさん:2008/01/23(水) 22:30:58
すみません、21ですが、
誤差はしょうがないということでおkですね。
32デフォルトの名無しさん:2008/01/23(水) 22:33:55
常に値を 10 倍した形で int 型で扱えば大丈夫。
33デフォルトの名無しさん:2008/01/23(水) 22:37:39
質問です。
#include <stdio.h>

int main(void)
{
static char *month[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int i;
char *p;
for(i = 0; i < sizeof(month)/sizeof(month[0]); i++){
for(p = month[i]; *p != '\0'; p++)
if(*p == 'r')
break;
if(*p != '\0')
puts(month[i]);}
return 0;
}
これを小文字のrだけじゃなく大文字のRも大丈夫なようにするにはどうすればいいのでしょうか?
34デフォルトの名無しさん:2008/01/23(水) 22:38:44
'R' とも比較する
35デフォルトの名無しさん:2008/01/23(水) 22:39:09
toupper((unsigned char)*p) == 'R'
36デフォルトの名無しさん:2008/01/23(水) 22:39:38
>>33
if((*p == 'r') || (*p == 'R'))

tolower()
37デフォルトの名無しさん:2008/01/23(水) 22:39:41
if(*p == 'r' || *p == 'R')
38デフォルトの名無しさん:2008/01/23(水) 22:43:00
あぁ成る程。||を使えばよかったんですね。
どうもありがとうございました。
39デフォルトの名無しさん:2008/01/23(水) 23:28:02
scanf()で文字を読み込むときに\nが残るってはなしじゃねーの?
40デフォルトの名無しさん:2008/01/24(木) 06:17:38
void wall(int p,int q)
{if (meiro[p][q]!=1)
{int dir;
meiro[p][q]=3;
dir = rand()%4+1;
if (dir==1&&meiro[p+2][q]!=3)
{meiro[p+1][q]=3;
wall(p+2,q);}
if (dir==2&&meiro[p-2][q]!=3)
{meiro[p-1][q]=3;
wall(p-2,q);}
if (dir==3&&meiro[p][q+2]!=3)
{meiro[p][q+1]=3;
wall(p,q+2);}
if (dir==4&&meiro[p][q-2]!=3)
{meiro[p][q-1]=3;
wall(p,q-2);
}}}
p,qはmeiro[p][q]に対応していて、meiro[偶数][偶数]の点です。
迷路を自動生成するプログラム作ってます。
色々調べて壁伸ばし法で作ることにして、wall関数なるものを自作しました。
0:道 1:壁 3:作りかけの壁

一応、迷路っぽいものはできるのですが、なんというかすかすかのものができてしまいます。
41デフォルトの名無しさん:2008/01/24(木) 10:09:40
続きは?
42デフォルトの名無しさん:2008/01/24(木) 18:13:59
>>40
C言語っつーよりアルゴリズムの問題だと思うけど、
どのみちそこだけ出されてもなんとも言えない
wallをどういう風に呼んでるかとか、
どのタイミングと条件でmeiro[x][y]を1にセットするのかとか
わからないと
43デフォルトの名無しさん:2008/01/24(木) 20:39:20
しかしみずれえソースだな
44デフォルトの名無しさん:2008/01/24(木) 20:45:25
>>40
伸ばす方向に壁ができてたらそれで終わりにしないで、空いている方向を選ぶようにしてみたら?
45デフォルトの七資:2008/01/24(木) 21:09:14
すいません初心者なんで教えてください。
for(j=0;j<=3;j++){
for(i=j+1;i<=4;i++){
if(a[j]<a[i]){
H=a[i];
a[i]=a[j];
a[j]=H;
}
}
}

この
H=a[i];
a[i]=a[j];
a[j]=H;
はどういう意味ですか?
46デフォルトの名無しさん:2008/01/24(木) 21:13:56
Hを仲介してa[i]とa[j]を入れ替えてるんだよ
47デフォルトの名無しさん:2008/01/24(木) 21:14:31
>>45
スワップ
aのi番目とj番目の要素を入れ替えてる
48デフォルトの名無しさん:2008/01/24(木) 21:14:58
Hを、一時的に値を保持する箱として使用し、
a[i]とa[j]の値を入れ替えている。
49デフォルトの七資:2008/01/24(木) 21:18:41
>>46
左から大きい順になるんですかね??
50デフォルトの名無しさん:2008/01/24(木) 21:19:13
左って何だ?
51デフォルトの七資:2008/01/24(木) 21:19:59
>>47 >>48
なるほど!
52デフォルトの七資:2008/01/24(木) 21:21:23
a[i] に与えた数値の並ぶ順です。
53デフォルトの名無しさん:2008/01/24(木) 21:26:45
バブルソートだね
54デフォルトの名無しさん:2008/01/24(木) 21:30:24
for(j=0;j<=3;j++){
  for(i=j+1;i<=4;i++){
   if(a[j]<a[i]){
     H=a[i];
     a[i]=a[j];
     a[j]=H;
   }
  }
}

半角スペース" "の変わりに、前角スペース" "を使うとずれないよ。
55デフォルトの名無しさん:2008/01/24(木) 21:32:38
専ブラならポップアップさせればずれないものもあるよ
56デフォルトの名無しさん:2008/01/24(木) 21:37:21
&nbsp;なら消えない半角空白が作れる。
&nbsp;と普通の空白を交互に置いてもいける。
57デフォルトの名無しさん:2008/01/24(木) 21:37:57
&nbsp; ってコピペすると変にならね?
58デフォルトの名無しさん:2008/01/25(金) 00:14:32
>>57
専ブラによる
59デフォルトの名無しさん:2008/01/25(金) 01:56:46
すみません!C言語初心者ですが質問です。
以下のプログラムをコンパイルしてみたところ、
よく分からないエラーが出ました。

#include<stdio.h>
#include<stdlib.h>
typedef struct{
char *word;
int num;
} BUCKET;//7行目

main(int argc, char* argv[])
{
int i,j;
if(argc<2){
printf("一つ以上の引数を入力してください\n");
exit(1);
}
BUCKET p[argc-1];//16行目
}

↓エラー内容
・・・\kadai51.c(16) : error C2275: 'BUCKET' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
・・・\kadai51.c(7) : 'BUCKET' の宣言を確認してください。
・・・\kadai51.c(16) : error C2146: 構文エラー : ';' が、識別子 'p' の前に必要です。
・・・\kadai51.c(16) : error C2065: 'p' : 定義されていない識別子です。
・・・\kadai51.c(16) : error C2109: 配列または、ポインタでない変数に添字が使われました。

OSはWinXP、コンパイラはVisualC++6.0を使用しました。

XPではCは正しくコンパイルできないのですか?
誰か教えてください!
60デフォルトの名無しさん:2008/01/25(金) 02:00:39
>>59
>BUCKET p[argc-1];//16行目
VCでは可変長配列はサポートされてない。
というかC言語のつもりならブロックの途中に宣言入れちゃ駄目だよ?
61デフォルトの名無しさん:2008/01/25(金) 02:02:35
ああC99なら途中で宣言してもいいのか
どっちにしろVCはC99に対応してないけど
62デフォルトの名無しさん:2008/01/25(金) 02:02:58
VC++6では配列の個数に変数は指定できない
BUCKECT p[ 100 ]にしてみろ。
可変個にしたければmalloc使うかC++に乗り換えるか。
63定数にして余分に取る:2008/01/25(金) 02:04:55
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char *word;
int num;
} BUCKET;//7行目

main(int argc, char* argv[])
{
int i,j;
if(argc<2){
printf("一つ以上の引数を入力してください\n");
exit(1);
}
BUCKET p[10];//16行目
}
6459:2008/01/25(金) 02:07:12
あー・・・ではコマンドで設定した分だけを変数確保というのは
できないんですね・・・

pを固定長にして試してみます。
どうもありがとうございました。
65デフォルトの名無しさん:2008/01/25(金) 02:25:54
mallocしろよ
66デフォルトの名無しさん:2008/01/25(金) 02:32:29
vector< BUCKET > p(argc);
が初心者向け
6767:2008/01/25(金) 03:02:03
C++でプログラミングしていて、
main関数の中の途中で2次元配列を宣言したら実行時エラーになりました。

char hairetu[500][500];のように宣言したら、
abc.exeは動作を中止しました、と言って止まります。

この配列には代入も何もしていません。
宣言だけでエラーになります。
グローバル変数に移動するとそのエラーは消えました。

C++では変数の宣言はどこでも可能なはずですが、
なぜ実行時エラーになってしまうのでしょうか?
68デフォルトの名無しさん:2008/01/25(金) 03:09:05
サイズがデカイ 250000バイト
new vector つかえ
69デフォルトの名無しさん:2008/01/25(金) 03:11:09
なにさっきからvectorとか言ってんだと思ったらC++かよ。
スレ違いだ。
70デフォルトの名無しさん:2008/01/25(金) 03:11:12
char **p= new char [500];
for(int n=0;n<500;n++)p[n]=new char [500];
p[0][0]=100;
ならできるはず
71デフォルトの名無しさん:2008/01/25(金) 03:17:25
最後の
p[0][0]=100;
てのは何ざんしょ
72デフォルトの名無しさん:2008/01/25(金) 03:32:17
代入してみた゜
73デフォルトの名無しさん:2008/01/25(金) 04:08:42
Javaの授業で変数宣言は1行に複数宣言するのは危険だから1行につき1つの宣言にしろと言われたんですが、
これはC言語も同じなのですか?後どうして危険なんですか?
74デフォルトの名無しさん:2008/01/25(金) 04:15:09
>>73
そんな話聞いた事ないなぁ
7567:2008/01/25(金) 04:19:27
char hairetu[500][500];で質問した67です。

68さん、69さん、70さん、71さん、72さん、
質問に答えてくれてありがとうございます。

私の質問はC言語でなくC++に関するものなので
スレ違いでしたらすみません。

---

エラーの原因はメイン関数の中で500*500の配列は大きすぎるから、
ということでいいのでしょうか?

グローバル変数の場所で宣言するなら事前に確保できるので
エラーにならない、と。

メイン関数を走らせている最中に変数を確保するには
newやvectorで確保する方がいい、ということでしょうか。
76デフォルトの名無しさん:2008/01/25(金) 04:25:00
スレ違いだと言う点含め大体あってる
7767:2008/01/25(金) 04:40:16
76さんありがとうございます。

疑問が解決しました。みなさんありがとうございました。
また、スレ違いすみませんでした。
78デフォルトの名無しさん:2008/01/25(金) 05:11:52
>>75
Cには以下の4つの領域があります。
コード(code)->プログラム
データ(data)->外部変数
ヒープ(heap)->malloc,new
スタック(stack)->関数の内部変数

このうち、スタック領域のサイズはデータ、ヒープより小さいく、大きな配列を
確保しようとすると最大サイズを超えることがあるということです。
79デフォルトの名無しさん:2008/01/25(金) 08:28:28
>>73
たぶん言いたいことは宣言じゃなくて定義な。
Javaでそんな話は聞いたことないがCならポインタじゃないかなぁ?
int * hoge, fuga;とか
80デフォルトの名無しさん:2008/01/25(金) 08:41:23
C99, Java, C++ などでは、変数を定義するときに同時に初期化すれば
自然と一変数ごとに一行となる。

構造体メンバ(やクラスのメンバ変数、フィールド)は、
きちんとコメントをつけると、一行ずつのほうが書きやすい。

ごくたまに、 int x, y; のように非常に関連性の高い変数を
同じ行で定義することもないわけではない。
81デフォルトの名無しさん:2008/01/25(金) 08:42:47
>>80
そ、そんな宗派が・・・
82デフォルトの名無しさん:2008/01/25(金) 13:31:20
#include<stdio.h>
main{
char *month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
int i;

for(i = 0; i < 12; i++){
if(*month[i] == 'r' || *month[i] == 'R')
puts(month[i]);
}
}
これで実行してみた所何も出てこなかったのですが、何ででしょうか?
83デフォルトの名無しさん:2008/01/25(金) 13:34:17
>>82
Rで始まる月は無いから。
84デフォルトの名無しさん:2008/01/25(金) 13:43:41
牡蠣を食うつもりだったのか
85デフォルトの名無しさん:2008/01/25(金) 13:48:03
strchr使え
86デフォルトの名無しさん:2008/01/25(金) 15:00:24
2つの整数を入力した後、それらの最大公約数と
最小公倍数を求めなさい。

このプログラムをお願いします。



87デフォルトの名無しさん:2008/01/25(金) 15:05:31
宿題スレに池。
88デフォルトの名無しさん:2008/01/25(金) 15:09:33
>>86
うせろ屑
89デフォルトの名無しさん:2008/01/25(金) 15:13:41
2つの整数をa,bとする。

最小公倍数
・aとbが等しいか比較する。
・等しくない時aとbのどちらが大きいか比較する。
・小さい方は自分の値を自分に足す。(a += a)

上を繰り返す。

最大公約数
a,bの小さいほうで両方を割る。
どちらかが割り切れなかったら小さい方から1引いた値で両方を割る

上を繰り返す。
90デフォルトの名無しさん:2008/01/25(金) 15:14:18
91デフォルトの名無しさん:2008/01/25(金) 15:14:56
>>89
a += aじゃまずいな。
a,bはとっておいて、計算用の変数に足していかないと。
92デフォルトの名無しさん:2008/01/25(金) 16:27:43
>>86
#include <stdio.h>

int main(){
  int x,y,r,t;

  printf("x=");scanf("%d",&x);
  printf("y=");scanf("%d",&y);
  if(x<y){
    int z=x;
    x=y;
    y=z;
  }
  t=x*y;
CHECK:
  if(y==0){
    printf("%d,%d",x,t/x);
    goto END;
  }
  r=x;
MOD:
  r-=y;
  if(r>=y)goto MOD;
  x=y;
  y=r;
  goto CHECK;
END:
  return 0;
}
93デフォルトの名無しさん:2008/01/25(金) 16:45:23
nを与えて和Sを求めるプログラムで
S=1+(1+2)+(1+2+3)+-----+(1+2+3+---+n)
で1重ループでならできたんですが
2重ループでの作り方が分かりません。
低レベルですが教えて下さい。
94デフォルトの名無しさん:2008/01/25(金) 16:49:26
int i, j, s=0;

for(i=1; i<=n; i++) for(j=1; j<=i; j++) s += j;
95デフォルトの名無しさん:2008/01/25(金) 17:08:17
>>94
ありがとうございます。
96デフォルトの名無しさん:2008/01/25(金) 18:41:15
prime[ptr++]=2;
これのptr++ってどういう意味ですか?
ptrは[個数を記憶するもの]と分かるんですが
=2とできる意味も分からないです。
97デフォルトの名無しさん:2008/01/25(金) 18:43:46
primeに2を格納してptr++??
98デフォルトの名無しさん:2008/01/25(金) 18:45:12
>>96
インクリメント演算子知らんのか?
99デフォルトの名無しさん:2008/01/25(金) 18:48:16
知ってます☆
けど、i++とかなら分かるけど
prime[ptr++]=2
となると分かりません
100デフォルトの名無しさん:2008/01/25(金) 18:49:11
知ってはいても、理解してないってことか。
101デフォルトの名無しさん:2008/01/25(金) 18:50:01
>>99
prime[pt]=2;
ptr++;
まぁこういことだな
102デフォルトの名無しさん:2008/01/25(金) 18:53:37
prime[0],prime[1],prime[3]…てことか!?
10373:2008/01/25(金) 18:54:01
>>79>>80
解答ありがとうございます。
変数宣言じゃなく変数定義でした。
確かにCでは複数定義は危険ですね、JavaはCの書き方に依存してるのかな?
後で先生に聞いてみます。
104デフォルトの名無しさん:2008/01/25(金) 18:56:28
prime[0],prime[1],prime[3]…てことか!?
105デフォルトの名無しさん:2008/01/25(金) 18:57:18
prime[0],prime[1],prime[3]…てことか!?
106デフォルトの名無しさん:2008/01/25(金) 18:58:43
PCおかしかった!同じレスすんまそ!
107デフォルトの名無しさん:2008/01/25(金) 20:12:56
配列について学習しなおせ
108デフォルトの名無しさん:2008/01/25(金) 21:17:18
>>92
Cでそんだけgoto使うと、なんか新鮮さを感じるね。
109デフォルトの名無しさん:2008/01/25(金) 22:16:16
int i, j, ptr = 0, prime[N];

prime[ptr++] = 2;

for(i=3; i<=M; i++) {
for(j=0; j<ptr; j++) if(i%prime[ptr]==0) break;
if(j==ptr) prime[ptr++] = i;
}

ループの中はちょっと違うかもしれんが、こんな感じで素数を求めてくプログラムかな。
110デフォルトの名無しさん:2008/01/25(金) 23:07:44
以下のプログラムで、Inout dataの中で、"END"と入力されたら、入力終了する条件を追加したくて
メインにアドレス返却する方法を使うみたいですけど、よく分かりませんm(_ _)m
while文じゃ無理でしょうか?

void input_data(Person *pmem) /* データ入力関数 */
{
char buf[BUF];

while(1)
{
printf("\nName : ");
scanf("%s",&buf[0]); /* 名前の入力 */
if(strlen(&buf[0]) <= NAME_MAX) /* 入力文字数のチェック */
{
strcpy(&pmem->name[0],&buf[0]);
break; /* メンバにコピー */
}
printf("\nSorry. Input less than %d characters.\n",
NAME_MAX+1);



}
111デフォルトの名無しさん:2008/01/25(金) 23:14:33
>>110

何言ってるかわからん。
>メインにアドレス返却する方法
って何のことだ?
>"END"と入力されたら、入力終了する条件を追加したくて
だけなら、strcmp()でいいはずだが。

もうちょっとやりたいことを整理しる。
112デフォルトの名無しさん:2008/01/25(金) 23:21:08
intを返す関数にして、endが入力されたら0それ以外なら1を返すとかにして、
呼び出した方で処理すれば?
113デフォルトの名無しさん:2008/01/25(金) 23:21:39
>>110
ついでに
scanf("%s",&buf[0]); /* 名前の入力 */

scanf("%s",buf); /* 名前の入力 */
と同じ。
&buf[0]を使うよりbufを使ったほうがすっきりするだろ
114デフォルトの名無しさん:2008/01/25(金) 23:26:02
110です。
名前が20文字以上入力されたら再入力、ENDが入力されたら強制終了する条件式
を作りたいわけですけど、条件の書き方が分からないです
115デフォルトの名無しさん:2008/01/25(金) 23:29:11
>>112
スミません。かなり初心者なので、処理方法でパニくってます

>>113
サンクス。勉強になりました
116デフォルトの名無しさん:2008/01/25(金) 23:40:41
>>114
strcmpで"END"かどうか判断して、真だったらreturnすりゃあいいんでない?
117デフォルトの名無しさん:2008/01/26(土) 00:44:30
自分自身の実行されている環境が
windowsなのかLinuxなのか、プログラム中で
知る方法はないでしょうか?
118デフォルトの名無しさん:2008/01/26(土) 01:02:30
>>117
(仮想環境のことじゃないよね?)
同じバイナリでWindowsでもLinuxでも動く、というようなことを
しようというのでなければ(可能か?)、コンパイル時に#ifdefで
__linux__ とかが定義されてるかどうかを見るのが一応簡単。
(Windowsでのコンパイルで-D__linux__とかやって
意図的に誤作動させることは可能)
119デフォルトの名無しさん:2008/01/26(土) 01:12:44
>>117
普通、そういうことは使用とは思わない
バイナリを分ける
120デフォルトの名無しさん:2008/01/26(土) 01:24:26
例の原田ウイルスはVBで作ってるみたいですがCでも頑張れば同等のものができるんでせうか
121デフォルトの名無しさん:2008/01/26(土) 01:35:50
>>120

そんな方向に頑張るな。
122デフォルトの名無しさん:2008/01/26(土) 01:38:49
>>117
われわれが作成するmain関数の前に、コンパイルが組み込んだOS依存のコードが走る。
だから、Windows用にコンパイルしたプログラムをLinuxで実行しようとすると、main関数
に到達する以前に異常終了する。

と、思う。
123デフォルトの名無しさん:2008/01/26(土) 01:39:59
>>122
おいwwwwww
124122:2008/01/26(土) 01:42:28
>>123 間違ったら指摘してね。試したことがないから・・・
125デフォルトの名無しさん:2008/01/26(土) 01:43:55
>>124
説明するのもめんどくさいぐらい何から何まで間違ってる
126デフォルトの名無しさん:2008/01/26(土) 01:47:47
>>122
そもそも実行ファイルの形式が違うので、
互いに実行を開始することすらできない。
127デフォルトの名無しさん:2008/01/26(土) 01:49:58
Windowsでは環境変数が
OS=Windows_NT
と設定されてるからそれを調べればいい。まあふつーはビルド時にifdefするもんだが。
128デフォルトの名無しさん:2008/01/26(土) 01:50:26
そうだ、実行形式のファイルとして認識されない。だろ?
129デフォルトの名無しさん:2008/01/26(土) 02:12:48
いや、少なくともLinuxではWindowsの実行形式だと認識はできるよ。
但し、カーネルが詳細を知らないからロードさえできないけど。
130デフォルトの名無しさん:2008/01/26(土) 03:53:50
constで配列の要素を定数化したのに関数の中で要素が書き換えられてしまうことってあるの?
131130:2008/01/26(土) 04:10:04
プログラムの一部を抜きだしたとき

void x(a[], const b[], const c[])
{
printf("%d",b[0];
a[i] = (10 + b[i]) - c[i];
printf("%d",b[0])
}

このときの上下のプリントで違う値が出力されてしまうのですが原因が分かる方いませんか?
132デフォルトの名無しさん:2008/01/26(土) 04:16:31
その部分だけではありえません。
133デフォルトの名無しさん:2008/01/26(土) 04:16:35
iはどこからやって来たの?
134デフォルトの名無しさん:2008/01/26(土) 04:17:05
>>131
いや、そんな動かないコード渡されてもw
135デフォルトの名無しさん:2008/01/26(土) 05:32:24
>>131
ほれ。違う値がプリントされる例だ。
#include <stdio.h>
int i = 0;
void x(int a[], const int b[], const int c[]) 

printf("%d\n",b[0]);
a[i] = (10 + b[i]) - c[i]; 
printf("%d\n",b[0]);
}
int main()
{
int a[] = { 0 };
x(a, a, a);
return 0;
}
136デフォルトの名無しさん:2008/01/26(土) 10:08:44
>>135
printf("%d %d %d\n",a,b,c);
137デフォルトの名無しさん:2008/01/26(土) 10:27:38
>>135

a,b,cも同じアドレスを指しているから、a[0]の内容が10になれば、
b[0]も10になるんじゃないの。
138デフォルトの名無しさん:2008/01/26(土) 10:43:34
>>135に言ってどうすんだよw
わかってて一つの可能性を示してやってんだろ。
139デフォルトの名無しさん:2008/01/26(土) 12:08:51
ファイルの低水準読み込みで、読み込み対象となるファイルの特定の位置から任意の
サイズのバイトデータを、取り出すことは可能なのでしょうか?
例えばファイルの10バイト目から20バイト目までを読み込むというような事がしたい
のですが、どなたか分かる方がいましたら教えてくれませんか?
140デフォルトの名無しさん:2008/01/26(土) 12:10:15
規格外のこと言われても
環境示さにゃ分からんぜよ。
141デフォルトの名無しさん:2008/01/26(土) 12:12:37
>>139
できるよ。
142139:2008/01/26(土) 12:13:23
すいません。
環境はFedoraCore8です。
143デフォルトの名無しさん:2008/01/26(土) 12:13:27
本当に低水準だとセクタ単位で・・・
144デフォルトの名無しさん:2008/01/26(土) 12:23:36
>>139
int h;
char buf[20];

h = open("ファイル名", O_RDONLY);
lseek(h, 10, SEEK_SET);
read(h, buf, 20)
close(h)
145139:2008/01/26(土) 12:25:32
>>144
ありがとうございます。
早速試してみます。
146デフォルトの名無しさん:2008/01/26(土) 14:00:28
>>144
>例えばファイルの10バイト目から20バイト目までを読み込むというような事がしたい
>read(h, buf, 20)

にほんごよめますか?
Can you read Japanese?
147デフォルトの名無しさん:2008/01/26(土) 14:30:14
>>146
君のほうが何か思い込みをしておる
148デフォルトの名無しさん:2008/01/26(土) 15:03:18
10バイト目を起点にそこから20バイト分読み込むとも読めるから、
おかしくはないな。
149デフォルトの名無しさん:2008/01/26(土) 15:07:00
こういう奴が仕様と違うへんてこなもんを量産してるんだろうな。
150デフォルトの名無しさん:2008/01/26(土) 15:35:03
10バイト目から20バイト目まで読み込む
10バイト目から20バイト読み込む
10バイトから20バイトまで読み込む
さぁ仲間はずれはどれだ

>ファイルの特定の位置から任意のサイズのバイトデータを、取り出す
って言ってるんだから、10バイト目から10バイト分読み込みたいって素直に書けばよかっただろうに
151デフォルトの名無しさん:2008/01/26(土) 19:10:59
>>146
そういう場合は普通 Can は使わない。
Do you speak Japanese? でおk。
152デフォルトの名無しさん:2008/01/26(土) 19:16:28
いや合ってるんじゃないか?
Can you〜だと嫌味も軽く含んでいるから
153デフォルトの名無しさん:2008/01/26(土) 19:20:37
"Can you speak English" で検索しても日本語のページしかひっかからないよ。
そんな表現自体無いんだよ。英語には。
154デフォルトの名無しさん:2008/01/26(土) 19:22:45
そりゃ英語圏で
Can you speak Englishのフレーズは使うわけねーだろwwwwwwwww
155デフォルトの名無しさん:2008/01/26(土) 19:23:28
"Do you speak English" だと結構引っかかるよ
156デフォルトの名無しさん:2008/01/26(土) 20:02:08
I don't speak Englishっていうからね。I can'tじゃなくて。
157デフォルトの名無しさん:2008/01/26(土) 20:14:56
speakじゃなくてreadであることにも注目。
158デフォルトの名無しさん:2008/01/26(土) 20:43:41
>>153
Canに強勢置けばいいよ・
159デフォルトの名無しさん:2008/01/26(土) 20:49:36
All your base are belong to us.
HA-HA-HA-HA.
160デフォルトの名無しさん:2008/01/26(土) 20:50:49
冗談や嫌みで言う事はあるかもしれんな。
161デフォルトの名無しさん:2008/01/26(土) 21:03:26
つーかスレ違い。
162デフォルトの名無しさん:2008/01/26(土) 21:04:15
Do you speak C Language?
163デフォルトの名無しさん:2008/01/26(土) 21:11:23
↓何事もなかったかのように再開↓
164デフォルトの名無しさん:2008/01/26(土) 21:27:22
6個の整数データを配列に読んで
大きい順に並べなさい。
#include<stdio.h>
int main (void)
{
int i,j,m,a[6];
for(i=0;i<=5;i++){
scanf("%d",&a[i]);
printf("%d",a[i]);
}
printf("\n");
for(j=0;j<=4;j++){
for(i=5;i>j;i--){
if(a[i-1]<a[i]){
m=a[i];
a[i]=a[i-1];
a[i-1]=m;
}
}
}
for(i=0;i<=6;i++){
printf("%d\n",a[i]);
}
printf("\n");
}
実行できないんですけどどこがおかしいですか?
165デフォルトの名無しさん:2008/01/26(土) 21:34:42
>>164
ただ実行できないでなくて、何をしたら何がおきたかを正確に書け。
コンパイルしたらこういうエラーが出たとか。
こういう値を入力したのにこういう間違った結果が出たとか。
実行したらアクセス違反で落ちたとか。
鼻から悪魔が出てきたとか。
166デフォルトの名無しさん:2008/01/26(土) 21:35:38
>>164
for(i=0;i<=6;i++){
printf("%d\n",a[i]);

な・・7番目だと・・・・・
167デフォルトの名無しさん:2008/01/26(土) 21:37:57
i <= 5 って書いたりするから間違えるんだよ。
168デフォルトの名無しさん:2008/01/26(土) 21:38:03
>>164
a[i-1]ってゆう、文字を、a[J]に変えてみると、いいかもしれませんと、ヒントです
169デフォルトの名無しさん:2008/01/26(土) 21:40:17
>>165
整数は何個でも入れられて
実行してもばらばらにでます。
170デフォルトの名無しさん:2008/01/26(土) 21:40:43
どの辺がヒントなのかと。
171デフォルトの名無しさん:2008/01/26(土) 21:41:09
>>168
馬鹿かお前
172デフォルトの名無しさん:2008/01/26(土) 21:42:54
ワロタ
173デフォルトの名無しさん:2008/01/26(土) 21:47:29
>>169
int main(void)
{
int i, j, m, a[6];

for (i = 0; i < 6; i++) {
scanf(" %d", &a[i]);
}
printf("\n");
for (j = 0; j <= 4; j++) {
for (i = 5; i > j; i--) {
if (a[i-1] < a[i]) {
m=a[i];
a[i]=a[i-1];
a[i-1]=m;
}
}
}
for (i = 0; i < 6; i++) {
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
174デフォルトの名無しさん:2008/01/26(土) 21:56:44
>>173
ありがとうございます。
明日実行してみます。
175子羊:2008/01/26(土) 22:36:16
#include <stdio.h>
#include <stdlib.h>

#define BUFSIZE 100
#define MAX 100
#define TRUE 1
#define FALSE 0
#define NUMBER '0'
#define EPS 1.0E-6

void push(double);
double pop(void);
int next(char []);
int iswhite(char);
int isnum(char);
double str2no(char []);

/* global variable, array, pointer */
int sp = 0;
double stack[MAX];

char buf[BUFSIZE];
char *bufp = buf;
176子羊:2008/01/26(土) 22:43:22
main()
{
int type;
double op2;
char s[MAX];
while ((type = next(s)) != EOF) {
switch (type) {
case NUMBER:
push(str2no(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if (op2 < EPS) {
fprintf(stderr, "error: zero division\n");
exit(1);
}
177子羊:2008/01/26(土) 22:44:44
else
push(pop() / op2);
break;
case '\n':
printf("\t%10.4f\n", pop());
break;
default:
fprintf(stderr, "error: unknown command %s\n",
s);
exit(1);
}
}
}

int isnum(char c)
{
/* 各自この部分を作る */
}

int iswhite(char c)
{
/* 各自この部分を作る */
}

178子羊:2008/01/26(土) 22:46:39
void push(double val)
{
if (sp < MAX) {
stack[sp] = val;
sp++;
}
else {
fprintf(stderr, "error: stack full, ");
fprintf(stderr, "can't push %f\n",
val);
exit(1);
}
}

double pop(void)
{
if (sp > 0) {
sp--;
return stack[sp];
}
else {
fprintf(stderr, "error: stack empty\n");
exit(1);
}
}

179子羊:2008/01/26(土) 22:47:36
int next(char s[])
{ int i, c;

if (bufp == buf) {
if (fgets(buf, BUFSIZE, stdin)
== NULL) {
return EOF;
}
}

while(iswhite(c = *bufp) == TRUE)
bufp++;

/* 各自この部分を作る */

}

double str2no(char s[])
{
double val, power;
int i, sign;

/* 各自この部分を作る */

return sign * val / power;
}
180子羊:2008/01/26(土) 22:47:38
main()
{
int type;
double op2;
char s[MAX];
while ((type = next(s)) != EOF) {
switch (type) {
case NUMBER:
push(str2no(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if (op2 < EPS) {
exit(1);
}
181子羊:2008/01/26(土) 22:48:12
void push(double);
double pop(void);
int next(char []);
int iswhite(char);
int isnum(char);
double str2no(char []);

double stack[MAX];

char buf[BUFSIZE];
char *bufp = buf;
182子羊:2008/01/26(土) 22:49:12
main()
{
int type;
double op2;
char s[MAX];
while ((type = next(s)) != EOF) {
switch (type) {
case NUMBER:
push(str2no(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
push(pop() / op2);
break;
case '\n':
printf("\t%10.4f\n", pop());
break;
default:
fprintf(stderr, "error: unknown command %s\n",
s);
exit(1);
}
183子羊:2008/01/26(土) 22:53:17
逆ポーランド記法の式を計算するプログラムを作りたいんです。
(数値は0以上の実数)
184デフォルトの名無しさん:2008/01/26(土) 22:53:59
以下の文のw1の値を√化してw2にしてからfにw2の値を入れたいのですがやり方がわかりません。
どなたか教えていただけませんか。おねがいします。
#include <stdio.h>
#include <math.h>
double func(double x)
{

double w1 = 0.1062 * x * (1 - 4.248 * 0.00001 * x * x);
double f;
return f = w2/(2*3.14);
}

void main()
{
int x = 4;
double result;
FILE* output;
output=fopen("output.csv","w");
for(x = 4; x <= 50; x++)
{
result = func(x);
printf("x=%d, f=%10.2lf\n", x, result);
fprintf(output, "%d, %10.2lf\n", x, result);
}
fclose(output);
getchar();
}
185デフォルトの名無しさん:2008/01/26(土) 22:55:17
w2 = sqrt(w1);
186デフォルトの名無しさん:2008/01/26(土) 22:58:38
スレ違いだクズ
187子羊:2008/01/26(土) 23:00:08
私ですよね?すいません
188デフォルトの名無しさん:2008/01/26(土) 23:08:22
>>187
ソースが長い時はテキストファイルをどこかにあげろ。
お前のレスをわざわざコピペしてつなぎ合わせさせるのか?
189デフォルトの名無しさん:2008/01/26(土) 23:12:07
しかもだれかのいたずらかmainがいっぱいあるしwww
あげなおしたほうがいいかも
190デフォルトの名無しさん:2008/01/26(土) 23:12:10
>>187
そもそも宿題など丸投げはスレ違い。
191デフォルトの名無しさん:2008/01/26(土) 23:16:50
main関数あれだけあったらコンパイラたん困るだろ!
192子羊:2008/01/26(土) 23:21:06
すいません
193デフォルトの名無しさん:2008/01/26(土) 23:21:39
困るのはリンカたんじゃまいか?
194デフォルトの名無しさん:2008/01/26(土) 23:23:05
ファイルをわけてるかどうかで変わる
195デフォルトの名無しさん:2008/01/26(土) 23:25:15
そんなに言うとエディタたんが責任感じるからやめろよ
196デフォルトの名無しさん:2008/01/26(土) 23:45:25
8ビットの2進数を整数に変換しなさい。
#include<stdio.h>
int main (void)
{
int i,a[8],x=0;

printf("8ビットの2進数を入力して下さい:");
for(i=7;i>=0;i--){
scanf("%d",&a[i]);
}
i=7;
while(i>=0){
x=x*2+a[i];
i--;
}
printf("%d\n",x);
return(0);
}
8ビットの2進数(0or1)入れても実行
できなかったんですがどこがまずいですか?
197デフォルトの名無しさん:2008/01/26(土) 23:50:32
>>196
動いてるみたいだけど?
どう動かないの?
198デフォルトの名無しさん:2008/01/26(土) 23:54:11
>>196
正常に動いてる。
8回入力してみた?
1 1 0 1 1 0 0 0 みたいに
199デフォルトの名無しさん:2008/01/26(土) 23:54:48
>>196
strtol を使うってのは反則なんだろうな。
それはともかく、入力するとき桁をスペースなり改行なりで区切ってないとかか?
200184:2008/01/26(土) 23:56:35
>>185
ありがとうございました。
201デフォルトの名無しさん:2008/01/27(日) 00:10:28
>>198 >>199
数字の間隔をとって入力
しないといけないんですか?
202デフォルトの名無しさん:2008/01/27(日) 00:12:46
%d はひとつながりの数値を取得する。
203デフォルトの名無しさん:2008/01/27(日) 00:46:44
>>196
x=x*2+a[i];

xってずっと0入れんの?
計算できるか??謎
204デフォルトの名無しさん:2008/01/27(日) 00:48:14
お前のレスが謎
205デフォルトの名無しさん:2008/01/27(日) 00:50:17
>>201
getcharで取得すればいいよ。
そうすりゃループでも 改行いれずに1文字づつ配列に格納していってくれる。
でそれをatoiで整数に戻せばいいんじゃね
206デフォルトの名無しさん:2008/01/27(日) 00:52:25
atoi は文字列から整数への変換だから
getchar → atoi はまあできないこともないがひと手間かかる。
どうせエラーチェックなんて期待されてないだろうし、ただ '0' 引くだけでいいよ。
207デフォルトの名無しさん:2008/01/27(日) 01:02:03
プログラム実行直後に「強制終了」てでるんですがなぜでしょうか
手がかりが無さ過ぎて困ってます
208デフォルトの名無しさん:2008/01/27(日) 01:03:04
適当にブレークポイント置いてステップ実行してみれ。
209デフォルトの名無しさん:2008/01/27(日) 01:03:11
>>207
デバッガでも使えば?
それだけじゃわかんねーし
210デフォルトの名無しさん:2008/01/27(日) 01:03:44
デバッガ使え
ないならprintf("dbg:%s:%d\n", __FILE__, __LINE__);
をばら撒きまくってどこまでちゃんと実行できているのかチェックしろ
211デフォルトの名無しさん:2008/01/27(日) 01:04:32
>>205 >>206
ありがとうございます。
212207:2008/01/27(日) 01:08:25
デバッガないです
mainの一番最初にprintfしてるんですがそれすら出力されません
213デフォルトの名無しさん:2008/01/27(日) 01:09:13
ないです、じゃなくて手に入れてこいよ
214デフォルトの名無しさん:2008/01/27(日) 01:09:21
>>212
main()ででかい配列を宣言してるとか。
215デフォルトの名無しさん:2008/01/27(日) 01:12:32
>>212
お前を助けるための手がかりが無さ過ぎて困ってます。
216デフォルトの名無しさん:2008/01/27(日) 01:15:38
>>214
static でもあんまりでかいと起動できない事がある。
217デフォルトの名無しさん:2008/01/27(日) 01:16:01
>>212
ソース晒せ
218デフォルトの名無しさん:2008/01/27(日) 01:16:35
コンパイラの対象環境が
自分の環境と違うとか
219デフォルトの名無しさん:2008/01/27(日) 01:23:12
DLL がない場合はそういうエラーが出るだろうしなあ。
220207:2008/01/27(日) 01:30:00
違うマシンならなぜかちゃんと走るのですが、、、
コンパイラはgccでMake介してやってます。今までもこうしてきました
DLLてなんですか

もうすぐ卒論提出日 私オワりました
221デフォルトの名無しさん:2008/01/27(日) 01:31:15
卒論を人に聞いて仕上げるぐらいなら卒業するな。
222デフォルトの名無しさん:2008/01/27(日) 01:33:01
1月末が卒論提出締切日が多いな
つーか今頃コンパイル云々言ってるようじゃ終わってる気が
223デフォルトの名無しさん:2008/01/27(日) 01:33:17
00〜ZZまで連番を振りたいのですが、
00〜99まで来るとA0〜ZZという順番で振りたいと思っています。
なるべく楽に出来る方法はないでしょうか?
よろしくお願い致します。
224デフォルトの名無しさん:2008/01/27(日) 01:34:07
>>220
やったね!
225デフォルトの名無しさん:2008/01/27(日) 01:36:05
>>220
ソースをガシガシ削っていって、その現象の再現する最小のソースを作り出すんだ。
226デフォルトの名無しさん:2008/01/27(日) 01:38:10
>>223
普通のn進数じゃないんだな。めんどくせ。
227デフォルトの名無しさん:2008/01/27(日) 01:42:52
>違うマシンならなぜかちゃんと走るのですが
一応聞いておくけど、
コンパイルしてるのはどのマシンで、
動かないのはどのマシンだ?
228デフォルトの名無しさん:2008/01/27(日) 01:43:42
>>220
まず、このプログラムが実行できるかどうかためしてみるんだ。

int main() { return 0; }
229デフォルトの名無しさん:2008/01/27(日) 01:48:25
>>227
そうか。
バイナリを持って行ってるって可能性もあるのか。
230デフォルトの名無しさん:2008/01/27(日) 01:50:13
>>223
99の次がA0ならA9の次は?
下の位にいつアルファベットがでてくるんだ。
231デフォルトの名無しさん:2008/01/27(日) 01:51:19
>>223
AA〜ZZ じゃなくて A0〜ZZ なのか?
自分で作れば?
232デフォルトの名無しさん:2008/01/27(日) 01:53:12
>>226
そうなんです。スマートにできればいいんですが、
N進数に直すのに数値を割ってごちゃごちゃしてしまいそうなので、
何かいい方法はないかと模索中です。
233デフォルトの名無しさん:2008/01/27(日) 01:55:10
単純な文字処理でいけるだろ
234デフォルトの名無しさん:2008/01/27(日) 01:58:03
可変100進数?それだけだと法則が分からん。
235デフォルトの名無しさん:2008/01/27(日) 02:06:18
00〜99を作る。これができないようなら勉強をあきらめろ。
A0〜ZZまで出力するのを作る。
そして99まで来たらA0へ処理を切り替えればいい
236デフォルトの名無しさん:2008/01/27(日) 02:09:48
普通の36進数なんじゃね? >>223が必要としてるのは?
237デフォルトの名無しさん:2008/01/27(日) 02:12:06
99の次が9Aなら分かる
だがなんで次がA0なのに最終的にZZになるんだw
238デフォルトの名無しさん:2008/01/27(日) 02:13:56
char buf[1024];

とかで宣言されて、何度か使い回された後の buf を NULL で埋め尽くすにはどうすれば出来ますか?

素朴に行くと、forループで埋めるというのもありますが、他に便利な方法がありますか?
239デフォルトの名無しさん:2008/01/27(日) 02:14:45
本気で言ってるのかよく分からないけど、memset
240デフォルトの名無しさん:2008/01/27(日) 02:14:51
memset
241デフォルトの名無しさん:2008/01/27(日) 02:15:44
>>238
memset()

ただ、memset(buf, NULL, sizeof buf); とかやると、ド素人ってのがバレバレになる。
242デフォルトの名無しさん:2008/01/27(日) 02:16:16
memset
243デフォルトの名無しさん:2008/01/27(日) 02:16:42
ポインタってわけじゃないならNULLで埋めないで素直に0で埋めようぜ
244デフォルトの名無しさん:2008/01/27(日) 02:19:08
NULLは一応ポインタ用なんだっけ?
整数のが来るとこで使ったときは標準では未定義だっけ?
245デフォルトの名無しさん:2008/01/27(日) 02:19:27
単なる36進数ならこんな無理やりでもOKだぞ。
char num[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ( int i = 0; i < 36 * 36: i++ ) {
printf ( "%c%c", num[ i % 36 ], num[ i / 36 ] );
}
246デフォルトの名無しさん:2008/01/27(日) 02:19:53
逆にポインタ配列を NULL で埋める時に memset すると
やっぱりド素人だというのがバレバレになる。
#if するなら構わんが。
247245:2008/01/27(日) 02:19:58
上の桁と下の桁が逆になったorz
248デフォルトの名無しさん:2008/01/27(日) 02:20:58
NULLが0じゃない処理系もあることはある。
249デフォルトの名無しさん:2008/01/27(日) 02:21:46
毎度毎度のそのネタ秋田
250デフォルトの名無しさん:2008/01/27(日) 02:22:19
>>248
gcc のメンバ変数ポインタとかな。
251デフォルトの名無しさん:2008/01/27(日) 02:23:20
ああ、ここは C スレだったな。すまん。
252デフォルトの名無しさん:2008/01/27(日) 02:26:00
仮にNULLが0だとしても用途がちがうから。
253デフォルトの名無しさん:2008/01/27(日) 02:26:42
ビット配列が 0 なら特に問題はない。
254デフォルトの名無しさん:2008/01/27(日) 02:28:48
memset(buf, SEEK_SET, sizeof buf); とか書いて、
「SEEK_SETが0以外の処理系ってあるんですか」とかゴネてるやつとかいたら、おかしいしな。
255デフォルトの名無しさん:2008/01/27(日) 02:30:44
NULL で埋める時に memset すると、
という点を誤解してるんだろう。
まあ、俺も書いてて紛らわしいと思ったが。
NULL で埋めるつもりで 0 クリアすると、という意味だ。
memset(buf, 0, sizeof buf); みたいな。
256デフォルトの名無しさん:2008/01/27(日) 03:24:03
socketプログラムで作るサーバープログラムについての質問があります。

例えば
struct sockaddr_in server;
・・・
server.sin_port = htons(7743);
server.sin_addr.s_addr = htonl(任意のIP);

とするとポート番号は直接htons関数に渡せるのは分かるんですが、
任意のIPは直接渡せませんよね?
渡せる場合例えばホスト表記で168.192.77.43というIPだとどのように書けばいいのですか?

また、渡せないとしたらIPを収めるin_addr構造体のs_addr変数にIPを収めると思うのですが、
例えばホスト表記で168.192.77.43というIPだとどのように代入すれば良いのでしょうか?
257デフォルトの名無しさん:2008/01/27(日) 03:32:55
inet_atonとか使え。
258256:2008/01/27(日) 03:38:54
>>257
こんな便利な関数があったんですね・・
初心者丸出しで申し訳ないです。
ありがとうございました
259デフォルトの名無しさん:2008/01/27(日) 03:48:37
ところでそのポート番号…いやなんでもないw
260デフォルトの名無しさん:2008/01/27(日) 03:51:25
7743が標準のソフトといえば…げほごほ
261256:2008/01/27(日) 04:35:16
え、何かまずいポート番号なんですか?
名無しさんにちなんでつけたんですが・・
262デフォルトの名無しさん:2008/01/27(日) 04:43:15
>>261
「7743 ポート番号」とかでぐぐればわかると思うよ
263デフォルトの名無しさん:2008/01/27(日) 04:44:28
俺も知らんから調べてみたらwinny関係みたいね。
264デフォルトの名無しさん:2008/01/27(日) 04:46:23
ちなみに(知ってる人は知ってるが)「名無しさん」なのだ。
265デフォルトの名無しさん:2008/01/27(日) 04:53:32
>>264
>>261の2行目
266デフォルトの名無しさん:2008/01/27(日) 04:56:42
>>265
ハハハ…。
ちなみに743にしなかったのは1023までがwell-knownだからなんだぜー。


…おやすみなさいorz
267デフォルトの名無しさん:2008/01/27(日) 04:59:16
743じゃねぇ774だ
ほんとやばいな・・さっさと寝よう・・・
268232:2008/01/27(日) 10:02:39
>>233
数値を36進数に変換するだけなのですが、
無駄にコードが長くなってしまって。

>>234
>>235
>>236
>>237
すみません。
ご指摘どおり誤植でした。

>>245
参考になりました。ありがとうございます。
269デフォルトの名無しさん:2008/01/27(日) 15:25:03
#include <stdio.h>

int main (int argc, const char * argv[]) {
// insert code here...
int hp=100;
int k;
printf("魔王が現れた!!¥n");
while (hp>=0){
printf("攻撃してください¥n");
printf("1>爆弾,2>こん棒¥n");
scanf("%d",&k);
switch (k) {
case 1:
printf("爆弾攻撃!!魔王に10のダメージ¥n");
hp=hp-10;
continue;
case 2:
printf("こん棒攻撃魔王に5のダメージ¥n");
hp=hp-5;
continue;
default:printf("さあ早く");
continue;
}
printf("やった!!魔王を倒した¥n");
break;
}
return 0;
}
一方的に魔王に攻撃するプログラムを作成したいのですが
実行すると最後の魔王を倒したが表示されずに終了してしまいます
どうすれば良いのでしょうか
お願いします
270デフォルトの名無しさん:2008/01/27(日) 15:35:16
魔王を倒したをwhileの外に出せ
271デフォルトの名無しさん:2008/01/27(日) 15:36:14
>>269
int main (int argc, const char * argv[])
{
// insert code here...
int hp = 100, k;
printf("魔王が現れた!!\n");
while (hp >= 0) {
printf("攻撃してください\n");
printf("1>爆弾,2>こん棒\n");
scanf(" %d", &k);
switch (k) {
case 1:
printf("爆弾攻撃!!魔王に10のダメージ\n");
hp -= 10;
break;
case 2:
printf("こん棒攻撃魔王に5のダメージ\n");
hp -= 5;
break;
default:
printf("さあ早く");
break;
}
}
printf("やった!!魔王を倒した\n");
return 0;
}
272デフォルトの名無しさん:2008/01/27(日) 16:07:52
>>270-271
ありがとうございます!!
273デフォルトの名無しさん:2008/01/27(日) 17:58:37
int k=1234;
printf("K*100L=%1d",K*100L);

と入力したら、なぜか「K*100L=1234000」と出ました。

「K*100L」の「L」はどこへ消えてしまったのでしょうか?
274デフォルトの名無しさん:2008/01/27(日) 18:02:22
>>273
どうなるとおもってLつけたんだよwwww
Lはlong int 型であることを明示する
275デフォルトの名無しさん:2008/01/27(日) 18:39:22
>>273
>int k=1234;
>printf("K*100L=%1d",K*100L);
>と入力したら、なぜか「K*100L=1234000」と出ました。
大嘘を書くな。或いはコピペくらいミスるな。
276デフォルトの名無しさん:2008/01/27(日) 18:45:14
>Lはlong int 型であることを明示する

K*100は「K*(long int)100」の省略形ってことでいいですか?

>printf("K*100L=%1d",K*100L);

すまんまちがえた。「printf("K*100L=%ld",K*100L); 」だった。
277デフォルトの名無しさん:2008/01/27(日) 18:46:05
もちつけ
278デフォルトの名無しさん:2008/01/27(日) 18:47:51
だから、なんで1234*100で1234000なんだYO!
279デフォルトの名無しさん:2008/01/27(日) 19:41:03
あ、いやその。

C言語始めたばかりの超ビギナーで・・・
280デフォルトの名無しさん:2008/01/27(日) 19:44:23
いや、算数の問題だぞ。
281デフォルトの名無しさん:2008/01/27(日) 20:10:02
kとKのことかと思ったら算数が間違ってたのかw
282232:2008/01/27(日) 23:06:21
36進数を文字から数値に戻すことでお聞きしたいのですが、
地道に計算するしかないでしょうか?
A9の場合、36*10 + 9とやれば答えが出るのはわかっているのですが、
教えて頂いた配列を使ったやり方が、目から鱗のシンプルさだったので、
同じくシンプルな実装方法があれば、是非ご教授お願いできないでしょうか。
よろしくお願い致します。
283デフォルトの名無しさん:2008/01/27(日) 23:20:30
アルゴリズムのスレがあるからそっちで聞いたほうがいいのでは?
284デフォルトの名無しさん:2008/01/27(日) 23:32:42
文字コードから 0〜35 に変換する変換テーブルを作ればいいと思うが、
どうせ文字セットに依存するコードになるのなら、
数字なら '0' を引いて、アルファベットなら 'A' 引いて 10 足すとかやった方が
分かりやすいんじゃないかと思う。
285デフォルトの名無しさん:2008/01/27(日) 23:34:25
>>282
恐らくもっともシンプルな解はstrtolを使う。
286デフォルトの名無しさん:2008/01/27(日) 23:34:55
2桁の10進数の値があります。
この値をを1桁目と2桁目の2つに分け、別の変数に入れたいです。
1桁目をA1 2桁目をA2のように。。。
どのような演算をしたらよいでしょうか。
ご教授ください。
287デフォルトの名無しさん:2008/01/27(日) 23:35:36 BE:199692858-2BP(294)
char num[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

n = strchr(num, 'A') - num;
n = strchr(num, '0') - num;

各桁を数値に変換するのはこれでできるけど。
288デフォルトの名無しさん:2008/01/27(日) 23:39:30
検索はパフォーマンス的にどうなのよ
289デフォルトの名無しさん:2008/01/27(日) 23:40:15
>>286
10で割ったり余りをだしたり
290245:2008/01/27(日) 23:44:55
>>282
これも無理やり感漂う方法な気もするけど、こんなのどう?
isalpha( num ) ? num - 'A' + 10 : num - '0';
ラッパ関数でも作ればシンプルになりそうだけど。
strtolの方がわかりやすいかな
291232:2008/01/28(月) 00:52:48
>>283
>>284
>>285
>>287
>>290

発想次第で面倒と思っていた処理でも、
こんなにシンプルになる方法がいくつもあるとは、奥が深いですね。
皆様に教えて頂きました事、大変勉強になりました。
ご親切にありがとうございました。
292デフォルトの名無しさん:2008/01/28(月) 13:50:49
system関数を使って
コマンドラインで実行しないといけないプログラムを自動化したいんだけど
たとえば,

system("programname login");

って実行したら,コマンドプロンプトの画面に

User Name>

と出てコマンド入力を求められます.
引き続きパスワードなども聞かれるのですが,
system関数では実行処理が終わるまで制御が戻りません.
このような追加入力が必要な場合どういうコーディングをすればいいの?
293デフォルトの名無しさん:2008/01/28(月) 13:55:09
>>292
その入力が標準入力で、事前に入力項目が判っているなら
(つまりコマンドプロンプトでprogramname login < foo できるなら)
system("programname login < foo")とでもすればいい。
大抵の環境で巧くいくと思う。
入力項目を動的に変更したいなら大抵の環境でpopen()が使えると思う。
そうでないなら、大きく環境に依存することになるから
該当環境のスレ若しくは板で聞いたほうが早いかもしれない。
294デフォルトの名無しさん:2008/01/28(月) 14:49:19


int s;
int dx;
int i;

printf("f(x)=x^2について\n");
printf("x軸方向の刻み幅大:");
s=0;
dx = 3/10;
for(i=0;i<3;i=i+dx){
s=s+(i*i*dx);
}
printf("s=%d\n",s);

区分求積法やってるんですけどソース実行すると
途中で止まるんです…
お願いします。。
295デフォルトの名無しさん:2008/01/28(月) 14:52:15
3/10 は 0
つまりdx が0なので無限ループ。
296デフォルトの名無しさん:2008/01/28(月) 14:53:13
intは整数値だから3/10とか代入しようとすると端数が切り捨てられ0になる。
それでforが無限ループになってる。
小数を扱う場合はdoubleを使え。
297294:2008/01/28(月) 15:02:11
>>295
>>296
できました
アドバイスどもです
298292:2008/01/28(月) 16:28:12
>293
返答ありがとうございます.

>(つまりコマンドプロンプトでprogramname login < foo できるなら)
これがうまくいかなかったので

pp = _popen("programname login", "w");
fprintf(pp, "user");
fprintf(pp, "12345678");
_pclose(pp);

他サイトも参考にして,こうやって組んでみました,
これだと,DOS窓は開くものの,追加入力と窓のクローズが
実行されません.
根本的に使い方まちがってますか?
299デフォルトの名無しさん:2008/01/28(月) 21:19:57
>>298
使い方はあっていると思うけど、パスワード入力が標準入力じゃないんじゃね?
だとしたら、その方法はでは無理。パスワード入力で何が起きているか、Spy++ででも見てみたら?
300デフォルトの名無しさん:2008/01/28(月) 21:49:27
unsigned char **in;
このinをx方向にwidth,y方向にheight分だけずらした新しいポインタを得るには
どうしたらいいでしょうか?
301デフォルトの名無しさん:2008/01/28(月) 21:51:42
ポインタはリニアなものなのでx方向とかy方向とかはありません。
302デフォルトの名無しさん:2008/01/28(月) 21:51:49
x とか y とか言われても・・・
303デフォルトの名無しさん:2008/01/28(月) 21:52:52
in += width + height * MAX_WIDTH
304デフォルトの名無しさん:2008/01/28(月) 21:53:58
** を width + height * MAX_WIDTH 進めてどうするよ
305300:2008/01/28(月) 21:54:07
unsigned char **in;


in[y][x] = (x, y)の画素

見たいな感じでデータが入ってるんですが.
これをy, xだけ特定値分だけずらした新しいポインタが欲しいのですが
306デフォルトの名無しさん:2008/01/28(月) 21:57:35
&& in[y][x]
307デフォルトの名無しさん:2008/01/28(月) 22:01:01
>>306
そりゃないわ・・・。
308デフォルトの名無しさん:2008/01/28(月) 22:02:45
そもそも、無理だろこれ。
unsigned char * を作る事は可能だが、
unsigned char ** は無茶。
309300:2008/01/28(月) 22:03:02
>>306
これは無理ですよね...あきらかに...
新しくallocしてコピーするしかないのかな...
310デフォルトの名無しさん:2008/01/28(月) 22:05:41
そんなことしなくても、
width と height を保存する構造体作って、
in[y + size->height][x + size->width] を取得する関数を作っときゃいいんじゃね?
311デフォルトの名無しさん:2008/01/28(月) 22:05:46
常にinを持ってればどの座標のポインタだって作れるだろうが。
312デフォルトの名無しさん:2008/01/28(月) 22:08:14
普通は、1次元配列にしておいてxとyと幅からオフセットを計算するもんだが。
313デフォルトの名無しさん:2008/01/28(月) 22:16:34
C言語を勉強して約半年・・・
いまだにコンパイラの細かい使い方がわかりません。
学習書などに書いてある「コンパイラのマニュアルを見て」
見てもさっぱり理解できません。できるのはコンパイルすることだけ

マニュアルとかがわかりやすいコンパイラを誰か教えてください
書籍とかでもいいんですけど。
ちなみに今使ってるのは「.NET Framework SDK」です
もしかしてスレ違いですか?
314デフォルトの名無しさん:2008/01/28(月) 22:18:39
それはコンパイラじゃない・・・。
315デフォルトの名無しさん:2008/01/28(月) 22:22:12
マニュアルをみてさっぱりわからないなら、プログラム全般の知識が足りないだけじゃね
初心者なら警告レベルと最適化オプションとパスとリンク関連のオプション覚えておけばいいんじゃね
316デフォルトの名無しさん:2008/01/28(月) 22:23:32
VCとかつかってりゃコンパイルのマニュアルなんざ知らなくてもどうにかならね?
F7押すだけなんだし。
317デフォルトの名無しさん:2008/01/28(月) 22:24:52
設定なんて、ライブラリ導入した時に
インクルードディレクトリやライブラリディレクトリいじったり、
マクロ定義したりする程度じゃね? 普通いじるとしても。
318313:2008/01/28(月) 22:31:20
なるほど・・・単純にレベル不足のようで;;
一年くらい前から0から独学で勉強を始めたのですが
もう少し色んな知識を覚えないと駄目ですね
319デフォルトの名無しさん:2008/01/28(月) 22:33:37
>>318
どちらかというと現状でいろいろと詰め込もうとしすぎている感じがする。
とはいえコンパイラとSDKの違い位は知っててもいいかな?
Wikipedia程度の知識でも初めは十分じゃね?
320デフォルトの名無しさん:2008/01/28(月) 22:39:02
プログラムを作るときに何か外部のライブラリを使ってみればいいんじゃね

リンクの設定やインクルードパスの設定をしないと使えないから
勉強になると思うぞ
321313:2008/01/28(月) 22:51:20
「.NET Framework SDK」は単純にC言語のコンパイラだと思ってましたorz
なんか共通言語でどうのこうの書いてあるから変だなと・・・

正直全然大したことはできませんが、色々試して勉強してみます
まずは>>320さんの言う通りにやってみようかな
322デフォルトの名無しさん:2008/01/28(月) 23:40:43
C言語2級取れば
Cの基礎は一通りは分かってる って扱いになりますかね?

ならないか
323デフォルトの名無しさん:2008/01/28(月) 23:44:15
基礎くらいはわかってる になるんじゃね?
っつかCの世界だと実際にやってるかやってないかが一番重要だしなぁ
324デフォルトの名無しさん:2008/01/28(月) 23:46:12
どこが出してる2級なの?
325デフォルトの名無しさん:2008/01/28(月) 23:46:45
while文の実行条件で、
while(NULL)というのはFALSEと同じに考えていいのでしょうか?
326デフォルトの名無しさん:2008/01/28(月) 23:55:39
別にいいけどwhileに0いれても意味ないだろ
327デフォルトの名無しさん:2008/01/28(月) 23:56:59
>>325
顔面に硫酸ぶっ掛けられて
痛いとかではすまないだろ?
328デフォルトの名無しさん:2008/01/29(火) 00:00:01
>>326
whileになんか式を入れてて、その値がNULLになったらって考えてるんじゃね?
329デフォルトの名無しさん:2008/01/29(火) 00:06:36
でも、NULL と比較した方が分かり良いよ。
330デフォルトの名無しさん:2008/01/29(火) 00:15:12
>>324さん

サーティファイです

今 3級は持ってるんですけど
こんなのじゃ意味無いよなぁ

最低でも2級は取らないとなぁ..
331デフォルトの名無しさん:2008/01/29(火) 00:19:58
あんなの2級も3級も大差ないだろw
332デフォルトの名無しさん:2008/01/29(火) 00:24:18
http://www.sikaku.gr.jp/js/side3/scon02.html

これか。
職業プログラマなら、1級とれないとだめだな。
333デフォルトの名無しさん:2008/01/29(火) 00:29:26
うちの新人、3か月程度の研修のあと文系出身を含め全員が受験。
結果、全員が2級合格。プログラム未経験者含め数名が1級合格。
その程度の試験。あるに越したことはないが業務レベルに比べれば大したことはない。
334デフォルトの名無しさん:2008/01/29(火) 00:30:17
1級かぁ..

まだまだほど遠いなぁ

しょせん俺なんかカスだな

335デフォルトの名無しさん:2008/01/29(火) 00:48:58
独学での勉強かつ普通の生活ってんなら無理があるだろうな、覚えられる範囲。
実用的かつ難易度高いソース書きたいなら
やっぱ業務とかに携わったりとかで、一日8時間普通にソース見てないと。
336デフォルトの名無しさん:2008/01/29(火) 01:33:28
ちょっと聞きたいんだがポインタ配列として*〜[]で宣言しつつ
調べる時にはポインタ変数でインクリメントって出来る?
いや、基本的には出来ないってのはわかってるんだが
↑の2つが指定された課題なもんで
意図してるところが違うことなんじゃないかと思い始めて…
337デフォルトの名無しさん:2008/01/29(火) 01:47:12
言っている意味が分からん。
338デフォルトの名無しさん:2008/01/29(火) 01:50:45
ごめん、もう少し詳しく書く
宣言の時には
char *hoge[]{
}
で、
走査するときにはポインタ変数を使えって言われたんだ
でも配列はインクリメントできないから、普通無理だよね?
何か方法あるのかな?ってことです
339デフォルトの名無しさん:2008/01/29(火) 01:51:26
間違えた
char *hoge[]={

}
340デフォルトの名無しさん:2008/01/29(火) 01:52:23
配列はインクリメントできないが、
char *hoge[] = { ...... };
char **p = hoge;
p++;
というのはできる
341デフォルトの名無しさん:2008/01/29(火) 01:52:25
たとえばこんな感じか?配列内の偶数だけインクリメント。
int num[] = { 1, 2, 3, -1 };
for ( int * p = num; *p != -1; p++ ) {
if ( *p % 2 == 0 ) *p++;
}
342デフォルトの名無しさん:2008/01/29(火) 02:02:39
>>340
それやってみたんだが
それぞれの配列の先頭のアドレスがポインタ変数に格納されるから
インクリメントするたびに、配列の部分は何も変わらないみたいなんだけど…
つまり
char *hoge[] = {};
*hoge++;
と同じ
343デフォルトの名無しさん:2008/01/29(火) 02:04:32
ちがうだろ。
344デフォルトの名無しさん:2008/01/29(火) 02:08:56
おかしいな…
もう一度チェックしてみる
345デフォルトの名無しさん:2008/01/29(火) 02:13:00
>>342

言いたい事がわかった希ガス。
つまり、
char *hoge[] = { ...... };
hoge[0][0] = 1;
ということをポインタで出来るか、ということだよね?
それなら、面倒だけど、
char *hoge[] = { ...... };
char **p = hoge;
char *pp;
p++;
pp = *p;
*pp = 1;
pp++;
ということになるな。
346デフォルトの名無しさん:2008/01/29(火) 02:51:43
>>345
>hoge[0][0] = 1;
>ということをポインタで出来るか、ということだよね?
そういうことです…わかりにくくてすみませんorz

>>345
そのやり方でいけました
ありがとうございましたorz
347デフォルトの名無しさん:2008/01/29(火) 02:55:08
char (*ptr)[10];
348デフォルトの名無しさん:2008/01/29(火) 03:14:11
>>347
かなり根本的に別のもんじゃねーかそれwww
349デフォルトの名無しさん:2008/01/29(火) 07:55:23
>>347
それは>>305に教えてやるべきだったな
350デフォルトの名無しさん:2008/01/29(火) 11:03:22
[x][y][特定値]
351デフォルトの名無しさん:2008/01/29(火) 13:08:06
>346が判っていない気がするのは気のせいだろうか。
352デフォルトの名無しさん:2008/01/29(火) 15:00:17
>>300
ダブルポインタ使ってポインタ配列を動的確保したいのかな
だとすれば、xとyを仮にint型と仮定して

unsigned char **array(int x, int y)
{
unsigned char **pa;
int i;
/*ポインタ配列を動的確保*/
pa=(unsigned char**)malloc(x*sizeof(char*));
if(!pa) /*エラー処理*/

for(i=0;i<x;i++) {
/*配列要素を動的確保*/
pa[i]=(unsigned char*)malloc(y*sizeof(char));
if(!pa[i]) /*エラー処理*/
}
return pa;
}

とかの関数を作って呼び出し側から(仮にx=4, y=10としたら)

int x=4, y=10;
unsigned char **in=arrya(x,y);

で後は、普通の配列と同様に使いまわせるはず
ただ、処理が終わったらfree()しない駄目だけど
353352:2008/01/29(火) 15:05:10
>>352
訂正
>int x=4, y=10;
>unsigned char **in=arrya(x,y);

正しくは、
int x=4, y=10;
unsigned char **in=array(x,y);
です
354デフォルトの名無しさん:2008/01/29(火) 16:28:58
だから、それじゃダメなんだってば
355デフォルトの名無しさん:2008/01/29(火) 16:35:25
あほすぎ
356デフォルトの名無しさん:2008/01/29(火) 16:41:55
>>300
そうじゃねぇだろ
357デフォルトの名無しさん:2008/01/29(火) 17:52:37
>>354
>>352で拙いか?
unsigned char **in=array(x,y);でin[x][y]となっているハズで
そのまま要素数を指定すれば配列のアドレスを指すと思うけど?
358デフォルトの名無しさん:2008/01/29(火) 19:27:41
inを得るまではいい。そのあと、「普通の配列と同様に使い回せる」と思うのなら試してご覧。
359デフォルトの名無しさん:2008/01/29(火) 19:55:32
そこから先で君のしたいことの何ができなくなるのかは知らんよ
だいたい「普通の配列と同様に使い回せる」って何だよ
360デフォルトの名無しさん:2008/01/29(火) 19:58:30
>>359
バカはお帰りください
361デフォルトの名無しさん:2008/01/29(火) 20:07:12
あらあら
こいつ人格攻撃始めちゃったよ
362デフォルトの名無しさん:2008/01/29(火) 20:13:14
そもそもの質問に「普通の配列と同様に使い回せる」なんて要件ないじゃん。
363デフォルトの名無しさん:2008/01/29(火) 20:14:41
人格と能力の区別くらいつけて欲しいと思うなり。
364デフォルトの名無しさん:2008/01/29(火) 20:19:45
条件の後出しなんて普段から無能な質問者と接してる君らにとって珍しい事ではなかろう
365352:2008/01/29(火) 20:19:48
>>361
>>360は別人だけど

面倒だけど簡単な例として
(array()は>>352で示した通り)

nt main()
{
/*例として*/
int x=3,y=5;
unsigned char **in=array(x,y);
int i, j;
/*例として*/
for(i=0;i<x;i++) {
for(j=0;j<y;j++) {
in[i][j]=('A'+i)*(j+1);
}
}
for(i=0;i<x;i++) {
for(j=0;j<y;j++) {
printf("%c ",in[i][j]);
}
printf("\n");
}
for(i=0;i<x;i++)
free(in[i]);
free(in);
return 0;
}

>>352及びx,yをそれぞれ指定してやればすんなり可変長の2次元配列が簡単に組める
特に行列での演算やる時は普通に使うけどな
366デフォルトの名無しさん:2008/01/29(火) 20:21:13
あらあら
こいつ別人のふりし始めちゃったよ
367デフォルトの名無しさん:2008/01/29(火) 20:26:44
void func() {
char str[100] = {0};
・・・・・・



void func() {
char str[100];
memset(str, 0, sizeof(str));
・・・・・・

とするのって、同じだと思って問題ない?
どっちの方がいいとかあるならそれも教えて欲しい
368デフォルトの名無しさん:2008/01/29(火) 20:37:08
>>367
文字列として扱うなら、全部0で埋める必要ないよ。
自称上級者で、memset()するのがいいって信じ込んでるやつとかけっこういるけど。
369デフォルトの名無しさん:2008/01/29(火) 20:38:35
とりあえず質問に答えろよw
370デフォルトの名無しさん:2008/01/29(火) 20:40:07
どっちも悪いってことだろ。
371デフォルトの名無しさん:2008/01/29(火) 20:44:40
>>367
ついこないだ上司に質問したばっかりの内容とカブってるけど
パっとみ、宣言と同時に{0}だと、ん?って思うから
memsetなり、ループで全部0で埋め尽くすなりしたほうが、跡でソース見たときにわかりやすいらしいから
後者のほうがいいみたいよ。
どっちも配列の中身は一緒だけど。
372デフォルトの名無しさん:2008/01/29(火) 20:45:37
馬鹿なコンパイラは上だと最初の要素に 0 代入してから後をゼロクリアしてた気がする。
373デフォルトの名無しさん:2008/01/29(火) 20:47:20
文字列をmemset()でクリアしてるやつは素人だろ。
374デフォルトの名無しさん:2008/01/29(火) 20:47:37
つーか、空文字列で初期化するなら
普通は char str[100] = ""; じゃないのか?
375デフォルトの名無しさん:2008/01/29(火) 20:49:00
char配列だからって文字列とは限らんだろうが…
376デフォルトの名無しさん:2008/01/29(火) 20:49:32
馬鹿ばっか
377デフォルトの名無しさん:2008/01/29(火) 20:49:45
ぶっちゃけ何が正しいってのは無い
378デフォルトの名無しさん:2008/01/29(火) 20:50:23
>>375
変数名 str で文字列として扱わないとか
逆にそんな命名する頭を疑うわ。
379デフォルトの名無しさん:2008/01/29(火) 20:51:17
>>378
ほ、ほら、ゲーム作成過程でのStrong(力)かもしれないじゃない!!!・・・じゃない!!!
380デフォルトの名無しさん:2008/01/29(火) 20:51:46
>>375
だから文字列として扱うならって前置きしてるじゃん。
それに文字列でもないのにstrって変数にしてたら、そこもちょっとおかしい。
381デフォルトの名無しさん:2008/01/29(火) 20:52:59
>>377
文字列を0の全クリアで初期化するスタイルは正しくない。
382デフォルトの名無しさん:2008/01/29(火) 20:53:37
\0でのクリア=0でのクリア・・・?
383デフォルトの名無しさん:2008/01/29(火) 20:58:49
'\0' == 0
384デフォルトの名無しさん:2008/01/29(火) 22:30:24

while(適当){
str[i] - '0'
}

って記述は何を意味してるんでしょうか
strはchar型の配列なんですが、意味不明です
385デフォルトの名無しさん:2008/01/29(火) 22:32:26
strのi番目の要素から'0'を引いてる
386デフォルトの名無しさん:2008/01/29(火) 22:36:19
きっとstrの各要素の文字は数字
そしてその文字に対応する数を求めてる
387デフォルトの名無しさん:2008/01/29(火) 22:36:37
str[i]の中身に文字型の数字がはいってて整数型に直してるんだろう
str[i] - '0'
388デフォルトの名無しさん:2008/01/29(火) 22:39:28
なるほど
これ、文字から整数にするのに他に方法ありますか?

筆算するプログラムを書いてるんですが、後から0が表示されなくなるんです。
389デフォルトの名無しさん:2008/01/29(火) 22:41:45
これより難しくなってもいいなら有るよ
390デフォルトの名無しさん:2008/01/29(火) 22:42:08
是非お願いします
391デフォルトの名無しさん:2008/01/29(火) 22:43:27
atoiとかstrtolとか
392デフォルトの名無しさん:2008/01/29(火) 22:47:54
ありがとうございます。
atoi関数を使用してみます。
後者の方は引数一杯でびっくりしたので前者にしてみます。
393デフォルトの名無しさん:2008/01/29(火) 22:53:53
が、速攻でエラーが出ました。


void input(char* buf)
{
char str[70];
int i , j ;

printf("input data");
scanf("%s",str);

i = strlen(str);
j = 0;

while(i>0){
buf[j] = atoi(str[i]);
j++;
i--;
}
return 0;
}

逆順に格納してるのは意図的です。
bufは他で初期化済みです。
これは変換した値を渡すことが出来ないんでしょうか。
394デフォルトの名無しさん:2008/01/29(火) 22:55:26
>>393
atoi……
395デフォルトの名無しさん:2008/01/29(火) 22:56:25
文字を渡すな
文字列を渡せ
396デフォルトの名無しさん:2008/01/29(火) 22:56:38
な、何か変でしょうか
397デフォルトの名無しさん:2008/01/29(火) 22:56:56
逆順なら文字列渡しても無理だがな
398デフォルトの名無しさん:2008/01/29(火) 22:57:31
'0'を引くしかないよ
399デフォルトの名無しさん:2008/01/29(火) 23:09:04
char tmp[2] = {0};
tmp[0] = str[i];
buf[j] = atoi(tmp); 

でもいいけど、'0'を引いたほうがいいな
400デフォルトの名無しさん:2008/01/29(火) 23:24:24
あ、ようやく理解しました。
すみません。ありがとうございます。

void lineprint(char c,char* line,int digit){
      int i,k;
      printf("%c",c);
      for(i = 69;i >= 0;i--){
         printf("%d",line[i]);
      }
      printf("\n");
      return 0;
}

という関数が筆算の表示部分なんですが、配列の要素が無い部分、つまり0が入ってる初期化された部分にスペースを代入してから表示しようとすると、計算結果が0になった場合、0が表示されません。
つまり0が並んでるのは見栄えが良くないのでスペースを入れて消そうと考えたのですが・・・
スペースはfor文で配列に数字が入っていない部分に代入、表示させたいのです。

引数のcは、+等の四則記号部分、lineは筆算の配列部分、digitは配列の要素数をstrlenで取得した物です。
401デフォルトの名無しさん:2008/01/29(火) 23:30:53
バッファオーバーフローを起こさないためには具体的にどうすればいいですか?
402デフォルトの名無しさん:2008/01/29(火) 23:32:00
サイズをチェックする。
そしてサイズをチェックできない関数を使わない。
403デフォルトの名無しさん:2008/01/29(火) 23:35:28
サイズ指定の際、符号なしと符号ありの混合演算に気をつける
サイズを保持または指定する整数のオーバーフローに気をつける
404デフォルトの名無しさん:2008/01/29(火) 23:37:10
Cを使わない。
405デフォルトの名無しさん:2008/01/29(火) 23:46:14
このスレでそれは無いだろう。

どうすればバッファオーバーフローが起こらないことを保証できるか考えてコーディングする。
406デフォルトの名無しさん:2008/01/29(火) 23:55:49
#include<stdio.h>
int main(void){
    int year, month, day, week, tmpm, tmpy, i;
    int daymax[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    year = tmpy = 2008;
    month = tmpm = 1;
    day = 1;
    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) daymax[1] = 29;
    if (tmpm < 3) {
        tmpy--;
        tmpm += 12;
    }
    week = (tmpy + tmpy/4 - tmpy/100 + tmpy/400 + (13*tmpm+8)/5 + day) % 7;
    for(; month <= 12; day++, week++){
        if(week == 7) week = 0;
        if(day == 1){
            printf("\n***** %04d / %2d *****\n", year, month);
            for(i=0; i < week; i++) printf(" ");
        }
        printf(" %2d", day);
        if(day == daymax[month-1]){
            putchar('\n');
            day = 0;
            month += 1;
            continue;
        }
        if(week == 6) putchar('\n');
    }
    return 0;
}
カレンダー作成で何度か修正を試みたのですがエラーがでてしまいます、
どこがおかしいのでしょうか?
407デフォルトの名無しさん:2008/01/29(火) 23:58:41
※どんなエラーが出るのか書きましょう
408デフォルトの名無しさん:2008/01/29(火) 23:58:42
void foo(size_t n)
{
size_t buf_size = sizeof(int)*n;
int* p = malloc(buf_size);
memset(p, 0, buf_size);
}
以前こんなコードを見かけたけど、

size_t=32bit sizeof(int)=4 の場合
foo(0x40000000U);
とかやっちゃうとおかしな事になるね

こういうのもオーバーフローの遠因になったりする
409デフォルトの名無しさん:2008/01/30(水) 00:18:11
お聞きしたい事があるのですが、
配列から指定の要素を削除するのに、
ソートかけて、二分検索かけて、見つかった箇所から、
一個づつ添字ずらすより早くやる方法ありますでしょうか?
410デフォルトの名無しさん:2008/01/30(水) 00:20:07
>>409
ビンソート(バケットソート)
ハッシュ
411デフォルトの名無しさん:2008/01/30(水) 00:22:50
・その配列がソートされている必要があるのか
・その配列は先頭から末尾の要素が連続している必要があるのか
412デフォルトの名無しさん:2008/01/30(水) 00:25:22
バイナリサーチするならソートするだろ
413デフォルトの名無しさん:2008/01/30(水) 00:27:11
ソートされてなくてもいいなら、バイナリサーチより削除を速くする方法はあるってこと。
ソート状態を保たなきゃいけない場合は、ハッシュとか使えないでしょ。
414デフォルトの名無しさん:2008/01/30(水) 00:28:37
苦しんで以外で
初心者向けな説明が書かれているサイトありますか?
415デフォルトの名無しさん:2008/01/30(水) 01:18:47
C言語でググった一番上。
基礎はあそこで十分だろ
416デフォルトの名無しさん:2008/01/30(水) 04:32:08
Wikipediaってなんでも載ってるな
417デフォルトの名無しさん:2008/01/30(水) 04:48:39
いまさらw
418デフォルトの名無しさん:2008/01/30(水) 04:53:12
クラッキングから今晩のオカズまでなんでもあるんだぜ?!
でもcの基礎的な部分はUNIX系のmanpageが便利だと思う
419デフォルトの名無しさん:2008/01/30(水) 05:49:20
ちょっとまて、ソートして二分探索するより
線形探索のが早いだろw
420デフォルトの名無しさん:2008/01/30(水) 05:58:35
以下のソースコードは、プログラムの一部である。その実行結果を示せ。
int i,j;
int*ptr=&i;
printf("ptr==&i → %d\n",ptr==&i);
printf("ptr==&j → %d\n",ptr==&j);
これ頼む!後数時間後でC言語の試験があるんだ!卒業がかかってるにもかかわらずやる気なくてごめんなさい、後でいくらでもあやまるから教えてくださいっ!
421デフォルトの名無しさん:2008/01/30(水) 06:06:49
>>420
なにが分からないの?
422デフォルトの名無しさん:2008/01/30(水) 06:22:36
なにがわからないかわからないくらいダメダメなんだけど過去問がそのまま出るから答えさえわかれば暗記してなんとかなるんだ
423デフォルトの名無しさん:2008/01/30(水) 06:26:33
>>420
1
0
424デフォルトの名無しさん:2008/01/30(水) 06:27:06
ptr==&i → 1
ptr==&j → 0
425デフォルトの名無しさん:2008/01/30(水) 06:28:16
ありがとう、全力で感謝する
426デフォルトの名無しさん:2008/01/30(水) 06:29:24
これ、何を問う問題なんだろうな
427デフォルトの名無しさん:2008/01/30(水) 06:36:37
問題を読めばわかるよ
428デフォルトの名無しさん:2008/01/30(水) 06:53:35
>>407
c:\documents and settings\my documents\visual studio 2005\projects\karennda7\karennda7.cpp(4) : error C3872: '0x3000': この文字を識別子で使用することはできません
[この文字を識別子で使用することはできません]が大量に出てしまいます。
429デフォルトの名無しさん:2008/01/30(水) 06:56:02
>>428
全角文字つかってない?
430デフォルトの名無しさん:2008/01/30(水) 12:35:58
>>428
空白に全角がいるんじゃねーの?
コピペしたコードによくある。
431デフォルトの名無しさん:2008/01/30(水) 17:36:29
・0〜99の100個の数字から異なる30個を選び、配列COM[30]に
格納せよ。
・次に異なる6個の数字を入力し、順番に配列MAN[6]に格納せよ。
・ソート方法Aを用いて配列COM、MANの要素をそれぞれ小さい順に並べよ。
・配列COMに含まれる配列MANの数字の個数countを求めよ。
・最後に、配列COM、MANの全要素、変数countを
 result.outに書き込め。
・出力形式は自由とするが、main関数内は10行以内にすること。

[ソート方法A]
・作業用の配列として、要素が100個のint型の配列Workを用意する。
・配列Workの各要素は、0に初期化する。
・ソートしたい配列xの要素を順番に読んで、Work[その値]を+1する。
・作業3をすべてのxの要素について行った後、Workの要素を小さい方から順番に
 よんで、Workの値が0でなければ、xに書き戻します。

という課題が出たんですが、全然できないので、誰か助けて下さい
432デフォルトの名無しさん:2008/01/30(水) 17:38:21
宿題なら、それ用のスレがある。
433デフォルトの名無しさん:2008/01/30(水) 17:47:37
>>1読めない人多いな
434デフォルトの名無しさん:2008/01/30(水) 21:04:57
そういうやつこそ基礎が出来なくて後で泣くことになる
435デフォルトの名無しさん:2008/01/30(水) 21:58:54
Borland C++ Compiler 5.5 に登録して、しかもパスワード(二種類)入力して
解凍もしたのに、まだコンパイラが起動できない。どうしたらいいか教えてくださいです。
436デフォルトの名無しさん:2008/01/30(水) 22:02:08
>>435
http://www.chem.scphys.kyoto-u.ac.jp/nonnonWWW/ogawara/lecture/borland.html

この手順どおり最初からやってみたら?
437デフォルトの名無しさん:2008/01/30(水) 22:08:20
というかスレ違い
438デフォルトの名無しさん:2008/01/30(水) 22:23:14
>436
ありがとう。
439デフォルトの名無しさん:2008/01/30(水) 22:31:16
自己参照構造体ってのを使ってプログラム作ってみたんです。
コンパイルは無事できたんですが、実行するとエラーが出てしまいます。
ttp://www9.plala.or.jp/sgwr-t/
のサイトの15-5にある例とほとんど同じに作ったつもりなんですが…
440デフォルトの名無しさん:2008/01/30(水) 22:33:09
ソース無けりゃエスパー待ち
441デフォルトの名無しさん:2008/01/30(水) 22:41:53
ソース晒します。
http://applis.servehttp.com/index.htm
の00006387.cです。パスはtest。
ほとんど同じなのになんでダメなんだろう。恥ずかしい…
442デフォルトの名無しさん:2008/01/30(水) 22:41:57
>>439
a.exa とかタイプしたんじゃねーの?
きっとエラーメッセージは command not found だべ。
443デフォルトの名無しさん:2008/01/30(水) 22:42:51
げ、h抜き忘れました。申し訳ない。
どうかよろしくお願いします。
444デフォルトの名無しさん:2008/01/30(水) 22:47:51
>>441
8行目 table の大きさは?
445デフォルトの名無しさん:2008/01/30(水) 22:49:23
>>442
というかアイコンをダブルクリックして実行してますのでそれはないです。
一応コマンドプロンプトからそれを確認しつつ実行しましたがダメでした。
446デフォルトの名無しさん:2008/01/30(水) 22:50:21
char table[]; /* table:実際に記録しときたいデータ */
447デフォルトの名無しさん:2008/01/30(水) 22:52:37
初投稿です。
あの、c言語使うときのお勧めのテキストエディタってなんですか?
フリーでお願いします・・・

総合環境はいらないです・・・・
448デフォルトの名無しさん:2008/01/30(水) 22:53:39
>>447
メモ帳 or vi
449デフォルトの名無しさん:2008/01/30(水) 22:54:27
>>445
大きさ指定したら実行できました!でも無限ループするようになってしまいました。
ちょっと急用ができたため後で自力で直そうと思います。
ありがとうございました。
450デフォルトの名無しさん:2008/01/30(水) 22:55:49
>>448
検索したら

http://www.forest.impress.co.jp/lib/offc/document/txteditor/

のサイトがでてきたんですがK2Editorとかはだめなんですかね?
451デフォルトの名無しさん:2008/01/30(水) 23:00:38
>>447
emacs サクラエディタ 秀丸エディタ
452デフォルトの名無しさん:2008/01/30(水) 23:04:58
emacsはキーバインドに慣れたら快適
453デフォルトの名無しさん:2008/01/30(水) 23:32:43
サクラに一票かなぁ。
それかvim
454デフォルトの名無しさん:2008/01/30(水) 23:43:25
CPadが便利だがあれは統合環境になるのかな?
455デフォルトの名無しさん:2008/01/31(木) 00:50:46
↓ copy con foo.c の登場
456デフォルトの名無しさん:2008/01/31(木) 00:51:31
vim 中毒
457デフォルトの名無しさん:2008/01/31(木) 00:56:37
ウインドウを表示させて、その中に入力できる場所を作りたいのですが
どうすれば出来ますか
458デフォルトの名無しさん:2008/01/31(木) 00:57:10
環境も言わずに
459デフォルトの名無しさん:2008/01/31(木) 01:01:19
>>457
まずVRAMとかフレームバッファとか言われているメモリへのアクセス方法をぐぐってみるのはどうだろうか?
460デフォルトの名無しさん:2008/01/31(木) 01:03:53
自前でコントロール描画っすか
461デフォルトの名無しさん:2008/01/31(木) 15:43:59
scanfで入力待ちしている所に、別スレッドから入力させれないだろうか?

void func1()
{
char buff[16];
scanf_s("%s", buff, sizeof(buff)); // ←こいつを
}

// func1とは別スレッドで実行
void func_2()
{
// ここから終了させたい
}
462デフォルトの名無しさん:2008/01/31(木) 17:40:28
stdinを閉じてみるとか
463デフォルトの名無しさん:2008/01/31(木) 17:46:00
WinならSendMessageで無理やり出来るかもな
464デフォルトの名無しさん:2008/01/31(木) 20:40:07
「8名分の氏名、学籍番号、身長の入力を構造体の配列を利用して行い、それらのデータをクイックソートし
身長の低い順に氏名、学籍番号、身長を画面に出力するプログラムを作成せよ」という問題がでました。
まず、クイックソートのプログラムとしては

#include <stdio.h>
void quick_sort(int sort_data[], int start_index, int end_index )
{
int ascending_index = start_index;
int descending_index = end_index;
int temp_data;
int pivot_value = sort_data[start_index + (end_index - start_index )/2 ];
printf("quicksort %d - %d ",start_index,end_index);
printf("pivot_value %d\n",pivot_value);
do{
while (sort_data[ascending_index] < pivot_value)
ascending_index++;
while (sort_data[descending_index] > pivot_value)
descending_index--;
if (ascending_index > descending_index)
break;
temp_data = sort_data[ascending_index];
sort_data[ascending_index] = sort_data[descending_index];
sort_data[descending_index] = temp_data;
} while ( ++ascending_index <= --descending_index );
if (descending_index > start_index )
quick_sort(sort_data, start_index, descending_index );
if(ascending_index < end_index)
quick_sort(sort_data, ascending_index, end_index );
return;
}

という感じになりました。
465デフォルトの名無しさん:2008/01/31(木) 20:44:30
すみません、>>464の続きです。次に、構造体の利用の方が、
#include <stdio.h>
#define NAME_MAX 20
struct student_data{
int number ;
char name[NAME_MAX+1];
double height;
};
int main (void)
{
#define STUDENT_DATA_MAX 5
struct student_data input_data[STUDENT_DATA_MAX];
struct student_data * data_p;
int input_count;
for (input_count=0; input_count < STUDENT_DATA_MAX; input_count +=1){
printf("Student number->");
scanf("%d",&input_data[input_count].number);
printf("Name->");
scanf("%s",input_data[input_count].name);
printf("Height->");
scanf("%lf",&input_data[input_count].height);
}
for (input_count=0,data_p = input_data;
input_count < STUDENT_DATA_MAX;
input_count +=1, data_p ++){
printf("%d ",data_p->number);
printf("%s ",data_p->name);
printf("%lf\n ",data_p->height);
}
return 0;
}
までは自分でやってみたのですが、この2つを組み合わせる方法が分りません。どなたか教えていただけませんか?
466デフォルトの名無しさん:2008/01/31(木) 22:15:46
関数プロトタイプ書いて、main から呼べばいい
467デフォルトの名無しさん:2008/01/31(木) 23:16:19
void quick_sort(int sort_data[], int start_index, int end_index )
{

}
int main (void)
{

}
の順に並べればよろし
468デフォルトの名無しさん:2008/01/31(木) 23:34:57
void型の関数って最後returnしたほうがいいの?
469デフォルトの名無しさん:2008/01/31(木) 23:35:44
返すものが無いからvoidなのでは?
470デフォルトの名無しさん:2008/01/31(木) 23:41:20
文法上はする必要は無い。
ここで処理を終了しますって意味で明示的にreturn;するのはあり。
471デフォルトの名無しさん:2008/01/31(木) 23:43:32
return void; は C++から出来るんだっけ
472デフォルトの名無しさん:2008/01/31(木) 23:47:57
できないだろ
できたらテンプレート周りが楽になりそうだけど
473デフォルトの名無しさん:2008/01/31(木) 23:49:05
void foo() { }
void bar() { return foo(); }

は gcc だと警告吐かれた。
もちろん g++ だと大丈夫だった。
474デフォルトの名無しさん:2008/01/31(木) 23:50:08
>>472
VC6 あたりはできないけど、規格上大丈夫になってるよ。
多分、そのテンプレート周りを考慮しての決定なんだろうと思ってる。
475デフォルトの名無しさん:2008/02/01(金) 03:54:41
Java厨です。
POSIX環境でのマルチスレッドプログラムについて教えてください。

POSIXスレッドを使ったマルチスレッドプログラムで、
特定のスレッドのみ指定時間Sleepさせる方法はありますか?
476デフォルトの名無しさん:2008/02/01(金) 04:13:48
普通に別スレッドでsleep使ったら的な
477デフォルトの名無しさん:2008/02/02(土) 14:34:28
ファイルの読み取りで

12 34 56
34 56 78

みたいなのはfscanf(fp,"%d %d %d\n",x,y,z);
でいけるのはわかったのですが


12,34,56,
67,89,10,

みたいなのは、どうやって読み込むのでしょうか

また、ファイルによってスペースだったりカンマだったり
列が3列だったり5列だったり…とあって
どうやって条件分岐させていくのか検討がつきません
478デフォルトの名無しさん:2008/02/02(土) 14:39:48
1行ずつ読んで、自分で解析すれば。
479デフォルトの名無しさん:2008/02/02(土) 15:38:14
>>478
そのやり方を教えて下しあ><
480デフォルトの名無しさん:2008/02/02(土) 15:50:11
すみません、教えてください。

printf("古いファイル名を入力\n");
gets(oldname);
printf("名前1を入力\n");
gets(nam1);
printf("名前2を入力\n");
gets(nam2);
sprintf(newname,"%s%s\n",nam1,nam2);

if (rename(oldname,newname) == 0;
  printf("%sを%sに変更しました\n",oldname,newname);

こんな感じでsprintfで格納した変数でリネームしたいのですが
上手くいきませんでした。良い方法ありましたら教えてください神様。
481デフォルトの名無しさん:2008/02/02(土) 15:52:22
>if (rename(oldname,newname) == 0;
なにこれ
482デフォルトの名無しさん:2008/02/02(土) 15:58:29
>>477
fscanf(fp,"%d,%d,%d\n",x,y,z);
483デフォルトの名無しさん:2008/02/02(土) 16:06:29
>>479
fgetsして、strspn等str*系関数を使う。
484デフォルトの名無しさん:2008/02/02(土) 16:53:38
strspnの動きがよく分からない
485デフォルトの名無しさん:2008/02/02(土) 16:58:39
この場合strcspnが適当かも知れんな。
486デフォルトの名無しさん:2008/02/02(土) 17:01:03
>>481
すみません、タイプミスでした。
if (rename(oldname,newname) == 0);

>>483
なるほど!アドバイスありがとうございます!
487デフォルトの名無しさん:2008/02/02(土) 17:03:32
>if (rename(oldname,newname) == 0);
なにこれ
488デフォルトの名無しさん:2008/02/02(土) 17:03:33
同じ人だったのか
489デフォルトの名無しさん:2008/02/02(土) 17:53:31
490デフォルトの名無しさん:2008/02/02(土) 19:07:33
>>487
すみません、タイプミスでした。
if (rename(oldname,newname) == '\0');
491デフォルトの名無しさん:2008/02/02(土) 19:07:58
つりですか^^^;
492デフォルトの名無しさん:2008/02/02(土) 19:25:02
>if (rename(oldname,newname) == '\0');
なにこれ -> '\0'
493デフォルトの名無しさん:2008/02/02(土) 19:55:44
printfなどの関数の中身が見たいのですが、stdio.hを開いても中身らしき部分がありませんでした。
どこで見ることができるのでしょうか?
494デフォルトの名無しさん:2008/02/02(土) 19:58:37
www.gnu.org
495デフォルトの名無しさん:2008/02/02(土) 19:58:50
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src
496デフォルトの名無しさん:2008/02/02(土) 20:54:53
>>493
stdio.hにあるのは関数を使えるようにするための宣言だけ。
関数の実装はリンカがリンク時にくっつけるライブラリファイルの中にある。
コンパイラによってはソースが公開されてたりもする。
497デフォルトの名無しさん:2008/02/02(土) 21:05:55
>>492
すみません、タイプミスでした。
if (rename(oldname,newname) != EOF);
498デフォルトの名無しさん:2008/02/02(土) 22:29:56
>if (rename(oldname,newname) != EOF);
なにこれ
499デフォルトの名無しさん:2008/02/02(土) 22:35:05
スレ違い失礼します。
雑談スレに書いたのですがレスがもらえなかったので
良かったら評価のほうしていただけますか?

http://toku.xdisc.net/cgi/up2/frew.html
のxs5050のファイル

友人の組んだC言語のプログラムなのですが本職の人から見たら
どの程度なのでしょう?
(プログラマーとして就職できる、中学生レベル等)

友人は2ちゃん嫌いのため代理しました。許可は取ってます。
ウイルスなどはありません。

よろしくお願いします


説明

====================

Zバッファ法でつくりました。
ポリゴンと視線の交点の座標をテクスチャ座標に
変換して。テクスチャマッピングしてます。


C言語で組みました。
DDraw,D3Dは使っていません。

====================
500デフォルトの名無しさん:2008/02/02(土) 22:39:20
C言語スレだから、ソースじゃないとなんとも言えない。
501デフォルトの名無しさん:2008/02/02(土) 22:50:05
動けばいいってもんじゃないぜ。
書き方や考え方知るにもソースないんじゃ何も言いようが無い
502デフォルトの名無しさん:2008/02/02(土) 22:58:55
> (プログラマーとして就職できる、中学生レベル等) 

コードを書く力ってことなら、趣味の学生に負けてる職業プログラマっていっぱいいるしなぁ。
っていうか、趣味っていえるくらいプログラミングに時間をつかってて、それを数年も続けているなら、
職業プログラマの上位30〜50%以上には入ってるんじゃないの?
503デフォルトの名無しさん:2008/02/02(土) 23:14:28
俺の事か
504499:2008/02/02(土) 23:16:52
>>500-502

レスありがとうございます。連絡とってソースうpします。
スレ汚しすいません。
505デフォルトの名無しさん:2008/02/02(土) 23:22:09
ここで判定してもらって何になるのかなぁ。
506デフォルトの名無しさん:2008/02/02(土) 23:25:15
callocでchar分を256個確保し、文字列を入れた後で
reallocでchar分を512個分にし、文字列を追加したいんですが、
どうすればできますかね?
507デフォルトの名無しさん:2008/02/02(土) 23:27:39
>>506
ふつーstrcat() だけど、そういう意味じゃなくて?
508デフォルトの名無しさん:2008/02/02(土) 23:38:01
>>504
あまり大き過ぎても答えられないかもしれないし、ほどほどに
509デフォルトの名無しさん:2008/02/02(土) 23:39:38
>>506
char* p = (char*)calloc(256,sizeof(char));
(文字列を入れる処理)
p = (char*)realloc((void*)p,512);
(文字列を追加する処理)
510デフォルトの名無しさん:2008/02/02(土) 23:48:53
レスありがとうございます。
callocとreallocはそれぞれ別々のポインタを使って処理したいんですが、どうすればいいですかね?
511デフォルトの名無しさん:2008/02/02(土) 23:51:36
実体も別々なのか?
なら、realloc意味なくね?
512デフォルトの名無しさん:2008/02/02(土) 23:53:22
>>511
reallocに渡すポインタとリターン値を受けるポインタを別々にしたいってことかもよ。
513デフォルトの名無しさん:2008/02/02(土) 23:54:22
追加された部分の先頭ポインタが欲しいって意味なのかなと思ってみた
514デフォルトの名無しさん:2008/02/02(土) 23:56:51
char* pc = (char*)calloc(256,sizeof(char));
(文字列を入れる処理)
char *pr = ((char*)realloc((void*)pc,512))+256;
(文字列を追加する処理)

free((void*)pc);
515デフォルトの名無しさん:2008/02/03(日) 00:34:14
char *buf = (char *)calloc(256,sizeof(char));
if(buf == NULL)
{
puts("確保失敗")
}else{
buf = "文字列";
char *tmp = (char *)realloc(buf,512);
if(tmp == NULL)
{
puts("領域の変更に失敗")
}else{
buf = tmp;
文字列追加処理
}
}
free(buf);
return 0;
}
516デフォルトの名無しさん:2008/02/03(日) 00:35:34
>>515がソースです。
517デフォルトの名無しさん:2008/02/03(日) 00:37:15
>>515
> buf = "文字列"; 

この行は

strcpy(buf, "文字列");

だよ。
518デフォルトの名無しさん:2008/02/03(日) 00:38:06
> 文字列追加処理 

ここは、

strcat(buf, "追加文字列");

だよ。
519デフォルトの名無しさん:2008/02/03(日) 00:46:13
ありがとうございます!!!!!!!
520499:2008/02/03(日) 02:25:54
http://toku.xdisc.net/cgi/up2/frew.html
のxs5090のファイルです<(_ _)>

>>505
友人がニートなのですが就職できるか
知りたいと思って聞いてみたいと思いました。
(そのことでよく喧嘩になるので客観的な評価が欲しいと)

>>508
一部でも結構です。すいませんです。
521デフォルトの名無しさん:2008/02/03(日) 02:31:30
まず思ったのが他人が読む事をあまり考えてないようだという事
コメントが少なすぎて解読に手間が掛かる
522デフォルトの名無しさん:2008/02/03(日) 02:34:34
関数でかすぎ
523デフォルトの名無しさん:2008/02/03(日) 02:36:55
ニートは時間有り余ってるからから関数でかくてもいいんだよ!
524デフォルトの名無しさん:2008/02/03(日) 02:39:51
>>520
就職できるかどうかっていう観点でレスすると

プログラムの書き方はかなり問題があるがこれだけできるなら
本人さえやる気出せば就職できるところは見つかるだろう(年齢によるけど

中小の会社なら実力は未経験に近くても人柄が気に入られればとってくれるところは多いぞ
525499:2008/02/03(日) 02:44:45
>>521-523

専門用語は私には、よく分からないのでコピペして
伝えておきます。
ありがとうございます。


>>524

そうですか。友人は口は達者なんですけど
一応、やればできるってことですね。
ありがとうございました。



526デフォルトの名無しさん:2008/02/03(日) 02:49:51
もっと関数を使って変数名をわかりやすくすれば仕事できるんじゃないかな?
このtxt分で何時間かかったかにもよるけど。
527デフォルトの名無しさん:2008/02/03(日) 02:51:08
>>525
一応補足しておくと就職試験やらで520のソースを出されたらさすがに取ってくれる会社はほぼないと思います。
仕事にしたいなら他の人もいってるように関数分けるとかソースわけるとかコメント増やすとか
プログラムの書き方もう少しきちんとしたほうがいいです。

要はやる気出して勉強すれば就職するだけなら無理ではないよってことで。
528デフォルトの名無しさん:2008/02/03(日) 03:00:11
そろそろ古くなって時代にそぐわない部分も出てきているが、
とりあえずそれを踏まえつつここを読んでおくように言っておくといいよ。
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/
529デフォルトの名無しさん:2008/02/03(日) 03:17:29
どういう仕事につきたいのか知らないけど、
新卒じゃないならC++くらい扱えたほうがいいなぁ
530デフォルトの名無しさん:2008/02/03(日) 03:27:34
人の目を見て会話できれば25歳位までなら未経験でも雇われる
531デフォルトの名無しさん:2008/02/03(日) 03:30:32
>>497
rename() が失敗したときは非零の値を返すのだから(K&R2)
if (rename(oldname, newname) == 0)
でいいと思います。
それから、これは明らかに「タイプミス」ではないですよ。用語に注意。 
532デフォルトの名無しさん:2008/02/03(日) 04:49:33
>>520
まだまだ…(中略)…まだまだ改善の余地がある

1.コピペしすぎ
2.グローバル変数多すぎ
3.命名規則が不明
4.即値使いすぎ
5.構造体にメンバ多すぎ

と知ったかぶってレスしてみる
533デフォルトの名無しさん:2008/02/03(日) 04:54:14
Cプログラミング診断室にとてもありそうなコードだなw 
534デフォルトの名無しさん:2008/02/03(日) 04:54:42
>>528 って、先に指摘されてた
535デフォルトの名無しさん:2008/02/03(日) 08:50:21
>>498
すみません、タイプミスでした。

#include<stdio.h>

int main(void)
{
printf("古いファイル名を入力\n");
gets(oldname);
printf("名前1を入力\n");
gets(nam1);
printf("名前2を入力\n");
gets(nam2);
sprintf(newname,"%s%s\n",nam1,nam2);

while (rename(oldname,newname) != 0)
{
  printf("%sを%sに変更しました\n",oldname,newname);
}

return 0;
}
536デフォルトの名無しさん:2008/02/03(日) 08:57:00
お前等インデントぐらい入れようよ
見づらいよ
537デフォルトの名無しさん:2008/02/03(日) 10:38:27
複数の引数を持つ関数形式マクロを定義して、
さらにその複数の引数の組もマクロで定義したいんですが、上手く出来ません。
例えば次のようなコードです。

#include <stdio.h>

#define KAKE(X,Y) (X*Y)
#define TWO_ARGS "4,5"

void main()
{
  int ret;

  ret = KAKE(4,5); // これはエラーとならない
  ret = KAKE(TWO_ARGS); // コンパイルエラー

  printf("%d\n", ret); // 20と表示される事を期待している
}
538537:2008/02/03(日) 10:39:00
自分の環境では、コンパイルエラーのメッセージは
「マクロ 'KAKE' に指定された実引数の数が少なすぎます。」
と出ています。

エラーが発生している文『ret = KAKE(TWO_ARGS);』が
マクロにより『ret = KAKE(4,5);』と展開される事を期待したのですが
『4,5』が一つの文字列リテラルとして扱われているような気がします。

ちなみに
『#define TWO_ARGS "4,5"』の行を
『#define TWO_ARGS (4,5)』としても
『#define TWO_ARGS 4,5』としても上手くいきませんでした。

何か良い方法はないでしょうか?
539デフォルトの名無しさん:2008/02/03(日) 11:12:57
#define KAKE_TWO_ARGS KAKE(4, 5)

でいいと思うが
540デフォルトの名無しさん:2008/02/03(日) 11:14:52
一応これで通りはする。

#include <stdio.h>

#define KAKE(x, y) ((x)*(y))
#define KAKE_(x) KAKE(x)
#define TWO_ARGS 4, 5

int main() {
int ret;

ret = KAKE(4, 5);
ret = KAKE_(TWO_ARGS);

printf("%d\n", ret);
return 0;
}
541デフォルトの名無しさん:2008/02/03(日) 11:30:47
>>540
537じゃないけど、コンパイラ教えて。
VC2005だと通らない
542デフォルトの名無しさん:2008/02/03(日) 11:50:15
gcc
543デフォルトの名無しさん:2008/02/03(日) 11:52:47
-ansi -pedantic -Wall で通るから
規格違反ではないと思う。多分。
544デフォルトの名無しさん:2008/02/03(日) 11:58:32
>>536
勝手にインデントが消えちゃうんだよ。
インデントを残す方法を教えてケロ
545デフォルトの名無しさん:2008/02/03(日) 11:59:27
無理。
スペースで代用するしかない
546デフォルトの名無しさん:2008/02/03(日) 12:03:29
>>536
専ブラ入れてポップアップさせれば
専ブラによってはインデントされて見える。

例えば俺の使ってる V2C は、
レス番号を打ち込むか、レス番号に相当する数値を選択してクリックすると、
レスアンカーがなくてもポップアップしてくれる。
547デフォルトの名無しさん:2008/02/03(日) 12:12:36
>>545
もしかして全角スペースか?
548デフォルトの名無しさん:2008/02/03(日) 12:16:00
全角スペースか &nbsp; 使えば
ブラウザ上でインデントを付ける事は可能。
549デフォルトの名無しさん:2008/02/03(日) 12:26:49
インデント付いたかな
 あ
 あ

550デフォルトの名無しさん:2008/02/03(日) 12:27:18
セミコロンつけろや
551デフォルトの名無しさん:2008/02/03(日) 12:51:00
よし、もういちど
 こっちはあんどえぬびいせぴいせみころん
 こっちは全角スペース
552デフォルトの名無しさん:2008/02/03(日) 12:54:58
non-breaking space の略な。
基本的には半角スペースが表示されるが、
専ブラでコピペすると nbsp が保存されることがある罠。
553デフォルトの名無しさん:2008/02/03(日) 14:35:01
別にインデント腐ってもコンパイルとおるからどうでもいいだろう
Pythonじゃあるまいし
554デフォルトの名無しさん:2008/02/03(日) 14:39:40
>別にインデント腐ってもコンパイルとおるからどうでもいいだろう
こういう事平気で言えるの人の書くプログラムは読みたくないな
555デフォルトの名無しさん:2008/02/03(日) 14:49:25
よーく考えよう。インデントは大事だよ。

インデントは計画的に。
556デフォルトの名無しさん:2008/02/03(日) 14:59:29
まともなエディタならキー操作一つでフォーマットできるだろ
557デフォルトの名無しさん:2008/02/03(日) 15:08:57
わざわざスペース置き換えたりしてまでインデントにこだわりたくないな
2chなんだし見やすくしたい人はやるし、どーでもいい人は別にそのままでいいと思う
558デフォルトの名無しさん:2008/02/03(日) 15:12:01
教えてやる側はともかく、教えてもらう側はインデントありで貼り付けたほうが、答えがもらえる可能性がたかくなるな。
559デフォルトの名無しさん:2008/02/03(日) 15:13:38
置換が面倒だから全角スペースは微妙だな。
560デフォルトの名無しさん:2008/02/03(日) 15:13:51
ソースをそのままうpろだにあげるのが一番いい気がする。
561デフォルトの名無しさん:2008/02/03(日) 17:41:01
それはわざわざ見に行くのがめんどい
562499:2008/02/03(日) 18:03:05
>>526-530 532-534

まとめてですいませんが
ありがとう御座いました。m(_ _)m


563デフォルトの名無しさん:2008/02/03(日) 18:18:38
まとめるな
失礼な奴だ
564デフォルトの名無しさん:2008/02/03(日) 18:24:15
専ブラによっては1クリックで開く。専ブラとIEとを平行してみれるから楽です。宿題を解くときなんかは。
565デフォルトの名無しさん:2008/02/03(日) 20:23:21
文字数を求めるのに、
for文を使い、\0まで達するまでiをインクリメントし数えるのと、
strlenを使うのとでは、どちらのほうが早いですか?
566デフォルトの名無しさん:2008/02/03(日) 20:30:20
strlenを使うほうが、プログラム作成は早い。
567デフォルトの名無しさん:2008/02/03(日) 20:32:02
strlenでいいだろ。
CPUにあわせて最適化してあるかもしれないし
568デフォルトの名無しさん:2008/02/03(日) 20:41:48
strlen()のソースでも眺めてみたらいいんじゃないかと。
569デフォルトの名無しさん:2008/02/03(日) 20:52:30
早いかどうかだと strlen を使った方が早い。
速いかどうかだと実測あるのみ。
570デフォルトの名無しさん:2008/02/03(日) 20:59:15
ここでそんなこと訊いてるレベルなら、strlen()使っとけ。
571デフォルトの名無しさん:2008/02/03(日) 20:59:52
同じ文字列の長さを調べるってのを何度もループさせてかかる時間調べたらいいよ。
572デフォルトの名無しさん:2008/02/03(日) 21:08:57
コンパイル時パラメータを-Wにするとどうなるんだ?
APIの時に、やれって言われたんだが。
意味が分からん。他の種類とかも教えてケロ
573デフォルトの名無しさん:2008/02/03(日) 21:10:27
>>572
コンパイラのマニュアル見れよ。
574デフォルトの名無しさん:2008/02/03(日) 21:12:20
ランタイムライブラリなんかいろいろ凝った作りしてるよね。
memcpyなんかわざわざロングでコピーして端数を調整したりとか
575デフォルトの名無しさん:2008/02/03(日) 21:18:12
>>573
のってなかったお。簡単な説明しかみつからないお。
576デフォルトの名無しさん:2008/02/03(日) 21:21:53
>>575
コンパイラの名前を書かないとわからんよ。
警告のレベルだと思うけど。
577デフォルトの名無しさん:2008/02/03(日) 21:26:30
>>576
cpad for borland c++compiler
578デフォルトの名無しさん:2008/02/03(日) 21:29:12
cpadはコンパイラじゃn(ry
579デフォルトの名無しさん:2008/02/03(日) 21:30:47
>>578
Borland C++ Compilerですか?
580499:2008/02/03(日) 22:00:23
>>563

すいません。長いプログラム読んでいただいたのに
失礼でした。すべてにレスしたいのですが
私がすると、とんちんかんなレスになってしまいそうなので…( ゜_゜;)

友人にはコピペして送ります。

すいませんでした。
スレ違い失礼しました。
581デフォルトの名無しさん:2008/02/03(日) 22:07:10
BCCの-WならWin32のGUIアプリ作成だろ。
起動時にDOS窓が出なくなる。

てかコンパイラのリファレンスに載ってねぇわけないじゃん。
見てるの間違えてるか、見方分かんないか、見て無いか、どれかじゃね?
582デフォルトの名無しさん:2008/02/03(日) 22:19:06
>>581
見てないだな。
cpadの説明書睨んでたんだぜ
583sage:2008/02/03(日) 22:52:27
>>540
>>537-538です。遅くなりましたが助言ありがとうございました。
今、動かせる環境がないので、明日試してみます。
584デフォルトの名無しさん:2008/02/04(月) 22:12:44
C言語初心者です。voidポインタ関連で質問です。
以下プログラムの抜粋です。

m_sort(void* base,int n_elem,int size,int(*empare)(void*,void*))
{
void *x,*w;
x=base+(n_elem-1)/2;

ここでbase+(n_elem-1)/2はvoidポインタなのでxに代入すると
エラーが出てしまうのですが、関数の引数の
 size=sizeof(int,char等)
と設定し、このsizeを使ってなんとか解決できませんか?
よろしくお願いします。
585デフォルトの名無しさん:2008/02/04(月) 22:19:49
baseをchar*にキャスト
586584:2008/02/04(月) 22:22:44
baseをintポインタにも対応させたいのですが、
無理でしょうか?
587デフォルトの名無しさん:2008/02/04(月) 22:24:23
>>586
要するに qsort みたいな関数を作りたいということ?
588584:2008/02/04(月) 22:27:31
>>587
その通りで、汎用関数を作りたいのです。
589デフォルトの名無しさん:2008/02/04(月) 22:33:43
>>588
>>585 のいう通りにすればおk
x=(char*)base+(n_elem-1)/2*size;
590584:2008/02/04(月) 22:50:15
>>589
え・・・と・・・
sizeを掛けるとその型になるんですか?
x=(char*)base+(n_elem-1)/2*size;
ってたぶん
x=(char*)base+((n_elem-1)/2)*size;
ですよね?
591デフォルトの名無しさん:2008/02/04(月) 22:53:26
(n_elem >= 2 && size > 0)

x = (char *)base + size * (n_elem - 1);
592584:2008/02/04(月) 22:58:05
>>591
やっと意味が分かりました・・・
charポインタ扱いにして、サイズ分だけずらしていけばいいんですね!

どうもありがとうございました・・・
593デフォルトの名無しさん:2008/02/05(火) 00:03:04
>>429
>>430
空白の部分に全角入ってるからエラーが出てるってことですか?
594デフォルトの名無しさん:2008/02/05(火) 01:29:54
>>593
空白には全角スペース、半角スペースがある。
一般的にコンパイラは全角文字を受け付けない。もちろんリテラルは別。
エディタの設定等で全角スペースに色をつけることもできる。
全置換で全角スペースを半角スペースに変換するのでもいい。
595デフォルトの名無しさん:2008/02/05(火) 09:25:56
C言語2級受けた人いますかね?

問題・解答等を教えて欲しいのですが?

いないかぁ..
596デフォルトの名無しさん:2008/02/05(火) 09:39:44
過去問なら本屋に買いに行けば?売ってるかどうか知らんけど
597デフォルトの名無しさん:2008/02/05(火) 13:51:18
int num[256];

みたいな配列を同じ数字(例えば0)で初期化したいのですが、

for(i=0;i<256;i++)
{
num[i]=0;
}

みたいに一個づつ入れるしかないでしょうか?
598デフォルトの名無しさん:2008/02/05(火) 14:06:34
>>597
配列宣言時なら、
int num[256] = {0,}で0にはできる。
そうでないなら、地道に入れるしかないんじゃないかな。
# 勿論、C++のstd::fill()のような関数に仕立てておくのはあり。
599デフォルトの名無しさん:2008/02/05(火) 14:22:08
ありがとうございます。
その形でいくつか試してみたところ、例えば

int num[256] = {1,};

だと一個目の要素だけが1になって、残りは全部0になったのですが、これは、
「初期化すると、{}内で個数が足りてない要素は全部0で初期化される」
という解釈で良いのでしょうか?
600デフォルトの名無しさん:2008/02/05(火) 14:39:24
>>599
いいよ。
そういう時は、アセンブラで出力してみることと規格を探してみることの両方やるといい。
601デフォルトの名無しさん:2008/02/05(火) 14:41:49
ありがとうございました。
はじめたばかりで今のところアセンブラとかさっぱりですが、心の隅にとどめておきます。
602598:2008/02/05(火) 14:47:23
だから、「0にはできる」と書いたのにw

0以外にもいろいろ使う積もりなら、こんな関数でも作っておいたら?
void fillInt(int * foo, unsigned size, int val) {for (unsigned ic = 0; ic < size; ++ic) foo[ic] = val;}
603デフォルトの名無しさん:2008/02/05(火) 14:50:22
連続した領域に同じデータ、ならばmemsetもつかえる。
604デフォルトの名無しさん:2008/02/05(火) 14:51:04
バイトに限るけどね
605313:2008/02/05(火) 18:17:03
C言語を勉強しようか迷ってます。
C言語で何をするかが、分りません。
皆さんは、C言語で何をしてるんですか?
606デフォルトの名無しさん:2008/02/05(火) 18:20:41
これはひどい。
607デフォルトの名無しさん:2008/02/05(火) 18:20:44
>>605おまえ日本語で何してんの?
608605:2008/02/05(火) 18:34:02
学校ではjavaを勉強してます。
冬休みで、暇なのでとりあえず違う言語の勉強をしようと思ってます。
いろいろ調べて、「C言語は基本」っていろんなホームページで書いてありました。
でも、C言語はGUIのアプリケーションを作れないし、ネット環境でも使わないと書いてありました。
609605:2008/02/05(火) 18:34:57
Cげんごでなにをすればいいのかわかりませn
610デフォルトの名無しさん:2008/02/05(火) 18:39:01
別に無理にやらなくてもいいよ。
611デフォルトの名無しさん:2008/02/05(火) 19:10:09
入門書にはほとんどのプログラムはCで出来ているって書いてたよ
612デフォルトの名無しさん:2008/02/05(火) 19:45:40
ベクターのフリーソフトで

オススメのコンパイラないですか?
613デフォルトの名無しさん:2008/02/05(火) 19:51:57
>>612
なぜベクター限定・・・・・・
614デフォルトの名無しさん:2008/02/05(火) 19:57:32
>>613
使いなれてる?サイトだからです。

だから
なるべくベクターでお願いします
615デフォルトの名無しさん:2008/02/05(火) 20:20:11
コンパイラと統合環境、エディタ混同してると見た
616デフォルトの名無しさん:2008/02/05(火) 20:24:22
そもそもベクターにコンパイラってあんの?
617デフォルトの名無しさん:2008/02/05(火) 20:26:56
LSI C-86 v3.30c 試食版程度なあるがオススメはしない。
そもそも、そんな甘えを言ってる時点で
プログラムなんてできるわけがない。
618デフォルトの名無しさん:2008/02/05(火) 20:52:28
#include <stdio.h>
main () {
char *s;
scanf("%s",s);
return0;
}

上記のようなプログラムを作成し、実行しました。
すると、
入力が「111111111111111」のときは正常終了したのですが、
入力が「1111111111111111111111111111」のときはセグメント例外がおきてしまいました。

ここで質問です。なぜ二度目の実行でセグメント例外が起きてしまったのでしょうか?
自分は、「ポインタ宣言時に確保したメモリの範囲外に書き込もうとしため」と考えたのですが、そもそも一度目の実行で1byte(char一個分)以上の入力ができてしまっていますよね。この時点で、理由がわかりません。
よろしくお願いします。
619デフォルトの名無しさん:2008/02/05(火) 20:57:36
>>618
char *s;
に1byteだろうが突っ込むこと自体が間違い
短いときうまくいったのはたまたま指している先が書き込めるとこだったというだけ
620デフォルトの名無しさん:2008/02/05(火) 21:21:41
>>618
正常終了したのはたまたま運が良かっただけ。
そのプログラムには文字列を格納する領域が1bitたりとも確保されていない。
621デフォルトの名無しさん:2008/02/05(火) 22:14:45
gccを使っているのですが判らない点があるので教えて下さい。
ヘッダーファイルに書いている#defineの値をコンパイル時のオプションで
変更できると聞いたのですがどう指定すればいいのでしょうか?
622デフォルトの名無しさん:2008/02/05(火) 22:22:17
>>621
BCCだけど、同じオプションでいけないかな?
http://www.geocities.jp/bleis_tift/cpp/option.html#define

コンパイラマニュアルを探した方が早いと思うよ。
623デフォルトの名無しさん:2008/02/05(火) 23:01:24
>>608
Cは基本だなんてとんでもない。
プロが使う、使い方を間違えると大怪我をする、切れ味の鋭い包丁みたいなもんだ。
食事用のナイフならpythonとかjavaとかVBとかをどうぞ。
624デフォルトの名無しさん:2008/02/05(火) 23:18:34

お前はそうなんだろうな
625デフォルトの名無しさん:2008/02/05(火) 23:18:50
fopenでファイルを作成したいのですが、作成したファイルの
改行コードがCF+LFになってしまいます。改行コードをLF
にすることは可能でしょうか。

ちなみにファイルに情報を書き込む際の
改行コードは'\n'を使用しています。
626デフォルトの名無しさん:2008/02/05(火) 23:19:51
>>625
バイナリモードでfopen()
627デフォルトの名無しさん:2008/02/05(火) 23:26:29
>>626

えっそんな簡単な方法で良いんですか?
628デフォルトの名無しさん:2008/02/05(火) 23:27:04
つうかモードの違いはそこ位しかないだろ
629デフォルトの名無しさん:2008/02/05(火) 23:29:58
>>627
念のためにいっとくけど改行コードの扱い方が変わるからな
(そんな変わらんけど。単に'\n’だと思ってればよかったあの頃とは違うだけで)
ただ開き方かえるだけじゃないからな
630デフォルトの名無しさん:2008/02/05(火) 23:39:50
ってことは作成したファイルも読み込む時も気をつけないといけませんね。

"br"でfopenするのは当然なんでしょうけど。

どうもありがとうございました。
631デフォルトの名無しさん:2008/02/06(水) 00:05:59
すいません、お聞きしたいのですが

*p++ = a * b;

この計算式は どういう順序になるのでしょうか?

a×bの値がpに入り pのアドレスが++ ?

632デフォルトの名無しさん:2008/02/06(水) 00:09:34
そのとおり
633デフォルトの名無しさん:2008/02/06(水) 00:26:18
>>630
まぁ、"r"で入力しておいて"wb"で出力ってのもありだけどね。
634デフォルトの名無しさん:2008/02/06(水) 01:36:04
>>631
それであってるのかぁ..

あと

(*p)++;
は pの値が++されるだけですか?
635デフォルトの名無しさん:2008/02/06(水) 01:42:04
いいえ、*pがインクリメントされます。
636デフォルトの名無しさん:2008/02/06(水) 01:58:03
>>624
いや、だれだってそうだろう。Cが簡単とか基本とか誰がデマながしとんのや?
637デフォルトの名無しさん:2008/02/06(水) 03:05:16
基本かどうかは知らんが簡単なのは間違いないだろ。
決してお手軽ではないけどね。
638デフォルトの名無しさん:2008/02/06(水) 06:49:28
大間違いだよアホ
639デフォルトの名無しさん:2008/02/06(水) 06:57:55
いくらここが入門者向けだからって、「Cが簡単じゃない」なんて戯言誰が真に受けると思うんだ?
まるで、「英語は簡単じゃない」って言うようなもんだぞ。
640デフォルトの名無しさん:2008/02/06(水) 07:05:04
>>624
>>637
>>639
早く寝ろよニート
641デフォルトの名無しさん:2008/02/06(水) 07:20:10
決め付けちゃって(・∀・)クスクス
642デフォルトの名無しさん:2008/02/06(水) 07:22:56
ガキを相手に大人気ない
643デフォルトの名無しさん:2008/02/06(水) 07:58:49
Cは間口は広いだろうな。
とりあえずはじめるのに参考になるサイトは山ほどあるから。
644デフォルトの名無しさん:2008/02/06(水) 08:50:58
>>635さん

アドレスが++されるんでしょうか?
645デフォルトの名無しさん:2008/02/06(水) 08:56:00
>>644
*pがアドレスならば、そうなります。
つまり、インクリメントされるのはpではありません。
646デフォルトの名無しさん:2008/02/06(水) 14:36:04
ファイル(dp2.txt)の内容-----
maximize
14
plum 4 4500
apple 5 5700
orange 2 2250
strawberry 1 1100
melon 6 6700
------------------------

fscanf(fp,"%s%d",i,j);
while(fscanf(fp,"%s%d%d",x[i].name,&(x[i].size),&(x[i].price)) ==3)
i++;

dp2.txtというファイルの中身を読みだして、引数に代入したいのですが
上のプログラムの場合、2回目のfscanfで読みだすのはplumからでしょうか?それともファイルの始めにもどってしまうのでしょうか?
よろしくお願いします。
647デフォルトの名無しさん:2008/02/06(水) 14:48:39
fpの位置は読み込んだ分だけ進みます。
648デフォルトの名無しさん:2008/02/06(水) 14:48:51
>>646
plumから
実際に試せばわかりそうなものだが
649デフォルトの名無しさん:2008/02/06(水) 21:32:43
ちょっと質問です・・・。
今ソケットの勉強をしてるんですが同期非同期について小学生でもわかるような説明を誰かしてくれませんか?
ちょっとしたチャットアプリを作成しようと思ってるんです。

調べた結果、
同期:送信側と受信側が同じ時間をすごす=同期がとれてるといった言葉のとおり。
非同期:送信側は受信側の都合を考えずにデータを投げる、受信側はどんな状態だろうがそれを受け取り処理をして、できあがったら応答する。
だと思うんですけど、いまいち自分で何を言っているかわかってないんです('A`)
もっと分りやすく相手にも伝えられるようにするにはなんていえばいいんでしょうか・・・。
650デフォルトの名無しさん:2008/02/06(水) 21:35:38
スレちがい
651デフォルトの名無しさん:2008/02/06(水) 21:41:28
スマソ。いつもここ開いててプログラム関連の話だとばかり思ってたらソース一行もないね漏れ・・・。
652デフォルトの名無しさん:2008/02/06(水) 22:11:01
ちょっと詰まってしまったんですが、教えていただけませんか…

第6回 万年カレンダー(2)
キーボードから年と月を入力し、その月のカレンダーを表示する。

47 :ha:2008/02/06(水) 22:01:47
#include <stdio.h>
int is_bissextile(int year)
{
/*
閏年かどうか判定する関数
閏年なら1,そうでなければ0を返す
*/

int bis;


if((year % 400) == 0 || ((year % 4) == 0 && (year % 100) != 0)){
bis = 1;
}
else {
bis = 0;
}

土曜日の場合は,既に入っているので入れない
*/
if((first_dow + i)%7!=1) printf("\n");
}
653デフォルトの名無しさん:2008/02/06(水) 22:11:57
>>652
丸投げじゃねーかwwww
宿題スレいけw
654デフォルトの名無しさん:2008/02/06(水) 22:12:06
/* 下のような書き方も可能
bis = ( year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
*/

return bis;
}
main()
{
/*
2008年2月のカレンダーを表示する
2月1日が金曜日であることがわかっているものとする
(課題では,前回のプログラムを使って1日の曜日を計算する)
*/
int year = 2008;
int month = 2;
int first_dow = 5; /* 1日は金曜日 */
int i;

int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

if(is_bissextile(year)) { /* 閏年なら,2月を29日までにする */
days[1] = 29;
}
printf(" %d年%2d月\n", year, month);
printf("日 月 火 水 木 金 土\n");
655デフォルトの名無しさん:2008/02/06(水) 22:12:36
>>653
すいませんwww行ってきますwwwwww
656618:2008/02/06(水) 22:21:41
>>619-620さん
ありがとうございました。根本的に間違っていたようですね。
657デフォルトの名無しさん:2008/02/06(水) 22:25:26
>>594
なるほど、やってみます!
658デフォルトの名無しさん:2008/02/06(水) 22:54:20
二つ質問なのですが、
一つ目は、fgetsとgets関数の違いは簡単に言えば、文字数が指定できるか否かでしょうか?

二つ目は、もしfgets関数で最後NULL文字を考慮しないと、どうなるのでしょうか?
659デフォルトの名無しさん:2008/02/06(水) 22:59:57
>>658
改行文字の扱いが違う

null文字を考慮しないって?char配列より大きい文字列突っ込ませようとするってこと?
はみ出した先が書き込めたりしてうまく動くこともあるけどやっちゃだめ
660デフォルトの名無しさん:2008/02/06(水) 23:29:15
>>658
違いは、使っていいものと絶対使っちゃダメなもの。
661デフォルトの名無しさん:2008/02/06(水) 23:30:56
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/gets.3.html

バグ
gets() は絶対に使用してはならない。
前もってデータを知ることなしに gets() が何文字読むかを知ることはできず、
gets() がバッファの終わりを越えて書き込み続けるため、
gets() を使うのは極めて危険である。
これを利用してコンピュータのセキュリティが破られてきた。
代わりに fgets() を使うこと。
662658:2008/02/06(水) 23:40:22
皆さん、ありがとうございます

>>659->>660

>>改行文字の扱いが違う
>>違いは、使っていいものと絶対使っちゃダメなもの。
とは・・・・?考えてもピントきませんです。。。

>>661
はい、何だか難しいですが、要するにバッファオーバーフローですね。
663デフォルトの名無しさん:2008/02/06(水) 23:43:18
>>662
入力の最後のenter押して終わったときにその改行文字が格納されるかどうかです
664658:2008/02/06(水) 23:44:33
>>663
サンクスです、ってきり文字数が指定できるか、どうかだと思っていました。
665デフォルトの名無しさん:2008/02/07(木) 00:10:06
>>>>違いは、使っていいものと絶対使っちゃダメなもの。
>>とは・・・・?考えてもピントきませんです。。

>>661

getsを例にした入門書やサンプルがあるかも知れないけど、gets使う癖がつくこと自体が危険なので使わないこと。
666デフォルトの名無しさん:2008/02/07(木) 00:11:40
scanf( "%255s" ,str );
とかだとオーバーフロー防げるとかどこかのサイトで見たけど大丈夫なん?
667デフォルトの名無しさん:2008/02/07(木) 00:13:26
>>666
char str[256]に対してなら大丈夫です。
668デフォルトの名無しさん:2008/02/07(木) 00:17:28
でも %s と fgets の挙動はちゃうでよ
669デフォルトの名無しさん:2008/02/07(木) 00:17:39
んなるほど。
defineで例えばMAX 255にして
char str[MAX]だとした場合
scanf( "%MAXs" ,str );
はもちろん駄目だよね・・・となると汎用性が狭まるなぁ
670デフォルトの名無しさん:2008/02/07(木) 00:22:39
なんでやねん
"%255s"という文字列を作ればいいだけじゃないか
671デフォルトの名無しさん:2008/02/07(木) 00:23:30
scanf系は使うなって言う人が意外に少ないな。
仕様があいまいだし危険だから使わない方がいいんだが。
自前でカンマやタブで分割してatoiとかatofとかで読むことをお勧めする。
672デフォルトの名無しさん:2008/02/07(木) 00:25:07
文字列化演算子 # を使え
673デフォルトの名無しさん:2008/02/07(木) 00:28:16
>>669
こんな感じでできなくはない。
#include <stdio.h>

#define S(x) # x
#define SS(x) S(x)
#define STR_LEN 255

void func()
{
char str[STR_LEN + 1];
scanf("%" SS(STR_LEN) "s", str);
}
でも、余り使い勝手はよくないのでfgets()を使えば?
674デフォルトの名無しさん:2008/02/07(木) 00:28:24
>>670
それでも×だろ。
675デフォルトの名無しさん:2008/02/07(木) 00:29:44
%s と fgets の挙動はちゃうでよ
676デフォルトの名無しさん:2008/02/07(木) 00:31:07
>>674
なにが×?
677デフォルトの名無しさん:2008/02/07(木) 00:34:01
>>676
1バイト飛び出す。
678デフォルトの名無しさん:2008/02/07(木) 00:35:25
そんな話かよ
679デフォルトの名無しさん:2008/02/07(木) 00:43:24
小規模プログラムなら1バイト程度問題ないだろうが業務レベルとなると
それがバグとなると探すのが死ねる
680658:2008/02/07(木) 00:47:52
ひ〜わけわかめです、初心者なのでついていけんです。

サンクスでした。。。
681デフォルトの名無しさん:2008/02/07(木) 00:49:21
>>680
お前は絶対プログラマになるな
682デフォルトの名無しさん:2008/02/07(木) 01:34:27
質問がありますので、ご返答戴ければ幸いです。

Void bofw(const char *str2){
char str2[80];
strcat(str1, str2);
}

これは、 char str2[80]にstr1, str2を合体させたものを
入れると解釈して良いでしょうか?


もう一つは

Void bofw(const char *str2){
char str1[80];
strncat(str1, str2, sizeof(str1) -strlen(str1) -1)

これの、"-strlen(str1) -1"が理解できません、
特にsizeof(str1)から-strlen(str1)の部分です
どうして"-"引くのでしょうか?
683デフォルトの名無しさん:2008/02/07(木) 01:52:10
二つ目の質問に関して自分の解釈では
char str1[80]に合体して入れる際に、
sizeof(str1)で文字列がstr1分で、文字数がstr1-1分少ないと言う
感じで宜しいでしょうか?
684デフォルトの名無しさん:2008/02/07(木) 01:58:17
>>682
strcat(str1, str2) はstr1のうしろにstr2をくっつけたものをstr1にいれる

二つ目のstrlen(str1) + 1 は(str1にある文字列の長さ) + (ヌル文字)を表わしてて、
sizeof(str1)から引くことで、まだ使用されてない配列サイズを計算してるんだろう。

どちらのコードも少しおかしい気はするが。。。
(str2が二つあったり、初期化してなかったり)
685デフォルトの名無しさん:2008/02/07(木) 02:23:44
>>684
レス、ありがとうございます。

>>strcat(str1, str2) はstr1のうしろにstr2をくっつけたものをstr1にいれる
どうして、"char str2[80]; "としてあるのに、str1にいれるのでしょうか?

>>二つ目のstrlen(str1) + 1 は(str1にある文字列の長さ) + (ヌル文字)を表わしてて、
sizeof(str1)から引くことで、まだ使用されてない配列サイズを計算してるんだろう。

これに関しては、"あいうえお\など0"例を書いて戴けると真に幸いです・・・イメージしにくいのでorz

686デフォルトの名無しさん:2008/02/07(木) 02:34:43
>>685
一つ目はそのコード書いた人に聞いてくれよw
正直何がしたいのかよくわからんです。写し間違えしてない?

二つ目は、
char str[80] = "abcde";
とすると、
sizeof(str) == 80
strlen(str) == 5
だから、strの残りサイズは、80 - 5 - 1 = 74となる。(最後の-1はヌル文字の分)
strncatに74を渡すことで、あと74文字までつなげられるぞと言ってるわけ。

687デフォルトの名無しさん:2008/02/07(木) 03:06:56
char←これって本当は何て読むのおすえて
わたくしは、「ちゃー!」って呼んでます
688デフォルトの名無しさん:2008/02/07(木) 03:08:25
世界的及び日本の大部分ではチャーですよ
689デフォルトの名無しさん:2008/02/07(木) 03:10:59
ありがとうございます
ついでにいいですか?
C++←これは何てよむのですか
わたくしは、「シープラ」って言ってるのですが、隣の人が「シープラプラ」だというので
690デフォルトの名無しさん:2008/02/07(木) 03:25:13
世界的にはシープラスプラス
日本ではシープラプラが多いです
691685:2008/02/07(木) 04:13:09
>>686
ありがとうございました。

理解できました、参考書を見直しても写した通りです。
692685:2008/02/07(木) 04:55:24
>>686
度々、申し訳ありませんが
結局は"strncat(str1, str2, sizeof(str1) -strlen(str1) -1)"
こうする事で何の意味(意義)があるのか、詳しく参考書に書いてありません
簡単にセキュrティ云々としか書いてありません
普通に"strcat(str1, str2)"で繋げてはいけないのでしょうか ?
693685:2008/02/07(木) 04:59:28
バッファオーバーフロー対策らしのですが
どうして、これが対策になるんですかね
694デフォルトの名無しさん:2008/02/07(木) 05:13:33
たぶん書いてあるだろ、理由も
たとえば10文字しか入れられない領域に7文字と8文字を連結したらどうなる
695デフォルトの名無しさん:2008/02/07(木) 06:42:48
まぁ、>682みたいな関数として成立していないようなサンプルが罷り通るようじゃオーバフロー対策もへったくれもないがな。
普通は、そこまでしてstrncat()なんか使わないし。
696デフォルトの名無しさん:2008/02/07(木) 07:22:10
>>682 は絶対手で書き写した上、変な省略してるだろ。
str1 を初期化もしてないのに strcat/strncat なんてするわけがない。
697デフォルトの名無しさん:2008/02/07(木) 08:07:50
つっこみは多々あろうけど、そんなもんだよ、参考書なんて
698デフォルトの名無しさん:2008/02/07(木) 11:32:38
do{
fgets(str, 256, stdin);
//色々処理
}while(str[0]);

キーボードから入力した文字列で色々処理して、何も入力せずEnterを押したら終了、
という処理をやろうと上のようなプログラムを書いたのですが、Enterを押してもループを抜けてくれません。
fgetsでEnterを押すだけだと、ヌル文字だけの文字列は代入されないのでしょうか?
699デフォルトの名無しさん:2008/02/07(木) 11:37:34
fgetsのドキュメント読め。終了。
700デフォルトの名無しさん:2008/02/07(木) 11:48:04
改行文字を読み込むのを見落としていました。
お邪魔しました。
701デフォルトの名無しさん:2008/02/07(木) 12:05:21
もう来るなよ
702デフォルトの名無しさん:2008/02/07(木) 13:26:47
atoi
をエートワッって読むのは第2外国語に仏語を選んだマイノリティー
703デフォルトの名無しさん:2008/02/07(木) 13:38:24
La magie est un renvoi
,
echouant, mais une
  ,
fierte en tant que noble est forte

exceptionnellement.
704682&685:2008/02/07(木) 17:19:15
皆さんレス遅れましたが、ありがとうございます

>>694
溢れてしまいます

>>695->>696
あまり、当てにしないようにします、かなり詳しい大先生方(皆さん)を当てにさせてもらいますw


あと、確認解釈の為、質問させて下さい整理できたので・・・
要するにこれは
Void bofw(const char *str2){
char str1[80];
strncat(str1, str2, sizeof(str1) -strlen(str1) -1)
>>686で書かれているように、74文字までしか格納できなと解釈していいのでしょうか?

705デフォルトの名無しさん:2008/02/07(木) 17:28:40
sizeof(str1) -strlen(str1)文字までしか格納できない
706デフォルトの名無しさん:2008/02/07(木) 17:30:26
>>686を読んでもまだ確認が必要ってw
707デフォルトの名無しさん:2008/02/07(木) 19:25:44
#define y1 234
#define y2 456
・・・・
#define y99 10


x[0] = y1;
x[1] = y2;
・・・・・・・・・・
x[99] = y99;

こういうことをループを使って簡単にやる方法はないですか?
いちいち手作業で代入するのが面倒くさいです
708デフォルトの名無しさん:2008/02/07(木) 19:27:20
最初から代入しとけばええんちゃう?
709デフォルトの名無しさん:2008/02/07(木) 19:28:31
いちいちdefineしたものを代入するより、
x[100] = {234, 456,……,10}って初期化したほうがよくね?
710デフォルトの名無しさん:2008/02/07(木) 19:28:32
値に法則性もないのに手作業以外でどうやるんだよ?
711デフォルトの名無しさん:2008/02/07(木) 19:28:36
>>707
#defineじゃなくてconst int hoge[]
みたいなので用意しとけば?Cなので配列の添え字とかには使えないのだけれど
712682&685:2008/02/07(木) 19:30:29
>>705
>>706
自信なかったので・・・




713デフォルトの名無しさん:2008/02/07(木) 19:30:29
>>708
#define y1 234
#define y2 456
・・・・
#define y99 10
というフォマットでデータを複数保存していまして
別のデータを使うたびにいちいち手作業で代入するのが面倒くさいです
714デフォルトの名無しさん:2008/02/07(木) 19:32:22
perl -e "printf qq/x[%s] = y%s;\n/, $_-1, $_ for 1..99;"
715デフォルトの名無しさん:2008/02/07(木) 19:33:21
for(i=0;i<100;i++){
x[i] = y(ここにiという数字が入る);
}
みたいなことはできないんですか?
716デフォルトの名無しさん:2008/02/07(木) 19:33:47
できるわけないじゃん
717デフォルトの名無しさん:2008/02/07(木) 19:34:39
>>709が一番簡単。
718デフォルトの名無しさん:2008/02/07(木) 19:38:11
>>709
>>717
ありがとうございました
719デフォルトの名無しさん:2008/02/07(木) 19:40:58
これって それぞれの変数の値ってどうなりますか?

#include <stdio.h>
main()
{
int z[] = {1,2,3,4,5,6,7,8,9};
int a = 10, c = 20;
int *pt_a, *pt_b, d;

pt_a = &a;
pt_b = z;
z[3] = *pt_a + 5;
*(pt_b + 1) = c;
pt_b += 2;
d = *pt_b;
pt_b += d;
*pt_a = *(pt_b + 1);

で printfで%dで出した場合
*pt_a *pt_b d z[1] z[2] z[3]
の値はいくつになりますかね? 教えて下さい。
720デフォルトの名無しさん:2008/02/07(木) 19:41:45
ファイルから読み込んだら?
721デフォルトの名無しさん:2008/02/07(木) 19:46:09
>>719
目で追うの面倒いから実行させてみた
順に 7, 6, 3, 20, 3, 15
っていうか自分で実行してみりゃ一発でわかるだろうに、なぜ訊くか
722デフォルトの名無しさん:2008/02/07(木) 19:48:16
>>713
define01.hとかにして必要なデータをincludeするか
ファイル操作つかえばいいよ

ファイル操作が分からないなら C言語 ファイル操作 でぐぐれ
723デフォルトの名無しさん:2008/02/07(木) 20:52:51
srand(time(NULL));

以外に別種の乱数が生成できるってやり方はないか?
724デフォルトの名無しさん:2008/02/07(木) 21:08:09
日本語を入力してそれを変数に格納して日本語で出力する。

ここにgetsとか入れるとおもうんですがどうも上手くいきません
#include <stdio.h>

int main()
{
char szName[32];

printf("What is your name?---");
/* ここ */
printf("Your name is %s.\n", szName);

return 0;
}


初心者過ぎる質問ですが・・・
725デフォルトの名無しさん:2008/02/07(木) 21:14:00
char szName[32] = "山田太郎";

として、とりあえずちゃんと日本語表示される?
726デフォルトの名無しさん:2008/02/07(木) 21:17:53
>>725
はい、ちゃんと表示できます。
727デフォルトの名無しさん:2008/02/07(木) 21:39:08
gets( szName );
でいけるけど、gets使うのはなぁっていうのはまだ早いか。
とりあえずいける
728デフォルトの名無しさん:2008/02/07(木) 21:44:21
だからgetsという存在そのものを無い事にすればいいのに、何故教えるのか?信じられないな
729デフォルトの名無しさん:2008/02/07(木) 21:51:32
>>724
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Your name is %s.\n", argv[1]);

return 0;
}

としておいて、このソースでyournameという実行ファイルつくって
> yourname "山田太郎"
Your name is 山田太郎

みたいに引数で表示したい日本語文字列を与えるのは用途が違う感じ?
730デフォルトの名無しさん:2008/02/07(木) 21:51:55
いきなりfgets教えて問題ないよな。
最初はstdin固定で。
731724:2008/02/07(木) 21:57:31
ここ数年仕事で日本語入力使わなかったらさっぱり忘れてしまって
いい感じのサンプルソースが見つからなくてどうも行き詰ってた状態です
思い出しながらやってるんですがgetsって何で嫌われてるんだっけ?
>>729
用途と言うより基本が思い出せないのでとりあえず関数内で収めてしまいたいのです。
最初の一歩がわかればあとは自分でいけると思うのですが・・・
>>730
kwsk

732デフォルトの名無しさん:2008/02/07(木) 22:00:33
>>731
char str[5]
gets( str );
で aaaaaaaaaaaaaaaaaa
と入力した場合、
aaaa\n [aaaaaaaaaaa...] とオーバーしたものもメモリに書き込まれてしまう。
ようはオーバーフローを起こしてる。
733デフォルトの名無しさん:2008/02/07(木) 22:01:21
>>731
メクラかお前
734デフォルトの名無しさん:2008/02/07(木) 22:02:16
本当に仕事で使ってるとは思えない無知さ。
日本の将来が危ぶまれる。
735デフォルトの名無しさん:2008/02/07(木) 22:03:08
ぐぐれば一番に見つかるものなのに、それすらしない糞って
氏ねよ
736724:2008/02/07(木) 22:11:11
>>732
サンクス

>>733-735
うん
737デフォルトの名無しさん:2008/02/07(木) 22:14:01
しぬなんてどうせやらないことにうんと答えるなんて……。
738デフォルトの名無しさん:2008/02/07(木) 22:19:52
>>723
ちょっとまてその前にそのNULLは何だ
NULLはポインタに対して使うもんだぞ
739724:2008/02/07(木) 22:19:54
入門編ってのは嘘だったのですね・・・、
>>735
google使ってないわけないじゃないですか。

これ以上いると荒れそうなので帰るぜ('A`)ノ
740デフォルトの名無しさん:2008/02/07(木) 22:22:27
fgets()を教えた所で、
今度は「.の前に改行が入っちゃうんですけど」とか言って、
自身では解決できずに再度質問するんだろう。
741デフォルトの名無しさん:2008/02/07(木) 22:24:49
>>738
お前は何を言ってるんだ
742デフォルトの名無しさん:2008/02/07(木) 22:29:24
http://www.google.co.jp/search?hl=ja&q=gets&lr=lang_ja
getsでググって出てくる1番上の結果の抜粋に、極めて的確に書かれている。

> gets() は絶対に使用してはならない。前もってデータを知ることなしにgets()
> が何文字読むかを知ることはできず、gets() がバッファの終わりを越えて書き込み続けるため、
> gets() を使うのは極めて危険である。

この文章の意味が分からないと言ってきたのなら、
それはそれでまだフォローのしようもあるというものだが。
743デフォルトの名無しさん:2008/02/07(木) 22:38:35
PGって色々自己主張強い人多いからな<ソースについての文句とか

俺も業務について2年目だけど、コードブロックそのものを改行を入れてしっかり書いてくれない人が嫌いだ
if( 〜〜 ) { ←これ 改行してから書けといいたい
744デフォルトの名無しさん:2008/02/07(木) 22:41:50
俺は改行する方が嫌いだよ
745デフォルトの名無しさん:2008/02/07(木) 22:43:16
ifのあとにスペース入れない糞野郎には、そっとヘッダに罠マクロを定義してメチャメチャにしてやりたい
746デフォルトの名無しさん:2008/02/07(木) 22:52:04
C言語で独習Cをやり終えた後に近藤 嘉雪のアルゴリズムとデータ構造
を読んでみたんですがちょっと読むのに厳しいような気がしてるんですけど
これは、C言語がまだ理解出てないってことですかね?
747デフォルトの名無しさん:2008/02/07(木) 22:56:13
いやプログラムとアルゴリズムは話は別。
748デフォルトの名無しさん:2008/02/07(木) 22:56:38
>>743
たった2年で何を勝手なことを
K&Rすら改行していないというのにお前にそれを否定する論拠があるのか?
749デフォルトの名無しさん:2008/02/07(木) 22:59:44
最初は改行してたけどスクロール面倒だからしなくなったな
750デフォルトの名無しさん:2008/02/07(木) 23:05:23
人それぞれ書き方あるよなぁ
見づらくなければそれでいい
751デフォルトの名無しさん:2008/02/07(木) 23:13:19
まともなエディタなら勝手にフォーマットしてくれるからどうでもいい
752デフォルトの名無しさん:2008/02/07(木) 23:27:32
他人の書いた#ifでズタズタのソースをいじったときに、
改行しない { は括弧の対応が判別できなかった。
それ以降、自分では改行するようになってしまった。
753デフォルトの名無しさん:2008/02/07(木) 23:35:21 BE:209677076-2BP(294)
>>752
それは #if を多用しないって考えるのが正解。
754デフォルトの名無しさん:2008/02/07(木) 23:48:20
括弧の対応なんてエディタの力で簡単に判別できる
そんなこと気にしてるようじゃ
755デフォルトの名無しさん:2008/02/07(木) 23:53:58
そのエディタが判別不能だったんだよ。
少なくとも当時の秀丸は。
756デフォルトの名無しさん:2008/02/07(木) 23:59:47
黙れジジイ
757デフォルトの名無しさん:2008/02/08(金) 00:00:56
しかしジジイ連中がいなければ今の開発環境はない
758デフォルトの名無しさん:2008/02/08(金) 00:02:31
しかし今ジジイ連中が黙っても今の開発環境はなくならない
759デフォルトの名無しさん:2008/02/08(金) 00:03:05
いつまでも、昔はどうだったとか言う奴は邪魔でしかない
760デフォルトの名無しさん:2008/02/08(金) 00:03:56
うっせえ、20代だよw
761デフォルトの名無しさん:2008/02/08(金) 01:40:00
>>743
あなたはPASCAL 爺さん?それともVB坊や?
762デフォルトの名無しさん:2008/02/08(金) 01:43:00
>>746
アルゴリズムはちょっとわからなければ、写経して実際に動かしてprintfやらお好みのもので経過を調べて、とにかく自力で体得するのが吉。読んだだけわからなくても、それが普通だと思います。まさしく今が習得すべき時期ですよ。ベストを尽くしてください。
763デフォルトの名無しさん:2008/02/08(金) 01:43:14
べーしっ君
764デフォルトの名無しさん:2008/02/08(金) 01:45:32
>>755
太古からある emacs でなんら問題ないのに、人はどうして見た目のよい糞エディタを使うのか?
765デフォルトの名無しさん:2008/02/08(金) 01:59:57
>>748
やつに「K&R」 と言っても通じないんじゃないかな?
766デフォルトの名無しさん:2008/02/08(金) 02:00:52
>>765
太古からの正当なる系統であるvimでなんら問題ないのに
人はどうして「純粋な」エディタとは言えないemacsを無理に使おうとするのか?
767デフォルトの名無しさん:2008/02/08(金) 02:10:28
>>766
vi は作者自身が消えるべき、といってるくらいで、あまりにも機能がなさすぎ。vim は vi のイミテーションでしかない(と作者がドキュメントの冒頭に書いてる)。
いや、私は bash のキーバインドは vi にしている‥‥。
768デフォルトの名無しさん:2008/02/08(金) 07:27:18
今日のエディタスレはここか。
とりあえずCtrlに画鋲置いといた。
769デフォルトの名無しさん:2008/02/08(金) 09:52:10


イテッ
770デフォルトの名無しさん:2008/02/08(金) 10:39:53
ざんねん!!

わたしの ぼうけんは これで おわってしまった!!
771デフォルトの名無しさん:2008/02/08(金) 11:21:49
おお770よ、しんでしまうとはなさけない
772デフォルトの名無しさん:2008/02/08(金) 12:44:06
До свидания
773デフォルトの名無しさん:2008/02/08(金) 18:42:36
Adieux
774デフォルトの名無しさん:2008/02/08(金) 19:02:10
fopenでデータを書き出していって、ヘッダをつけようと
fseek(fp, 0L, SEEK_SET);や
rewind(fp);
でファイルの先頭に戻して
fprintf()でヘッダ部分を書き出しているのですが

書き出した分のデータが消されてしまっているようで
データにズレが発生してます。
ファイルは
if((fpo=fopen(OutFileName, "w")) == NULL){例外処理}
で発生させています。

解決方法ご教授ください
775デフォルトの名無しさん:2008/02/08(金) 19:02:39
すいません、最後から3行のところは
fpoではなくfpです
776デフォルトの名無しさん:2008/02/08(金) 19:06:00
>>775
次のどれか。
・ヘッダを「挿入」する手段はないので諦めて、一番最初にヘッダを書く。
・一旦ファイルを作っておいて、ヘッダだけのファイルと合成する。
777デフォルトの名無しさん:2008/02/08(金) 19:12:42
>>776
レスありがとうございます
挿入できないのですか…
ファイルが大量にあって、今の方法だと後から挿入するしか手がない感じです

ナンテコッタイ
778デフォルトの名無しさん:2008/02/08(金) 19:18:05
unix系なら、作ったファイルが body.data だとして、ヘッダとくっつけて whole.data を作るならこれでもできる。
system("echo header | cat - body.data > whole.data");
# popen("cat - body.data > whole.data", "w")の方が楽かも知れず。

つーか、fopen("w")した直後にヘッダを書くだけじゃん。
779デフォルトの名無しさん:2008/02/08(金) 19:22:42
>>778
ありがとうございます。
fopen w の直後にヘッダ書いて出来ました

脳みそ足りてませんでした
780デフォルトの名無しさん:2008/02/08(金) 21:54:44
どなたか 先日のC言語2級の解答分かる方いますかね..?

答え合わせしたいのですが...

いないよなぁ
781デフォルトの名無しさん:2008/02/08(金) 21:57:05
>>780
問題を教えてください(こっそりと)
782デフォルトの名無しさん:2008/02/08(金) 23:01:15
問?

0x1234を0x123fにするには (28) と (29) を行う。その演算子の
記号は (30) である。 また、上位1バイトを0にし、下位1バイトをそのままに
するには、 (31) と (32) を行う。その演算子の記号は (33) である。
ビットを反転するには、 (34) と排他的論理和を行うか、ビット演算子の反転
を使用する。そのビット演算子(反転)の記号は (35) である。

(28)の解答群
ア 0x0000 イ 0x000F ウ 0x1230 エ 0xfff0 オ 0xffff

(29)、(32)の解答群
ア 論理和 イ 論理積 ウ 排他的論理和 エ 否定論理和 オ 否定論理積

(30)、(33)、(35)の解答群
ア & イ | ウ ^ エ ~ オ !

(31)の解答群
ア 0x0001 イ 0x000f ウ 0x00ff エ 0xf000 オ 0xff00

(34)の解答群
ア 0x0000 イ 0x0001 ウ 0x1111 エ 0x1010 オ 0xffff
783デフォルトの名無しさん:2008/02/08(金) 23:01:59
すみません。C初心者です。質問させてください。

Cのポインタをはずすことを何か一つの用語であらわすことはできますか?
Perlなら\1を${\1}することを\1をデリファレンスすると言いますが、
Cではchar *aを*aすることをなんと言えばよいのでしょうか?
784デフォルトの名無しさん:2008/02/08(金) 23:16:44
間接参照
785783:2008/02/08(金) 23:21:03
>>784
ありがとうございます。英訳的にはindirect referenceでしょうか。
参照というとC++の参照を思い出しますね。ちょっと紛らわしい。
786デフォルトの名無しさん:2008/02/08(金) 23:26:43
問?

キャスト演算子は、式の結果を一時的に指定したデータ型に変更するものである。例
えば、double型の変数aの小数点以下を切り捨てるには、 (36) と記述する。
キャスト演算子は (37) であり、算術演算子より優先順位が (38)
ため、int型の変数a、bの除算を実数の精度で計算し、その結果をdouble型の変数c
に格納する記述は (39) である。
また、キャスト変換はポインタにも有効であり、int型の配列の内容を1バイトずつ
参照することができる。
なお、次のプログラムの出力結果は処理系によって異なる場合があるが、本問では考
慮しないものとする。

#include <stdio.h>
main()
{
int a[] = {0x01020304, 0x05060708};
int i;
char *p;

p = (40) ;
for (i = 1;i <= 8; i++)
printf(゙%x゙,*p++);
}
787デフォルトの名無しさん:2008/02/08(金) 23:27:56
>>785
ポインタからポインタが指す先のデータを得る操作をindirectionと呼ぶ
788デフォルトの名無しさん:2008/02/08(金) 23:28:43
(36)の解答群
ア int a イ int (a) ウ (int a) エ (int) a オ a(int)
(37)の解答群
ア 単項演算子 イ 関係演算子 ウ 比較演算子 エ 論理演算子 オ 条件演算子
(38)の解答群
ア 高い イ 低い
(39)の解答群
ア c = a / b イ (double)c = a / b ウ c = (double)a / b エ c = (double)(a / b)
(40)の解答群
ア char a イ char *a ウ (char) a エ (char) *a オ (char *) a
789783:2008/02/08(金) 23:29:58
>>787
たびたびありがとうございます。
デリファレンスに比べて日本人相手には使いにくいかもしれないですね。
790デフォルトの名無しさん:2008/02/08(金) 23:31:07
以上が一部です

ほんとは最後の問7 問8の答えが知りたいのですが 打つのが大変なんで...

文が見づらくてすいませんm(_ _)m

解答をお願いいたします。
791デフォルトの名無しさん:2008/02/08(金) 23:33:44
丸投げするんなら、宿題スレにでも池
792デフォルトの名無しさん:2008/02/08(金) 23:33:51
宿題スレで聞けば
793デフォルトの名無しさん:2008/02/08(金) 23:34:12
その問題の答えが分からんのは重症だろ
794デフォルトの名無しさん:2008/02/08(金) 23:39:33
C++ならint(4.34)でもいけるな
795デフォルトの名無しさん:2008/02/09(土) 00:04:51
すいません.. 確かに重傷です..

796デフォルトの名無しさん:2008/02/09(土) 00:16:55
カーニハンとリッチーはC言語習いたての俺ですら知ってるぞ
っていうかCの説明の1番目に出てきた
797名無し:2008/02/09(土) 00:33:17
C言語のコンパイルの仕方について質問です。
エディタでmainなどを説明通り打ち込み、.cで保存したテキストファイルを生成する事は出来たのですが、コンパイラをどのようにして使えばいいのかが分かりません。
色々ツールが入っていましたので、どれにドラックしていいのかわかりませんでした。
宜しければ、このコンパイラで、これが本体だよみたいな感じでお教えになってもらえれば幸いです>ω<
798デフォルトの名無しさん:2008/02/09(土) 00:36:02
お前のパソコンの中身なんて知るかよw
とりあえずコンパイラでググれ。
799デフォルトの名無しさん:2008/02/09(土) 01:04:59
cc *.c[Enter]

これでOK.
800デフォルトの名無しさん:2008/02/09(土) 01:08:22
>>797
Cpad でググれ
801デフォルトの名無しさん:2008/02/09(土) 01:27:22
カーニハンって蟹チャーハンみたいで美味しそうで困る
ときどきfloatも美味しそうに聞こえるから困る
802デフォルトの名無しさん:2008/02/09(土) 01:28:10
ほんとすいませんm(_ _)m
どなたか解答をお願いいたします。
803デフォルトの名無しさん:2008/02/09(土) 01:30:30
>>802
だからCpad使えってwwwwwwwwwwwwwwwwwwwww
猿でもいける総合環境だぞwwwwwwwww
http://hp.vector.co.jp/authors/VA017148/pages/install/bcc.html
これみても導入できないなら、まずPCの知識からつけましょう
804デフォルトの名無しさん:2008/02/09(土) 01:33:55
>>801
俺はカーニハンって聞くとカニバリズムを思い出して、
リッチと聞くとなんか怪しい魔法使いか何かじゃないだろうかと、
ワルプルギスの夜のような印象を受ける。K&Rを見ればコリアを思い出す。
805デフォルトの名無しさん:2008/02/09(土) 01:36:33
このコンパイラってどのコンパイラだよwwww
806デフォルトの名無しさん:2008/02/09(土) 01:43:17
ぷよぷよを作っていたコンパイラのことだ
807デフォルトの名無しさん:2008/02/09(土) 01:44:04
今は亡きコンパイルを偲ぶ
808デフォルトの名無しさん:2008/02/09(土) 04:48:02
>>782 >>786
(28)イ
(29)ア
(30)イ
(31)ウ
(32)イ
(33)ア
(34)オ
(35)エ
(36)エ
(37)ア
(38)ア
(39)ウ
(40)オ
809デフォルトの名無しさん:2008/02/09(土) 06:14:46
アリアハンが中華メニューに聞こえるようなもんか
810デフォルトの名無しさん:2008/02/09(土) 10:39:48
>>785
英語だとdereference。
規格では間接参照と訳されているが、
参照剥がし、参照外し、逆参照なんかもよく聞く。
811デフォルトの名無しさん:2008/02/09(土) 21:48:55
脱参照というのも見た事がある
812デフォルトの名無しさん:2008/02/09(土) 22:02:37
*が肛門の穴に見えるので脱糞というのも捨てがたい
813デフォルトの名無しさん:2008/02/10(日) 02:50:15
俺は参照戻しと呼んでいる。
814デフォルトの名無しさん:2008/02/10(日) 03:48:14
デリファレンスでいいじゃんといつも思う。
815デフォルトの名無しさん:2008/02/10(日) 04:59:21
あえてポインティーと呼びたい。
816デフォルトの名無しさん:2008/02/10(日) 06:25:31
今日の2級に受かりたいです。お願いします
817デフォルトの名無しさん:2008/02/10(日) 07:55:18
>>790
こいつに問7、8を書いてやってくれ
解答は俺が担当してやる、問題用紙がないのでね
818デフォルトの名無しさん:2008/02/10(日) 08:31:43
宿題スレでやれって書こうと思ったらマルチだった
819デフォルトの名無しさん:2008/02/10(日) 12:45:01
問8
/*語尾変換プログラム*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int f_read(void);
int w_cnv(int ln);

#define CHRSIZE sizeof(char)

char str[20][(254 + 2)* CHRSIZE * 2 + sizeof(char)];

main()
{
int ln;
int i;
int cnt;

ln = f_read();
cnt = w_cnv(ln);
for(i=0;i<ln;i++) printf("%s",str[i]);
printf("\n文章中を%d件変換し、\n",cnt);
printf("文末を%d件付加しました。\n",ln);
}
/*ファイル入力*/
int f_read(void)
{
FILE *fp;
820デフォルトの名無しさん:2008/02/10(日) 12:55:33
char buf[256];
int cnt = 0;

if((fp = fopen("word.dat","r")) == NULL){
printf("入力ファイルがオープンできません\n");
exit(1);
}
while( (46) != NULL)
(47) ;
fclose(fp);
return(cnt);
}
/*変換*/
int w_cnv(int ln)
{
int i;
int cnt = 0;
char w_str[256];

for(i=0;i<ln;i++){
while( (48) != NULL){
strcpy(w_str,strstr(str[i],"な") + CHRSIZE * 2);
strcpy(strstr(str[i],"な"),"にゃ");
(49) ;
cnt++;
}
strcpy( (50) ,"にゃ\n");
}
return(cnt);
}
821デフォルトの名無しさん:2008/02/10(日) 13:10:32
(46)の解答群
ア fgets(buf,255,fp) イ fgets(fp,buf,255) ウ fscanf("%s",buf,fp) エ fscanf(fp,"%s",buf)

(47)の解答群
ア strcpy(buf,str[cnt++]) イ strcpy(buf,str[cnt+1],buf) ウ strcpy(str[cnt++],buf) エ strcpy(str[cnt+1],buf)

(48)の解答群
ア strcat(str[i],"な") イ strchr(str[i],"な") ウ strcpy(str[i],"な") エ strstr(str[i],"な")

(49)の解答群
ア strcat(w_str,str[i]) イ strcat(str[i],w_str) ウ strcpy(w_str,str[i]) エ strcpy(str[i],w_str)

(50)の解答群
ア strchr(str[i],`\0') イ strchr(str[i],`\n') ウ strchr(w_str[i],`\0') エ strchr(w_str[i],`\n')

文中の「な」を「にゃ」に変換し、さらに文末の語尾に「にゃ」を付加して表示するプログラムです
822デフォルトの名無しさん:2008/02/10(日) 13:21:58
で?
それがどうしたい?
823デフォルトの名無しさん:2008/02/10(日) 13:25:08
本人は面白いこと書いたつもりでいるんだから、そっとしといてやれよw
824デフォルトの名無しさん:2008/02/10(日) 13:57:12
ほんとすいませんm(_ _)m 度々の投稿で荒らしてしまって...
申し訳ないです..m(_ _)m

解答が知りたかったもんで..

825デフォルトの名無しさん:2008/02/10(日) 15:18:07
さすがにそれは宿題スレで聞けよ
826デフォルトの名無しさん:2008/02/10(日) 16:05:42
C言語でプログラムを作っているのでここで質問します。
16進数でテキストファイルに以下のように書き込んでいるのですが、

01ABD
03DAE

これをASCIIコード形式で出力することはできませんか?
わかる方教えて下さい。
環境 WindowsXP 開発環境 VS2008EE
827デフォルトの名無しさん:2008/02/10(日) 16:22:10
>>826
char str[] = "DDDD";
printf("%d", str[0]);
見たいな感じで出せばいいだけじゃないの?
828デフォルトの名無しさん:2008/02/10(日) 16:41:02
<<827
 確かにできそうですね。とりあえず、それでやってみます。
 レスありがとう
829デフォルトの名無しさん:2008/02/10(日) 17:15:37
printf("%02X" ・・・
あたりのほうがよくね?
830デフォルトの名無しさん:2008/02/10(日) 19:52:57
C言語で有名なロギングライブラリってどんなのがありますか?

ちなみにlog4cっていうのを見つけて、VCビルド用のMakefileでnmakeしたら
構文エラーが・・・
log4cのdllってどこかにないでしょうか?
831デフォルトの名無しさん:2008/02/10(日) 19:54:31
>>830
Windowsならイベントログに書き出すとか。
832デフォルトの名無しさん:2008/02/10(日) 19:55:28
サンプル、といってもメモならあったよ?
http://d.hatena.ne.jp/tanarky/20070615

構文エラー直した方が早いんじゃない?
833デフォルトの名無しさん:2008/02/10(日) 20:18:06
レスありがとうございます。

>>831
できればログの出力先を設定で切り替えられるのがいいです。log4j的なやつ

>>832
http://log4c.cvs.sourceforge.net/log4c/log4c/msvc6/
↑にあったMakefileなんですがnmake用じゃないのかなぁ
そもそも
http://sourceforge.net/cvs/?group_id=38627
↑のCVSリポジトリのログインパスワードがわからなかったりします。
modulenameとあったので「log4c」とかいれてみたんですが弾かれる;;
834デフォルトの名無しさん:2008/02/10(日) 20:44:50
GNU makeのファイルをnmakeに変換するソフトくらいありそうだからぐぐってみ
835デフォルトの名無しさん:2008/02/10(日) 20:58:03
>>834
ありがとうございます。
とりあえずmingwのmakeでmake自体は動きました。
しかし、コンパイルエラー・・・
../src/log4c/rc.c(335) : error C2017: エスケープシーケンスの使い方が正しくありません。
もう少し粘ってみたいと思います。
836デフォルトの名無しさん:2008/02/10(日) 21:14:51
>>833
そこAnonymousならパスワード訊かれてもただEnter叩くだけって書いてあるじゃん。
837デフォルトの名無しさん:2008/02/10(日) 21:19:14
>>836
うおwちゃんと書いてあったのですね。(吊
ありがとうございます。
838デフォルトの名無しさん:2008/02/10(日) 21:50:12
データベースMySQLのソースを解析しているのですが、
EMBEDDED_LIBRARYというdefineがあるのですが、
これって何のためのdefineでしょうか?
また、こういうdefine変数の意味の調べ方ってどうすればよいのでしょうか?。。
839デフォルトの名無しさん:2008/02/10(日) 21:52:51
grepれ
840830:2008/02/10(日) 22:00:15
おかげさまでlog4cのdllが完成し、リンクできるのを確認しました。
CVSからエクスポートしたあとmsvc6のフォルダにあるMakefileをmingwのmakeでmakeしました。
このときVC2005のcmd経由で使う場合はMakefile中のダブルクォートのエスケープが
[\"]ではうまくいかないようなのでシングルクォートで囲みました。
最終的にmakeはエラーでとまってしまったのですがdll自体のビルドは完了しており、
サンプル関連のファイルを作成する部分だったので無視しました。
841830:2008/02/10(日) 22:04:12
ちなみにVC2005でのコンパイルはMakefileの↓の部分でMSVC8を指定しました。
MS_COMPILER_VER=MSVC8
連投ですみません。
以上、参考まで。
842デフォルトの名無しさん:2008/02/10(日) 22:06:02
>>838
VisualStudioのようなIDEやEmacsやVimなどのtags
とくにGNU globalなんかを使うと便利ですよ
843デフォルトの名無しさん:2008/02/10(日) 23:57:24
8バイトや16バイトのサイズを取った変数を
charやintみたいに定義することってできるでしょうか?
844デフォルトの名無しさん:2008/02/11(月) 00:02:08
>>843
聞きたいことがわからん。
型を定義したいならtypedef
typedef int MyIntger;
typdef struct tagHoge HOGE;
845デフォルトの名無しさん:2008/02/11(月) 00:02:10
C99ならint8_t ? int16_t?
846デフォルトの名無しさん:2008/02/11(月) 00:02:43
それともビットフィールド?
847デフォルトの名無しさん:2008/02/11(月) 00:02:50
そ、そういうことだったのかorz
848デフォルトの名無しさん:2008/02/11(月) 00:07:52
ごめんなさい、説明不足でした

例えばcharなら1バイト、longなら4バイトみたいにサイズ取られてますが
そんな風にtekitouは16バイトっていうような型を作りたいんです
849デフォルトの名無しさん:2008/02/11(月) 00:11:28
typedef struct {
  char c[16];
} tekitou;

tekitou  x; /* 16バイト */

こんな感じか?
850デフォルトの名無しさん:2008/02/11(月) 00:15:01
>>848は16バイトの大きさをもった整数みたいにしたいんじゃないかな?
そうじゃないなら>>849でおkだが・・・
64bitくらいまでなら規格や環境によってはあるがそれ以上を好きにとなると自作するしかない。
多倍長演算とかでぐぐればいろいろ見つかる。
851デフォルトの名無しさん:2008/02/11(月) 00:16:15
えと、取ったサイズ分の幅の数値を扱いたいので配列じゃないです
852デフォルトの名無しさん:2008/02/11(月) 00:18:45
16バイトの整数型が提供されていなければ、諦めましょう。
自分で16バイトの数値を計算するプログラムを書いてやる必要があります。
853デフォルトの名無しさん:2008/02/11(月) 00:23:50
多分>>850さんの言ってることだと思います
取り合えず多倍長演算をぐぐってみます、説明下手で申し訳なかったです
レスくださった方ありがとう
854デフォルトの名無しさん:2008/02/11(月) 19:27:03
すいません、質問です。

int test[256][256];

例えばこういう変数を作ってその中身を保存しておきたい場合、
どういう方法でやるのが良いのでしょうか?
もしくはどんなキーワードでググればおkでしょうか。
855デフォルトの名無しさん:2008/02/11(月) 19:31:44
fwrite(test, 256*256, sizeof(int), fp);
856デフォルトの名無しさん:2008/02/11(月) 19:35:00
>>855
ありがとうございます、早速調べてみます。
857デフォルトの名無しさん:2008/02/11(月) 19:42:13
>>855
ダウト
そこは、fwrite(test, sizeof(int), 256 * 256, fp)のように「要素サイズ」と「要素数」を適切に使うべき。
858デフォルトの名無しさん:2008/02/11(月) 20:59:10
書籍を読んでC言語を勉強してます。
入門書を2冊ほど読み終わった程度なのでレベルはとても低いです。

そこで質問です。次に勉強しようと思ってる事なんですけど
Windowsでなにかしらプログラムを作る勉強をしようと思ってます。
VisualC++を開発環境にした書籍がとても多いんですが (「Visual C++〈1〉はじめてのWindowsプログラミング」とか)
WindowsでC言語を勉強していくのでしたら、こういった本で
VisualC++を勉強していけばいいんでしょうか?
C++全然わからないんで、VisualC++使えるのかどうかも不安なんですが・・・

わかりづらい文ですみません、ご教授お願いします
859デフォルトの名無しさん:2008/02/11(月) 21:14:17
VC++でもCはコンパイルできるよ。
860デフォルトの名無しさん:2008/02/11(月) 21:26:35
本に頼るならapiを扱った書籍
あとはソースが公開されているようなのを拾ってきて他人の作ったプログラムを
まずは読んでみるのがいいと思うよ

vc自体はコンソールプログラムのプロジェクトを作ってコンパイルの流れを掴むといい
861858:2008/02/11(月) 22:38:41
>>859
C++使えなくても問題ないってことですよね?
安心しました、書籍探してもC++の事ばかり書いてあったんで

>>860
apiがさっぱりわからないんで、本読んで勉強してみますね
Cの基礎勉強してから人のソース読んでも見慣れない単語が多かったのは
apiだったと最近知った程度のレベルですw
862デフォルトの名無しさん:2008/02/11(月) 22:52:36
Visual C++というソフトウェアはCもC++も対応しているけど、
書籍でVisual C++と言っていれば、C++使っている可能性が高い罠。
立ち読みして確認しておくべし。
863858:2008/02/11(月) 23:36:08
>>862
う〜ん気をつけないと駄目ですね・・・
いつもアマゾンで本買いますけど、VCの本は本屋行って確認してきます
864デフォルトの名無しさん:2008/02/11(月) 23:52:15
コンソールプログラムだけなら
本とか無くても作れるだろうから
まずはそれで慣れたらどうよ?
865デフォルトの名無しさん:2008/02/12(火) 00:06:58
VC++の本ってMFCだったりするから注意な。
866デフォルトの名無しさん:2008/02/12(火) 00:15:47
MFCって無いとダメなもの?
ラッパーだからWin32APIをウィザードのように使いこなせればおk?
867デフォルトの名無しさん:2008/02/12(火) 00:21:15
>ウィザードのように
「次へ」を連打してる姿を想像した
868デフォルトの名無しさん:2008/02/12(火) 00:27:31
>>866
むしろ無しでいけるならなしの方がいい。
API使いこなせるならそれでおk
869デフォルトの名無しさん:2008/02/12(火) 00:35:02
スレ違いだと思うので手短に

>>858
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
これが良さげ

>>866
その理解でOK
870デフォルトの名無しさん:2008/02/12(火) 01:11:26
>>867-869
レスありがとう。

今までC#やらJavaやらHaskellやらテキトーにやってきたけど、
>>869のWindowsプログラミングやってみたら案外面白かった。(Eclipse+CDT+MinGW)
871858:2008/02/12(火) 08:36:04
おはようございます

>>864
流石にそろそろマウスだけでも動かしたくて・・・
もう演習問題をやるのは飽きましたorz

>>865
MFC・・・APIとの違いがよくわかりませんが注意します
もう少し用語の勉強もしないと駄目ですねorz

>>869
ありがとうございます
人のお勧めとかの本はすぐ手をだしてしまう性分なので
もう今すぐ買ってしまおうかと思ってますw
872デフォルトの名無しさん:2008/02/12(火) 11:44:53
スレチうぜーよ
873デフォルトの名無しさん:2008/02/12(火) 20:14:23
#if #elif #endif
の使い方のことなのですが
これでif部分を分岐させるためには
#defineで何がしかのフラグを建てないとダメってことですよね?
874デフォルトの名無しさん:2008/02/12(火) 20:20:25
普通はそうする。

でも例外として、コメントアウトの代わりやコードの切り替えに
#if 0 や #if 1 を使うことはある。
ネストできるのがポイント。
875デフォルトの名無しさん:2008/02/12(火) 20:25:00
#defineを書くとはとは限らず
コンパイル時にオプション-DDEBUG見たいな感じで渡すこともあります
876デフォルトの名無しさん:2008/02/12(火) 20:34:40
>>874
なるほど
「今回はココスルーしておくか」ってときに
#if0にしたりするのですね。

>コンパイル時にオプション-DDEBUG見たいな感じで渡すこともあります
argv[]に入れるときみたいな感じで
コンパイル時にDEBUGが入ってくる、ということですよね?
そのときはDEBUGの部分のソースが回る、ということですね

なんとか整理ついてきました!ありがとうございました!
877デフォルトの名無しさん:2008/02/13(水) 03:02:10
なぜグローバル変数は嫌われているの?
878デフォルトの名無しさん:2008/02/13(水) 03:13:15
>>877
嫌われるに値するだけの理由があるから。
入門者は取り敢えず、そういうもんだと思えばいいことです。
879デフォルトの名無しさん:2008/02/13(水) 11:38:33
>>877
int global; というグローバル変数があるとする。
ローカル関数の中で、
static void foo(void)
{
global = 3;
違う関数();
printf("%d\n", global);
}
こんなコードで、画面に「3」が表示されることは期待できない。違う関数()の中でglobalの
値が変わっているかもしれないから。
このように、プログラムの見通しが極めて悪くなる元凶だから。
880デフォルトの名無しさん:2008/02/13(水) 14:04:49
スコープは狭い方がデバッグしやすい。
881デフォルトの名無しさん:2008/02/13(水) 14:14:23
他にも、グローバル変数を利用する関数は再利用がしにくくなるとか、
他の人もグローバル変数を使うと名前が衝突しないかチェックしなきゃいけないとか。
とにかくデメリット満載。
882デフォルトの名無しさん:2008/02/13(水) 18:34:01
書式指定フィールドってのがよく分からないんですが
%{flags}[width}{precision}[typeのオウレティックス]type
え?何コレ、復活の呪文?%typeとか書けばいいの?
883デフォルトの名無しさん:2008/02/13(水) 18:35:47
>>882
多分具体例と表示結果みたほうがてっとりばやいかと
884デフォルトの名無しさん:2008/02/13(水) 18:42:23
まあC言語で大規模なプログラムを作るならグローバル変数を使った方がいい場合もあるけどな。
クラスのプライベート変数だってCで記述するところのファイル内にスコープが閉じたスタティックなグローバル変数みたいなものだし。
885デフォルトの名無しさん:2008/02/13(水) 18:59:03
>>882
オウレティックスって何だそれ。
プレフィクスの間違いか?
886デフォルトの名無しさん:2008/02/13(水) 19:08:21
>>882
{flags} は + とか - とか 0 とか
{width} は幅 (≒文字数)
{precision} は精度
{typeのオウレティックス} は l とか h とか
type は s とか c とか d とか

例えば、flags が 0 で width が 3 で精度省略で type が d だと、 %03d になる
887デフォルトの名無しさん:2008/02/13(水) 19:41:28
括弧の外で宣言されたスタティック変数ってグローバル変数に分類されるんだっけ?
888デフォルトの名無しさん:2008/02/13(水) 19:49:41
>>887
どの括弧だよ・・・

そとにstaticで書いた場合はそもそもstaticで得られる意味が違う
889デフォルトの名無しさん:2008/02/13(水) 21:25:57
「グローバル変数?どこからでも値使えてうめえwwww」
とか思ってる糞初心者の俺にはありがたい流れだ
890デフォルトの名無しさん:2008/02/13(水) 21:27:32
どこからでも使えない方がうめえんだな、これが。
891デフォルトの名無しさん:2008/02/13(水) 21:28:35
>>887
{ } の外の事なら Yes.
内部リンケージのグローバル変数になる。
外部リンケージのグローバル変数よりゃいくぶんかマシ。
892デフォルトの名無しさん:2008/02/13(水) 21:29:46
子供のころは部屋におもちゃ散らかして、
どこからでも取れてうめぇwwww
って思ってるけど大人になると、
どこ歩いてもぶつかってうぜぇwwwwwwww
ってなるようなもん。
893デフォルトの名無しさん:2008/02/13(水) 21:34:08
ごめん。俺、部屋散らかってる方が安心するわ。
グローバル変数は使わんがな。
894デフォルトの名無しさん:2008/02/13(水) 21:36:36
部屋が散らかってないとそわそわしちゃうよな
895デフォルトの名無しさん:2008/02/13(水) 21:40:22
散らかった部屋で仕事したいかな
896デフォルトの名無しさん:2008/02/13(水) 21:41:13
デスクトップのほうが散らかってる
897デフォルトの名無しさん:2008/02/13(水) 21:49:46
デスクトップはアイコン0じゃないと落ち着かない
898デフォルトの名無しさん:2008/02/13(水) 23:46:24
Cでもオブジェクト指向は可能ですか
899デフォルトの名無しさん:2008/02/13(水) 23:47:07
可能だよ。
900デフォルトの名無しさん:2008/02/14(木) 00:06:42
>>898
ちょっと頑張ればアセンブラでも可能だけど…
901デフォルトの名無しさん:2008/02/14(木) 00:32:54
オブジェクト指向プログラミング言語ではないから、
言語仕様・ライブラリ面での支援がないというだけのこと。
902デフォルトの名無しさん:2008/02/14(木) 07:30:22
どこまでのことができれば 「可能」 と言える状態なのかの
要求レベルによると思う。

C++ をコンパイルして吐かれたアセンブリ言語のコードと
同じようなコードを書いたとして、
果たしてそれは 「オブジェクト指向」 と言えるのかというと、
俺は正直微妙だと思う。
特にアクセス制限まわりが。
903デフォルトの名無しさん:2008/02/14(木) 13:44:25
もうオブジェクト指向"風"プログラミングでいいよ
904デフォルトの名無しさん:2008/02/14(木) 15:02:17
シューティングゲームを制作中です。 スコア表示に悩んでいます。
既にfpsを表示させているので、そのfpsの下に表示させたいです。

ソース下の方に"敵爆破"のコードが書かれているのですが、そのコードの中にスコア加算すると考えています。

使用:Visual C++ 2005 Express Edition
OS:Windows XP
905デフォルトの名無しさん:2008/02/14(木) 15:20:45
誤爆なのか書きかけなのか区別つけにくいな
906デフォルトの名無しさん:2008/02/14(木) 16:29:03
>>902
>C++ をコンパイルして吐かれたアセンブリ言語のコード
たとえばメソッド探索について言うと、C++のような静的型付けの言語の場合、
コンパイル時にある程度解決できるので、例としてあげるのはどうかと思う。
アセンブラでやるなら、型情報を持ったレコードを定義してマクロ使うとか、
ディスパッチャ呼び出すとかするんでないかな?
907デフォルトの名無しさん:2008/02/14(木) 20:34:19
だいたいの言語でオブジェクト指向はできるが
断じてそいつらはオブジェクト指向言語ではない。
908デフォルトの名無しさん:2008/02/14(木) 22:49:54
僕のコードはいつだってカオス指向
ときどきコードなのか日記なのか判らなくなる
909デフォルトの名無しさん:2008/02/14(木) 23:13:43
Cで継承とかできるの?
910デフォルトの名無しさん:2008/02/14(木) 23:22:14
同等のものを作ることは出来るだろ。

コンパイラのサポートは受けられないけど
911デフォルトの名無しさん:2008/02/14(木) 23:25:08
フィールドへのアクセシビリティの制御は?
912デフォルトの名無しさん:2008/02/14(木) 23:28:42
わかってて聞くなよ
おもしろいか?
913デフォルトの名無しさん:2008/02/14(木) 23:29:26
実行コンテクストに資格情報を発行すればいいんじゃね。
914デフォルトの名無しさん:2008/02/15(金) 00:41:11
まあ使う人次第ってこった。
C++でもクラスのメンバ変数全部publicとか燃やしたくなるコードを書く人もいる。
915デフォルトの名無しさん:2008/02/15(金) 00:50:08
C++だけど全部シングルトンパターンとか
916デフォルトの名無しさん:2008/02/15(金) 01:13:44
スレタイ嫁
917デフォルトの名無しさん:2008/02/15(金) 03:26:34
>>911
こんな感じ。

/* Hoge.h */
#pragma once /* 面倒臭いからこれ使わせて */
typedef struct Hoge Hoge;
Hoge *Construct();
void Foo(Hoge *hoge);
void Destruct(Hoge **hoge);

/* Hoge.cpp */
struct Hoge {
 int foo; /* Hoge.cpp 以外からは触れない */
};

Hoge *Construct() { return (Hoge*)calloc(1, sizeof (Hoge)); }
void Foo(Hoge *hoge) { printf("%d\n", hoge->foo); }
void Destruct(Hoge **hoge) { free(*hoge); *hoge = NULL; }
918デフォルトの名無しさん:2008/02/15(金) 09:01:18
とりあえずRubyはCで書かれてるんで、少なくともあの程度には
プロトタイプベースなオブジェクト指向は出来るんじゃね?

メリットあるとは思えないが。

それと「OOPLと同等のソースコード」を書き上げるのはCではムリだろ。

>>911
メンバ変数/関数として変数名、値を保存するバッファ、アクセス属性を持った
構造体のリストを持った構造体をクラスとして宣言して、動的にクラスを作っていけば
実行時にエラー出す程度のことは出来る。
C++やJAVAのような「ソースコード」をCで書くことに拘りすぎ。
919デフォルトの名無しさん:2008/02/15(金) 11:10:30
fgetsとatoiの組み合わせでキーボードから数字を読み込む処理をしていて、

int data = 0;
char temp[32];
do{
fgets(temp, sizeof(temp), stdin);
data = atoi(temp);
}while(data);

数字が入っていないとatoiの戻り値が0になるのを利用してこんな風に書いていたのですが、
dataに0も含む数値を入力するようにしたくなって困ってしまいました。
atoiの戻り値が0を入力されての0なのか数字が入力されなくての0なのかを判別したり、
tempに数値が入っているかを判別したりできる関数はありますでしょうか?
920デフォルトの名無しさん:2008/02/15(金) 11:19:36
strtol
921デフォルトの名無しさん:2008/02/15(金) 12:12:14
>>920
ありがとうございます、調べてみます
922デフォルトの名無しさん:2008/02/15(金) 12:14:59
sscanf でもいいと思う。
923デフォルトの名無しさん:2008/02/15(金) 12:15:02
>>920はatoiの代わりだな。
数値かどうかなら、1文字目を isdigit する手もある。
924デフォルトの名無しさん:2008/02/15(金) 12:30:40
ホワイトスペースをどう扱うかも問題だな。
925デフォルトの名無しさん:2008/02/15(金) 14:09:45
strtol()の戻すポインタを調べれば、変換に何処まで使ったか判る。
sscanf()で同じことをやろうと思ったら、%nで取得する必要がある。
926デフォルトの名無しさん:2008/02/15(金) 14:11:53
sscanf の戻り値使えよ
927デフォルトの名無しさん:2008/02/15(金) 14:20:56
>>926
文字列のどこまで変換に使ったかは戻り値じゃ判らんのだよ。
928デフォルトの名無しさん:2008/02/15(金) 14:25:07
そんな情報が要るとはどこにも書いてないがな
929デフォルトの名無しさん:2008/02/15(金) 14:29:36
要らないとも書いてないねぇ。
930デフォルトの名無しさん:2008/02/15(金) 14:34:39
要らないと書いてないものは無数にあるのに、
そのうちの一つを取り上げて、勝手に要るものとして扱うのはいかがなものか。
931とけび:2008/02/15(金) 14:39:40
教えてくださいませ。

ファイルの出力先のディスクの空き容量のチェックするところを
作成中なのです。
空き容量までは調べられたのですが、マウントポイントでいうところの
どこなのか?が調べられなくて困っています。

環境はVineLinuxです。
ディスク容量は、「statfs」で調べました。
dname = strdup(filename);
dirname(dname);
if (statfs(dname, &stStatfs) == 0) {
fprintf(stderr, "空きサイズ : %d\n", stStatfs.f_bfree*stStatfs.f_bsize);
}

分かる方よろしくお願いします。
932デフォルトの名無しさん:2008/02/15(金) 14:59:18
popen("df -k", "r")じゃいかんの?
933デフォルトの名無しさん:2008/02/15(金) 17:01:01
>>929
必要になる可能性が高いモノではあると俺も思う。

>>928
間違ったからといって「けっ そんなのいらねぇや」は、小学4年生までな。
おじさんとの約束だ。
934デフォルトの名無しさん:2008/02/15(金) 17:04:24
書いてないんだから、両方提示すればいいだけで
一方的に否定するもんでもないと思うけどな
935デフォルトの名無しさん:2008/02/15(金) 17:10:07
元の質問をすっかり忘れるよりマシだろ。
936デフォルトの名無しさん:2008/02/15(金) 18:48:26
>>933
元の質問を考えれば
要らないとしか言いようが無い
937デフォルトの名無しさん:2008/02/15(金) 18:52:27
そりゃ atoi 使ってるくらいだしな。
938デフォルトの名無しさん:2008/02/15(金) 19:17:49
atoiでは検出できないから修正したいって流れが読めない自演乙。
939デフォルトの名無しさん:2008/02/15(金) 19:21:29
検出したいのは0と区別したいだけだろ、わかってて無知のふりしてるのか。
940デフォルトの名無しさん:2008/02/15(金) 19:23:08
途中に数字以外の文字が入ってようが、先頭文字が数値ならatoiは変換する。
つまり、0のときどちらかが知りたいのならば、数字じゃない文字の位置は関係ない。
941デフォルトの名無しさん:2008/02/15(金) 19:27:44
つまり、変換が終了した時点でその文字列に数字以外があったか無かったかatoiでは検出できない。
942デフォルトの名無しさん:2008/02/15(金) 19:29:47
そこで sscanf ですよ。
943デフォルトの名無しさん:2008/02/15(金) 21:30:22
sscanfでも途中に数字以外が合っても先頭から並んでいる分の数字だけ変換するような気がするんですが
どうやって検出するのか教えていただけないでしょうか
944デフォルトの名無しさん:2008/02/15(金) 21:44:28
>>943
どんな文字列をどういう風に変換したいんだ?
945デフォルトの名無しさん:2008/02/15(金) 21:50:32
int n;
if(sscanf(buf, "%d", &n) == 1) {
 先頭に数値があった
} else {
 先頭に数値がなかった
}
946デフォルトの名無しさん:2008/02/15(金) 23:06:51
今日からプログラミングを始めた初心者なんだが、

#include <iostream.h>

void main()
{
int i;
i = 5 + 15;
cout << "計算すると";
cout << i;
cout << "になります。" << endl;
}

っていう簡単なプログラムを組んで、デバッグしようとすると、
fatal error C1083: include ファイルを開けません。'iostream.h': No such file or directory
っていうエラーが出てデバッグできないんだ。
プログラム以前の問題で申し訳ないが、理由が想像できる人いないか?

環境はVisual C++ Express Editionで、http://lets-go.hp.infoseek.co.jp/c_setting09.htmlに書いてあることは一通りやったと思う
947デフォルトの名無しさん:2008/02/15(金) 23:09:04
.h なしで
#include <iostream>
でどう?
948デフォルトの名無しさん:2008/02/15(金) 23:19:14
>>947
エラーが増えた…。

error C2065: 'cout' : 定義されていない識別子です。
error C2065: 'endl' : 定義されていない識別子です。

って言われた。
949デフォルトの名無しさん:2008/02/15(金) 23:20:47
>>948
cout → std::cout
endl → std::endl
ってやるのが面倒なら
using namespace std;
950デフォルトの名無しさん:2008/02/15(金) 23:29:21
>>948
エラーの”数”は気にしなくていい。
1つ目のエラーが、より”後ろ”にずれたら、ある意味改善したと思っていい。
951デフォルトの名無しさん:2008/02/15(金) 23:30:05
>>948
やってみたら、ビルドの時点で
LINK : fatal error LNK1104: ファイル 'user32.lib' を開くことができません。
って言われたんだが、どういう意味か分かるか?
952951:2008/02/15(金) 23:33:08
すまん、>>951>>949に対してな。

>>950
プログラミング以前の問題(多分環境設定)でつまずいてるんで、後ろ云々の問題じゃない気がする…。
素人考えで違ってたらすまん。
953デフォルトの名無しさん:2008/02/15(金) 23:36:28
>>943
sscanf()の場合は、例えば"%d%n"としてどこまで変換したか取得すればいい。
strtol()なら、ポインタを用意しておけばそこにどこまで変換したかを設定してくれる。
どちらの場合も、変換に使わなかった最初の文字を指しているから、その先に
ナル文字があれば全て変換された(=数字文字のみ)ことが判る。
954デフォルトの名無しさん:2008/02/15(金) 23:38:09
>>946
今日から始めるなら、
なんでViusal C++ 2008にしなかったんだい。
なんで946のような古い書き方をしているんだい。

そんな古い資料、よっぽどの名著でもない限り窓から捨ててしまえ。

955デフォルトの名無しさん:2008/02/15(金) 23:38:30
>>952
さっきのページの、ライブラリファイルのディレクトリの追加はやってるか?
そのディレクトリにファイル user32.lib はあるか?
956デフォルトの名無しさん:2008/02/15(金) 23:40:52
>>950
参考にしているサイトやら本やらをもう1回見直して間違いないなら他を参考にしたほうがいい
957デフォルトの名無しさん:2008/02/15(金) 23:43:07
>>954
とりあえずプログラムの勉強始めようと思ってぐぐったら、紹介されてたのが2005だったんだ。
まずはプログラム組めるようになりたかったんで、動けばなんでもいいかなー、と。(実際、動かせてないんだが)
とりあえず2008に移行してみるよ。
アドバイス、サンクス。
958デフォルトの名無しさん:2008/02/15(金) 23:44:26
で、なんで>946は教わる立場の割に態度がでかいの?
959943:2008/02/15(金) 23:56:47
>>953
ちょっと引っかかる点はあるもののとりあえずありがとう

>>944
>>943>>942でなんか言ってることへの質問でした
とくに変換したい文字列とかはありませんでした
960デフォルトの名無しさん:2008/02/16(土) 00:20:06
デバッグという言葉は知っているが意味を知らない所から推測するに
なんちゃって管理者っぽいことをしてたんじゃないか?
961デフォルトの名無しさん:2008/02/16(土) 01:45:16
>>957
いや、2005を使うのは別にいいよ。
962とけび:2008/02/16(土) 12:08:37
931です。

いろいろ調べましたら、debianのdfのソースやfreebsdのソースを
見ることができたのですが、OS依存やシンボリックリンクで
異なるマウントポイントになっているのを検出が面倒なので
932の方のやり方で対処しました。
ありがとうございます。
963デフォルトの名無しさん:2008/02/17(日) 19:38:36
はじめましてです。
IT関係の仕事に転職を考えていてC言語、JAVAという言葉を知っているのですが何から手をつけたらいいか分かりません。

今やっていること。
基本情報処理の資格本購入。
初級シスアドの資格本購入。
自作PCの本の購入しPC内部の基礎を学ぼうと思いました。

希望職種は、システム運用を希望しています。
964デフォルトの名無しさん:2008/02/17(日) 19:55:39
>>963
買うだけじゃなくて試験もうけろ。もうすぐ締め切りだぞ。
あと、自作で何か作れ。パクリでもいい。むしろパクれ。世に出さなくていいから。
965デフォルトの名無しさん:2008/02/17(日) 20:01:00
本って買うだけで頭よくなった気がするよな
966デフォルトの名無しさん:2008/02/17(日) 20:17:58
初級シスアドの本はとりあえずゴミ箱いきでもよくね?
役に立たないことで有名かつ、もうすぐ試験そのものがなくなるし・・・

言葉を知ってるだけ、本を持つだけ、学ぼうと思うだけなんて小学生でもできる。
転職考える人間ってことは社会人でしょ?自分でとりあえずやってみるって選択肢はないのか?
967デフォルトの名無しさん:2008/02/17(日) 20:27:48
>>963
>何から手をつけたらいいか分かりません
まず本を読むところからはじめればいいじゃないか
968デフォルトの名無しさん:2008/02/17(日) 20:42:28
>>963
JAVA 程度のことは常識として知っておかなくてはならないと思います。
C も同じく、かもしれませんが、素直にどうぞ、とはいえないつらさがあります。
今なさっていることで、間違いはないと思います。道のりは長いのですが、
いずれ知らなければならないことですから、回避するわけにもいきますまい。
いろいろ知るうちに、より詳しい方向性が見えてくるかもしれません。
969デフォルトの名無しさん:2008/02/17(日) 21:19:08
>>963
私がいる…
職業訓練校でシスアド勉強したけど、イマイチ…

現在、サバ管やってみたくて求職ちう。
970デフォルトの名無しさん:2008/02/17(日) 21:56:39
>>964
作れ、といったところで、963はCやJavaが
プログラムを作るためのものであるということを
認識していない可能性が考えられる。
971デフォルトの名無しさん:2008/02/17(日) 22:02:34
Cっておっぱいまでだっけ?本番だっけ
972デフォルトの名無しさん:2008/02/17(日) 22:49:09
中出しまで
973デフォルトの名無しさん:2008/02/17(日) 22:56:04
ちなみにC++っていうのは合成するとC*
つまりアナルまでってこと。
974デフォルトの名無しさん:2008/02/17(日) 23:00:38
軽く席替えプログラムなんか作ってみてくれ
975デフォルトの名無しさん:2008/02/17(日) 23:03:54
どうやっても意中の彼女が隣の席になりません
976デフォルトの名無しさん:2008/02/17(日) 23:13:30
仕様です
977デフォルトの名無しさん:2008/02/17(日) 23:27:17
60点だな大アマでだぞ
978デフォルトの名無しさん:2008/02/18(月) 00:17:52
963です。
970さん、、、すいません。知りません。

すこしずつ、覚えていきます。

覚えるのにいいプログラムとかあれば教えてくただければ幸いです。

今の仕事は、一応保守になりますけどITではなく機械のメンテをやっています。
そこの仕事はまだITの知識は必要ないし、業界的にも下火でもうやっていっても会社があり続けるか
不安でそんなところにしがみつくよりも転職活動を始めて転職できるときにしたいと思いました。

世の中不安のない業界なんてないぞといわれそうですが、潜在的でもなくももうすでにあちらこちらで
その兆候が表面化していて危ないぞという話ではじめている。
しかも、職場の雰囲気も最悪でブラック企業そのもので昭和の高度経済成長初期の考え方みたいな感じで
分かりやすく言うと気合だけ体育会系の不良ばかりの部活みたいな感じです。

なので、できるときにできることをする。
自分の人生なので、悔いのないようにしたいので転職を考えて、転職先としては、同じような感じではあるが
知識は全く別物のシステム系の運用サポートを考えています。
ただ、どんな業界のどんなシステムの運用にするかはまだよく分かっていません。
これからそういったところも勉強していきたいと思います。
979デフォルトの名無しさん:2008/02/18(月) 00:34:41
いい文章だが読むのがめんどい
980デフォルトの名無しさん:2008/02/18(月) 00:50:36
システムの運用に必ずしもエキスパート並のプログラムの知識が必要というわけでない。
機器メンテだってフライスやネジ加工の知識なくてもやっていけるが同分野の知識ならあるに越したことはないって感じだろ?
どっぷり一つの知識のエキスパートになるのもいいが、それだと結局今のように
先行きが不安になってくると鞍替えすることになってしまう。
まずはどういう分野がありどういう知識があるのかを知るのが先かな?
981デフォルトの名無しさん:2008/02/18(月) 00:55:12
ダメな奴は何をやってもダメ
982デフォルトの名無しさん:2008/02/18(月) 00:55:40
自己紹介されましても。
983デフォルトの名無しさん:2008/02/18(月) 09:59:20
>>963
午後問題のプログラミングは、
参考書2冊、プログラム専用基本問題集4冊 合計6冊を二年がかりで潰して
ようやくコードが読めるようになったyo

午前はまだやってない
984デフォルトの名無しさん:2008/02/18(月) 10:36:06
どちらかといえば午前の方が難しかったりする
985デフォルトの名無しさん:2008/02/18(月) 11:17:17
午後は時間が足りない
986デフォルトの名無しさん:2008/02/18(月) 11:29:20
午後は眠くなる
987デフォルトの名無しさん:2008/02/18(月) 21:11:42
午後は文章読解力の問題
988デフォルトの名無しさん:2008/02/18(月) 22:14:50
>>978
この業界で転職をするんだったら、資格より業務経歴書が重要
自分で勉強をするよりどっかの会社にもぐりこんで業務経験をつむのがよろしいかと

忠告
IT業界もブラック企業ばかりだから、転職には十分注意を!
中にはまじめな会社がある
989デフォルトの名無しさん:2008/02/18(月) 22:24:00
基本的に小規模な会社って良心的じゃね?
以前全従業員50人くらいの会社で働いてたけど、いろいろと融通きいてくれたり、無理すぎる体制とか受注しそうになったとき、上の人が断ってたりしてくれてたな。
で転職で今は全部で20人くらいの超小規模だけど、こっちも同様に社員のことを大事に扱ってくれてるな。

大手企業に就職した知人はノイローゼ気味になってる・・・
990デフォルトの名無しさん:2008/02/18(月) 22:25:10
20人で小規模なん?
991デフォルトの名無しさん:2008/02/18(月) 22:28:31
>>989
小さいところは社長の力が大きいだけ。
992デフォルトの名無しさん:2008/02/18(月) 22:28:45
>>990
全従業員たった20人だよ。
小さい会社っしょ?
その分気楽にできるからいいけど。
993デフォルトの名無しさん:2008/02/18(月) 22:29:59
まー大企業だと上のやつらは社員の名前すら覚えてないからなー
いわゆる使い捨ての駒のような感覚で扱ってるんだろ
994デフォルトの名無しさん:2008/02/18(月) 22:33:33
int array[10];
int *ptr;
ptr = array;

配列名の後に[]をつけずに、配列名だけ単独で書くと[配列の先頭要素へのポインタ]という解釈は間違っていますか?
厳密にお願いします。
995デフォルトの名無しさん:2008/02/18(月) 22:34:26
>>994
あってる
996デフォルトの名無しさん:2008/02/18(月) 22:35:13
合っている。
式の中では、配列型はポインタ型へ暗黙の変換を持つという規則がある。
997デフォルトの名無しさん:2008/02/18(月) 22:36:48
>>996という規則はあるが、例外があり、sizeof, &のオペランドの場合は例外。
998デフォルトの名無しさん:2008/02/18(月) 22:40:35
なるほど、ありがとうございます。
999デフォルトの名無しさん:2008/02/18(月) 22:40:51
 
1000デフォルトの名無しさん:2008/02/18(月) 22:41:17
      _ミ`ー‐、
        `⌒丶、'ー-、_       +             十
           ̄\―ヽ._ 二_‐-
             \   \   ̄ ‐-       ̄二二_ ―_,r'⌒ヽー、
              ̄\ ̄ \‐-     ╋__..ニ -―― ´ ̄ __... -―一┘
        +  ニニ ー--\   ⌒Y´ ̄ `丶  __ __,. -‐二´  ̄ ―
               _   ヽ.._ ^ω^  ノ -‐
                  /⌒ 丶'   ⌒)          バカにはコピペできないカッコいいAA
                  / ヽ     / /
                 / /へ ヘ / /l    
                 /  \ ヾミ  //
                (__/|  \___ノ/
                    〉    /
           -=≡ /⌒⌒ヽ/⌒ヽ/\          
    -=≡ ./⌒ヽ,  /     ̄   \\ ヽ/⌒ヽ,     
   -=≡  /   |_/__i.ノ ,へ _    _/ \\/   | /ii    
   -=≡ ノ⌒二__ノ__ノ  ̄ ̄     \ヽ  |./ |i    
  -=≡ ()二二)― ||二)        ()二 し二) ― ||二)
  -=≡ し|  | \.||             .|   .|\ ||
   -=≡  i  .|  ii               i  |  .ii
    -=≡ ゙、_ ノ               .゙、 _ノ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。