C言語なら俺に聞け( ..
2:デフォルトの名無しさん
07/06/25 06:32:36
過去スレ
Part 1 スレリンク(tech板)
Part 2 スレリンク(tech板)
Part 3 スレリンク(tech板)
Part 4 スレリンク(tech板)
Part 5 スレリンク(tech板)
Part 6 スレリンク(tech板)
Part 7 スレリンク(tech板)
Part 8 スレリンク(tech板)
Part 9 スレリンク(tech板)
Part 10 スレリンク(tech板)
Part 11 スレリンク(tech板)
Part 12 スレリンク(tech板)
Part 13 スレリンク(tech板)
3:デフォルトの名無しさん
07/06/25 06:55:44
└0^0┘ < これをグラディウスの後姿と書いた君!素晴らしい、そういう想像力はぼくちん好きだお♪
そういわれたら、なんかメガネじゃなくて後姿にしか見えなくなってきた。これが脳を刺激する
アハッ体験なんだね、良い勉強になった。
4:デフォルトの名無しさん
07/06/25 07:03:17
ビッ○バイパーだろ
5:デフォルトの名無しさん
07/06/25 07:06:55
Wikipedia項目リンク(%E3%82%B2%E3%83%BC%E3%83%A0)
Wikipedia項目リンク
さすが、メガネデヴピッツァヲタは詳しいぜ、参ったぜベイベー。
6:デフォルトの名無しさん
07/06/25 09:48:17
C言語なんですが
文字列の中の文字数を調べるstrlen()のように
ファイルの中の文字数を調べる関数ってありますか?
7:デフォルトの名無しさん
07/06/25 10:00:22
最後まで読もう
スレリンク(tech板:585-番)
8:デフォルトの名無しさん
07/06/25 10:44:15
OS:Linux
言語:c言語(posix準拠のC言語)
socketについて質問です。
socketを生成して、
bindせずにrecvfrom(ブロッキング)した場合、
終了方法(recvfromのブロックを解除する方法)はどのような方法がありますか?
9:デフォルトの名無しさん
07/06/25 14:10:34
bmpファイルを読み書きするライブラリってありませんか?
URLリンク(coconut.sys.eng.shizuoka.ac.jp)
ここのプログラムでは、なぜか画像が真ん中で切れて左右で入れ替わってしまいました。
AB→ABになってほしいところを、
AB→BAになってしまいました。
10:デフォルトの名無しさん
07/06/25 14:23:28
読み初めの位置が半分ずれてるんじゃない?
11:デフォルトの名無しさん
07/06/25 16:21:55
>>6
こんな感じかな
unsigned NumLen()
{
unsigned c = 0,num=0;
FILE *fp = fopen("text.txt","r");
while( (c = fgetc(fp)) != EOF)
num++;
return num;
}
12:デフォルトの名無しさん
07/06/25 17:36:25
wcコマンドのソース見てそっからパクりゃいいんでねぇべか?
13:デフォルトの名無しさん
07/06/25 20:30:33
conio.hがないといわれました。
debian:~$ gcc ch05-04.c
ch05-04.c:2:19: error: conio.h: そのようなファイルやディレクトリはありません
はじめてconio.hというのを見ました。ちなみにconio.h というのは必要ですか?
独習cに下みたいなのがあったのですけど、これってgetchar でできますよね?
#include <stdio.h>
#include <conio.h>
int main(void)
{
char mess[80];
int i;
printf("input message (less than 80 letters)\n");
for(i=0; i<80; i++){
mess [i] = getche();
if(mess[i] == '\r')break;
}
printf("\n");
for(i=0;mess[i] != '\r' ;i++) printf("%c",mess[i] + 1);
return 0;
}
14:デフォルトの名無しさん
07/06/25 20:35:41
あ、できた。
conio.hの存在意義を教えてください。
15:デフォルトの名無しさん
07/06/25 20:41:00
コンソールI/Oはもっと色々できるのじゃよ
16:デフォルトの名無しさん
07/06/25 21:28:00
登録後、即出会えた出会い系サイトのみを紹介するブログ始めました。
2chと併用して使える、良質な即日系サイトのみを薦めております。
↓↓↓
【ブログ】URLリンク(deaiload.blog109.fc2.com)
17:デフォルトの名無しさん
07/06/25 22:07:12
>>14
文字色変えたりとかもconio.hで出来るよ。8色しかなかったっけ?
別にconio.hでなくてもできるのあるだろうけど。標準ではもちろん無理。
18:デフォルトの名無しさん
07/06/26 00:34:43
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上のプログラムは、オセロを作ってるんですが
関数test2でswichの中のcase5がうまく実行されません
そこで、どこまで実行できてるのか確かめるため
printfを途中に入れてみたところ、何故かうまく実行できるようになってしまいましたw
もちろん、printfをのけると、うまく実行してくれません。。。
一応動くので問題ないんですが、何故なんでしょうか?
19:デフォルトの名無しさん
07/06/26 00:46:41
ソースを見ずに回答すると、たぶんスタックを壊してる
20:デフォルトの名無しさん
07/06/26 01:30:28
>>18
test()で、x, yに対してノーチェックでx - 1などとしているので配列外を参照してしまっている。
ところで、いつからオセロは10x10になったんだ?
21:デフォルトの名無しさん
07/06/26 01:47:56
>>19
スタックの意味が分からないので調べ中。。
thx!
>>20
thx
関数testを次のように改変しました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
が、やっぱり実行してくれません><
作ってる時に確か10×10ぐらいかな〜と思ったのでw
22:18
07/06/26 02:03:26
スタックというのは変数のエラーなんだろうか
(違ったらスマソ)
確かに多次元配列を全ての関数に渡したりしてるけど
printfを入れると解消する問題なので、原因は別かなと思います
23:デフォルトの名無しさん
07/06/26 02:09:03
>>22
スタックという変数を格納する場所の破壊
24:18
07/06/26 02:36:57
>>23
thx。。
どの部分がスタックを破壊しているのか教えて頂けませんか?
もしくはスタックが破壊される原因を教えて下さい
25:デフォルトの名無しさん
07/06/26 03:38:40
スタックっていうか、そこかしこで配列外の領域にアクセスしてる気がするが。
とりあえず落ちるときの入力パターンぷりーず。
26:デフォルトの名無しさん
07/06/26 04:38:17
>>24
取り敢えずロジックをとばし読みして疑問に思ったところ
関数testの中で
> if(array[x-1][y]==2){ //上
ってやってるところがあるけど、xは0になる可能性があるよね。
てことは配列の領域外を参照していることになるけど、これは大丈夫?
配列の添え字にy-1を与えているところも同様。
次に関数test2の中で
> for(;y<=9;n++){
ってやってるところがある。でもyの初期値が設定されていないような気がする。
これだと(yに割り当てられた)スタックにたまたま積まれていた値の違いで動作が変わる可能性がある。
この辺の初期化してない変数なんかは言ってる問題が起きる典型的なパターンなんだけど。
27:デフォルトの名無しさん
07/06/26 04:39:54
あと質問には関係ない小さい点
void ai (int array[][10])
{
srand(time(NULL));
array[rand() % 10][rand() % 10] = 2;
}
srandはここでやるべきではないと思う。mainの先頭で一度やれば十分というか、そうすべき。
28:デフォルトの名無しさん
07/06/26 05:21:22
ソース丸ごと投げて見てもらうと自分のダメなとこ突っ込んでもらえるんだな。
オレも今度投げてみよう。
29:デフォルトの名無しさん
07/06/26 05:29:13
ソースも出さない、エラーメッセージも正確に書かないよりは答えてもらえる確率は高くて当然だろ。
30:デフォルトの名無しさん
07/06/26 06:27:16
{1,2,3,....,n}の中から要素数がl以下になる組み合わせをすべて求めよ
例えばn=3,l=2のときは{0,1}{0,2}{0,3}{1,2}{1,3}{2,3}{1}{2}{3}となるようなものです
お願いします
31:デフォルトの名無しさん
07/06/26 06:27:18
阿部さんに○×を出すともれなく△□を突っ込んでもらえますよ?
32:デフォルトの名無しさん
07/06/26 06:35:12
>>30
課題は自分でやれ。な?
33:デフォルトの名無しさん
07/06/26 06:44:06
>>28
暇つぶししたいくらい暇なときには突っ込んであげるよ。
34:デフォルトの名無しさん
07/06/26 06:47:01
いやいやmainでsrandなんてしたら関数aiを知らない人は意味分からんじゃん
やっぱり関数ai内に入れておくべき
35:デフォルトの名無しさん
07/06/26 06:47:27
>>34
妄言はそこまでにしとけ。
36:デフォルトの名無しさん
07/06/26 06:50:50
>>34
time(NULL) が返す値が、前回呼び出されたときと同じになるような、1秒以内に
連続して呼び出されるときは rand()が返すパターンが同じになるぞ。
37:デフォルトの名無しさん
07/06/26 06:52:38
>>36
フラグを入れるんだよ
static int flag;
if(flag==0){
srand(time(NULL));
flag = 1;
}
これでおk
38:デフォルトの名無しさん
07/06/26 06:53:25
>>37
先に言え、後だしで自分の落ち度を補って逃げるのは卑怯だぞ
39:デフォルトの名無しさん
07/06/26 06:56:31
ごめん
40:デフォルトの名無しさん
07/06/26 06:58:58
>>37
flagの最初の値は?呼び出されるたびに if(flag==0) を評価するの?無駄が多い。
mainで一度やっとけ。
41:デフォルトの名無しさん
07/06/26 06:59:26
>37
関数呼び出すたびに無駄なチェック入れんの?
42:デフォルトの名無しさん
07/06/26 07:03:35
>>37
他の関数でも同じことやるの?
有り得ないよね。
43:デフォルトの名無しさん
07/06/26 07:06:31
乱数ってのは何度も初期化されないから乱数なんだよ。
初期化は一度のみ。
それを保証するには main で初期化するのが一番。
44:18
07/06/26 08:44:31
寝てしまった。。
答えてくれた方、申し訳ない&thx!
そ し て
問題点分かりました!
>>26の言うとおり、配列の要素が-になるのを回避、x,yを0で初期化したら
直りました!初期化しておかないと駄目なんだな!
あと、srandはとりあえずmainでやっておきます!
45:デフォルトの名無しさん
07/06/26 08:54:36
既に>20で指摘されている罠。
46:18
07/06/26 09:44:16
そこは、>>20で変更したんですが、(case8が出来てないけど)
問題は、x,yの初期化という事です。
47:デフォルトの名無しさん
07/06/26 09:56:00
VisualC++ExpressEditionを使ってるんですが、
#include <stdio.h>
main()
{
printf("私の名前は、山本一郎です\n");
}
(名前はrei1_2)というプログラムをビルドすると、
------ ビルド開始: プロジェクト: START_C, 構成: Debug Win32 ------
コンパイルしています...
rei1_2.c
リンクしています...
rei1_2.obj : error LNK2005: _main は既に rei1_1.obj で定義されています。
C:\Users\tokimaru\Documents\Visual Studio 2005\Projects\C\START_C\Debug\START_C.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
ビルドログは "file://c:\Users\tokimaru\Documents\Visual Studio 2005\Projects\C\START_C\START_C\Debug\BuildLog.htm" に保存されました。
START_C - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
というエラーが出てしまいます。
何所がおかしいのかよくわかりません。
教えてください。お願いします。
48:デフォルトの名無しさん
07/06/26 10:01:52
>>47
> _main は既に rei1_1.obj で定義されています
そりゃだめだ。リンクさせないで別物のソースとしてコンパイルせい
49:デフォルトの名無しさん
07/06/26 10:05:32
rei1_1.c をどっか別の所に移動するか、
新しくプロジェクトを作るか。
50:デフォルトの名無しさん
07/06/26 10:15:37
1を消さないんだったら同じソリューションで別プロジェクト作るのがいいかな
51:47
07/06/26 10:17:04
C:\Users\tokimaru\Documents\
って貼っちゃいましたけど、この情報から個人情報が割れたり、PCに侵入されたりしませんよね?
52:デフォルトの名無しさん
07/06/26 10:28:02
IP 分かんないから侵入とかは大丈夫だとは思うけど、あまり貼るべきではないな。
53:デフォルトの名無しさん
07/06/26 10:34:14
>>52よかった〜(汗)
ところで、48さん、49さん、50さんの言うようなやり方以外の方法ありますかね?
僕は初心者なのでよくわかりません。
54:デフォルトの名無しさん
07/06/26 10:39:48
>>53
だから他と被らない関数名にすりゃええやろ。
55:デフォルトの名無しさん
07/06/26 10:45:34
>>53
じゃあいったんプロジェクトから1を外せ
選択してDELキーで消える
ファイルそのものは残るから、あとで既存の追加で戻せる
56:デフォルトの名無しさん
07/06/26 10:49:36
>>54さん、>>55さんありがとうございました。
57:デフォルトの名無しさん
07/06/26 11:18:18
typedef struct node* link;
struct node { int item; link next; };
typedef link Node;
link deleteNext(link x){
link t = x->next; x->next = t->next;
return t; }
link t=x->next;
新たなlink tを作り、tにxの指し示すリンクと同じitem,リンク先を持たせている
x->next = t->next;
xのリンク先はtが指し示すリンク先にする
で合ってますか?
だとしたらreturnでtだけ返すのだからx->nextを指定しても何の意味もないと思うのですが、何か記号の意味を履き違えている気がします
58:デフォルトの名無しさん
07/06/26 11:36:45
malloc も free もないんだが。
恐ろしいコードに見える。
59:デフォルトの名無しさん
07/06/26 11:46:36
>>57
関数の動きはこんな感じ。
・xの指す先をtにコピー。xの指す先をtの指す先に変更。tを戻す。
つまり、リンクリストからxの指す先を外し、それを返している。
>>58
削除関数だからmalloc()は要らないわけだし、tを返すのは呼び出し元でfree()するためだろ。
60:デフォルトの名無しさん
07/06/26 11:48:24
>>57
link はポインタだから作るわけじゃないよ、アドレスを保存してるだけ。
A→B→C
の状態を
A→C
に変えてる
Bは宙に浮いてる状態で返してる。消すためだろう。
61:デフォルトの名無しさん
07/06/26 11:49:27
書き換えるとこうなるのか。
--
link t = x->next; // 削除対象(へのポインタ)を一旦保存
x->next = x->next->next; // 削除対象を迂回するように接続しなおし
return t; // 削除対象を返却
62:デフォルトの名無しさん
07/06/26 13:03:00
feof()はファイルの終わりをどこで判定してるんでしょうか?
例、ファイルの中身が
This is a pen
の場合は、nに達した時点で0を返すのか、EOFで0を返すのか
63:デフォルトの名無しさん
07/06/26 13:05:15
やれば分かる。
64:デフォルトの名無しさん
07/06/26 13:10:09
確かにこの程度なら実際に試してみるのが一番かもしれない
65:デフォルトの名無しさん
07/06/26 13:17:26
l = 0;
while(!feof(fp)){
ch = fgetc(fp);
printf("%c : %d \n",ch,ch);
if(ferror(fp)){
printf("ファイルの読み込みエラー\n");
exit(1);
}
l++;
}
を実行してみたら-1も出力したのでEOFの次でループ終了ですかね
66:デフォルトの名無しさん
07/06/26 13:27:09
おいおい
67:デフォルトの名無しさん
07/06/26 13:28:43
「EOF」 という言葉はどこを意図して使ってる?
68:デフォルトの名無しさん
07/06/26 13:29:31
-1じゃないんですか?
69:デフォルトの名無しさん
07/06/26 13:30:58
EOF を読み込んだら終了、だよね?
70:デフォルトの名無しさん
07/06/26 13:32:01
意図しようとしてるのは同じことなんだろうか?
ならいいんだけど。
71:デフォルトの名無しさん
07/06/26 13:32:23
EOFを読み込んだら終了ならEOFが出力されるのはおかしい
72:デフォルトの名無しさん
07/06/26 13:34:28
EOF を読み込んだら feof が真を返すようになるんだっしょ?
73:デフォルトの名無しさん
07/06/26 13:45:05
while(!feof(fp)) だからEOFに達した時点でループ終了してないとダメなんじゃないの?
74:デフォルトの名無しさん
07/06/26 13:46:16
EOF に達しはしたけど、読み込んではないよね?
75:デフォルトの名無しさん
07/06/26 13:46:58
何か二人で同じことを言おうとしてる気がしてならない。
76:デフォルトの名無しさん
07/06/26 13:47:06
実行すると-1返って来るよね
読み込んでるってことじゃないの?
77:デフォルトの名無しさん
07/06/26 13:48:29
とりあえずこんな感じだ。
#include <stdio.h>
#include <ctype.h>
int main() {
int ch, b;
FILE *fp = fopen("hoge.txt", "r");
if(fp == NULL) {
return 1;
}
do {
ch = fgetc(fp);
b = feof(fp);
printf("%c : %02X / %d\n", ch, ch, b);
} while(!b);
}
T : 54 / 0
h : 68 / 0
i : 69 / 0
s : 73 / 0
: 20 / 0
i : 69 / 0
s : 73 / 0
: 20 / 0
a : 61 / 0
: 20 / 0
p : 70 / 0
e : 65 / 0
n : 6E / 0 ← n が読み込まれて、ファイルポインタは EOF に達しはしているが、まだ読み込んでないためそこが EOF かどうか分からないでいる
? : FFFFFFFF / 1 ← EOF が読み込まれたため、EOF に達した事が判明し、feof が真を返すようになる
78:デフォルトの名無しさん
07/06/26 13:50:58
>>76
-1 が返って来るのは、当然読み込んでるということ。
でも、その後にそれを表示してから、
その後にようやく feof をチェックしてるでしょ。
そっちのプログラムは。
で、そこでループが終了してる。
つまり、-1 が読み込まれた後に feof を実行すると
真を返すようになっている、ということだ。
79:デフォルトの名無しさん
07/06/26 14:01:32
fgetc()は、エラーとかファイルが終わってるとかで、読んだ文字がない時にEOFを返す。
「EOFを読み込んでいる」のではない。
80:デフォルトの名無しさん
07/06/26 14:03:01
「0 個のりんごがある」 と 「りんごが 1 個もない」 程度の話だよ、それは。
81:デフォルトの名無しさん
07/06/26 14:10:27
feofはファイルの末端に来ました
fgetcは読んだ文字がないので-1を返しました
feofは真を返しました
って話?
82:デフォルトの名無しさん
07/06/26 14:14:36
ファイルポインタは初めてファイルの末端に来ました
feofは偽を返しました
fgetcはもう読み込める文字がないので-1を返しました
feofは真を返しました
こうだな。
83:デフォルトの名無しさん
07/06/26 14:15:49
初めて、は余計か。
ファイルポインタはファイルの末端に移動してきました
feofは偽を返しました
fgetcはもう読み込める文字がないので -1 を返しました
feofは真を返しました
こうか?
84:デフォルトの名無しさん
07/06/26 14:20:15
while(fgetc(fp) != EOF)
の方がいいんじゃないの?
85:デフォルトの名無しさん
07/06/26 14:26:53
feof の挙動を調べたいみたいだよ。
86:デフォルトの名無しさん
07/06/26 14:27:59
1文字ずつ読んだ場合に加えて、いっぺんに読んだときどうなるかも調べてみては
87:デフォルトの名無しさん
07/06/26 14:30:54
>>84
それは趣旨が違うと思った
>feof()はファイルの終わりをどこで判定してるんでしょうか?
88:デフォルトの名無しさん
07/06/26 15:04:57
pthreadでデタッチスレッドを生成し、スレッドが終了した後に
仮想メモリが増えてしまいます。
#include <pthread.h>
#define THREAD_COUNT 50
void *thread_func(void *arg);
int main()
{
char command[128];
int i;
pthread_t thread[THREAD_COUNT];
sprintf(command, "grep VmSize /proc/%d/status", getpid());
for (i = 0; i < 3; i++) {
sleep(1);
system(command);
}
for (i = 0; i < THREAD_COUNT; i++) {
pthread_create(&thread[i], NULL, thread_func, &i);
pthread_detach(thread[i]);
}
for (i = 0; i < 10; i++) {
sleep(1);
system(command);
}
return 0;
}
89:88続き
07/06/26 15:06:07
void *thread_func(void *arg)
{
sleep(3);
}
が動かしたソースで、実行結果が↓こんな感じです。
VmSize: 1392 kB
VmSize: 1392 kB
VmSize: 1392 kB
VmSize: 410996 kB
VmSize: 410996 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
90:88続き
07/06/26 15:10:54
色々調べたところ
410996kBは大体1392+8192kB×50(スレッド数)
42356kBは大体1392+8192kB×5
ぐらいになっているようでした。
8192kBはスタックサイズから来ているようで、スタックサイズを
変更してみたら仮想メモリサイズは変わりましたが、数式的には
上記と同じでした。
また、スレッド数を変えると410996kBのところがスレッド数に
応じた数に変わるのですが、最終的に落ち着く42356kBは
変わりませんでした。
増え続けることはないのでメモリリークとは違うと思うのですが
気にすることはないでしょうか。×5がどこから来ているのかとか
どうも気になってしまって・・・
何か分かりましたら教えてください。
91:88続き
07/06/26 15:11:47
すいません。ちなみに開発環境はRedHat 9.0、gcc 3.2.2です。
92:デフォルトの名無しさん
07/06/26 15:36:15
時間をずらして detach していった場合に
42356kB で止まるのだとしたら、
内部でいくつかの領域を確保したままにしてるのかも?
次にまた使うときのためにとか。
MacOSX 10.4.10 gcc 4.0.1 だと、
スレッド1つ分のサイズが残るみたいだ。
93:デフォルトの名無しさん
07/06/26 15:36:17
>>91
仮想メモリサイズの制限を越えたための拡張とかは?
94:88続き
07/06/26 15:49:52
>>92
色々観察してみると、同時に実行されるスレッド数が1つの場合、
1392kB+8192kB×1くらいになって、スレッドが終了しても
減りませんが、何度スレッドを起動してもこれ以上増えることは
ありません。
同時に実行されるスレッド数が5までの場合もこの傾向は同じ。
6を超えるとスレッド実行中の仮想メモリは増えるけど、スレッドが
終了すると5スレッド分の仮想メモリ量までは戻る、という
感じです。
5スレッド分は次回使いまわすために確保するようになってる
んでしょうかね。
>>93
ulimit -a で見たら、仮想メモリはunlimitedに設定されて
いました。
95:デフォルトの名無しさん
07/06/27 00:41:18
この脆弱性は文字列長の確認を適切に行わない strcpy()の呼び出しが原因
URLリンク(headlines.yahoo.co.jp)
96:デフォルトの名無しさん
07/06/27 00:50:55
>>95
あらら。
97:デフォルトの名無しさん
07/06/27 01:29:45
strcpyなんて使うなよ・・・
98:デフォルトの名無しさん
07/06/27 01:32:39
あっ、やっぱ問題があった、だから 使うなよ って後から言うのは卑怯。
さも知っていたかのようなことをいうやつに限って、そいつ自身が
ありきたりのタブーをやらかしていることがある。
99:デフォルトの名無しさん
07/06/27 01:34:17
いやいやせめてstrncpy使うだろ
昔から問題は指摘されてたんだしさ
100:デフォルトの名無しさん
07/06/27 01:39:42
単に文字列の整形ならsprintf()の方がいいと思う
101:デフォルトの名無しさん
07/06/27 02:10:14
ブラックジャック先生なら整形に失敗しないYO!
102:デフォルトの名無しさん
07/06/27 02:57:33
おいっ、おまいら、はよ1進数について議論せいや?どんな推論が出るかにゃ〜〜 ♥
103:デフォルトの名無しさん
07/06/27 03:11:34
wktk
104:デフォルトの名無しさん
07/06/27 03:12:03
実質0しか表現できないっしょ
数え始めた瞬間に桁上がりの無限ループ
105:デフォルトの名無しさん
07/06/27 04:07:08
>>104 それ、問題提起した俺が最初に提唱したぞな。それじゃ詰まらないからぁ
ここであらぬ妄想をぶっこく香具師らに推論させたいのよ ♠
106:デフォルトの名無しさん
07/06/27 04:14:33
おまいの提唱なんぞ知らんがな
>>102見てぱっと思ったから書いただけじゃ
107:デフォルトの名無しさん
07/06/27 04:15:34
>>106
スレリンク(tech板:966番)
108:デフォルトの名無しさん
07/06/27 08:26:21
Wikipediaに答があることをいつまでぐだぐだと……
109:デフォルトの名無しさん
07/06/27 08:29:36
それ以前にスレ違い。
110:デフォルトの名無しさん
07/06/27 09:41:24
気を使うのは外からの入力に対してであって
自分で作って自分で使うバッファは好きなの使えばいいと思う
111:デフォルトの名無しさん
07/06/27 10:00:38
>>98
>さも知っていたかのようなことをいう
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
>>110
勿論。
112:デフォルトの名無しさん
07/06/27 10:12:48
>>111
> 君が無知だっただけ。
???>>98のどこをどう読んだら無知になるんだろうか?
113:デフォルトの名無しさん
07/06/27 10:22:34
>>108
Wikipedia項目リンク
114:デフォルトの名無しさん
07/06/27 10:52:54
>>98 なんて恥ずかしいセリフを言える時点で頭おかしい。
115:デフォルトの名無しさん
07/06/27 11:00:28
いや、恥ずかしいのは無知だとかありえない勘違いをしたこいつ↓
111 名前:デフォルトの名無しさん 投稿日:2007/06/27(水) 10:00:38
>>98
>さも知っていたかのようなことをいう
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
116:デフォルトの名無しさん
07/06/27 11:02:10
技術者としては知ってて当然。 技術者としては知ってて当然。 技術者としては知ってて当然。
技術者としては知ってて当然。 技術者としては知ってて当然。 技術者としては知ってて当然。
技術者としては知ってて当然。 技術者としては知ってて当然。 技術者としては知ってて当然。
strcpyの問題点を知っているだけで技術者気取りになれる新米プログラマに失笑です ><;
ちなみに、そんなこと俺も当然知ってたけど、なんで俺が無知になるわけ?w
Lhacaにそれが使われていたなんて、俺は知らなかったけど、strcpyくらい当然知ってましたよ ( ^ー^)b
117:デフォルトの名無しさん
07/06/27 11:03:56
キチガイはすぐ暴れるから困る。
118:デフォルトの名無しさん
07/06/27 11:04:24
111 名前:デフォルトの名無しさん 投稿日:2007/06/27(水) 10:00:38
>>110
勿論。
↑おいおい、すでに問題としてあげられたのに、何知ったかぶっこいて同意してんの?(苦笑)
>>111 ←こいつ最高に知ったかのアホだな。恥ずかしい。プログラマなんてやめた方が良いぞ?
人生の大半を無駄にして終わるぞ?
119:デフォルトの名無しさん
07/06/27 11:17:59
勘違い野郎こそ知ったかぶるから困る。何これ?痛すぎ、必死すぎ
>>97 = >>99 = >>111 < こういう奴が三流プログラマになって世にあらぬ
欠陥品を流通させちゃうんだよね。で、後でアップデートパッチでサポート。
サポートしてんだからちゃんと仕事してますよって間違ったアピールをして
ユーザが離れていって廃れるソフトウェア会社勤務乙。
120:デフォルトの名無しさん
07/06/27 11:35:03
>>119
>痛すぎ、必死すぎ
121:デフォルトの名無しさん
07/06/27 11:50:47
URLエンコードってどうやるんですか?
122:デフォルトの名無しさん
07/06/27 12:10:24
C勉強したいと先輩に言ったらC♯勉強しろと言われたんですが、
CとC++とC#ってどんな違いがあるんでしょうか?
123:デフォルトの名無しさん
07/06/27 12:28:23
なんでその時に先輩に直接聞かなかったの?
124:デフォルトの名無しさん
07/06/27 12:29:22
>>121
仕様を聞いてるのかコーディングを聞いてるのか
125:デフォルトの名無しさん
07/06/27 13:37:21
コーディングです、入力した文字をGoogleで検索させたいのですが
126:デフォルトの名無しさん
07/06/27 13:41:57
エンコードの必要な文字コードかどうか判定して、
必要ならエンコードすればいい。
127:デフォルトの名無しさん
07/06/27 13:47:55
>>125
まずUTF-8に変換して、1バイトずつ見て非ASCIIを変換。
128:デフォルトの名無しさん
07/06/27 13:59:30
仕様はわかってるらしいから、そういう説明じゃ足りないんじゃないのかな
数値を16進文字列にするやりかたがわからないとかじゃないの?
129:デフォルトの名無しさん
07/06/27 14:13:40
unsigned char にキャストして sprintf で %%%02X すりゃいいと思うけど、
sprintf を使う場合はバッファオーバーフローに注意だな。
別にこの程度なら自前で変換してもいいんだけどね。
130:デフォルトの名無しさん
07/06/27 14:32:11
>>126-129
ありがとうございます、>>128さんの言うとおりでした
>>129さんを参考にしてやってみます
131:デフォルトの名無しさん
07/06/27 14:47:25
質問です。
C言語って色々命令作れる前に、最初からhファイルを読み込んで使える、
いわばインストール時に標準搭載されている命令ってあるじゃないですか。studio.hのprintfやmath.hのsqrtとか
ああいう命令を分かりやすくどんな用法で使えばいいのかが全て網羅してある
本またはサイトはありますか?
132:デフォルトの名無しさん
07/06/27 14:49:28
>>131
標準ライブラリ関数でぐぐれ
133:デフォルトの名無しさん
07/06/27 14:53:42
>>131
JIS
134:デフォルトの名無しさん
07/06/27 15:15:53
>>131
命令て。
まず入門書くらい買え。
135:デフォルトの名無しさん
07/06/27 15:16:24
ああ、「本または」って書いてあるね。すまんすまん。
じゃ、「作ってわか(ry
136:デフォルトの名無しさん
07/06/27 17:01:07
>>132-135
ありがとうございます。参考になりました
137:デフォルトの名無しさん
07/06/27 20:05:46
文字列の数字を消したいプログラム(例えばAB1C9をABC)をつくりたいんですけど
下のソースではうまく消えません。もしよければどのようにすればいいか指導お願いします。
#include <stdio.h>
void kesi(char *str){
char c;
while(*str!='\0') {
c=*str;
if(c<'0'||c>'9'){ //数字でないならば
*str=c;
}
str++;
}
}
int main(void){
char str[100];
scanf("%s",str);
kesi(str);
printf("%s",str);
return 0;
}
138:デフォルトの名無しさん
07/06/27 20:12:34
消した分だけ後ろの文字列を前に詰めないといけない。
void kesi(char *str) {
char *to = str;
while (*str != '\0') {
char c =*str;
if (!isdigit(c)) {
*to = c;
to++;
}
str++;
}
*to = '\0';
}
139:デフォルトの名無しさん
07/06/27 20:23:48
138さん返信ありがとうございます。 char *toとしてますが、
またポインタ宣言しなければ、ダメなんでしょうか??
あと初心者なのでisdigitとかまだよくわからないです…。もしよければアドバイスおねがいします
140:デフォルトの名無しさん
07/06/27 20:27:42
宣言しなきゃコンパイルできないし、isdigitはググれば山ほど出てくる
141:デフォルトの名無しさん
07/06/27 20:30:57
137のソースではただのchar c; としてポインタで宣言しないでも
コンパイルは通ったんですけど…なぜポインタを使うのかよくわからなくて…。
142:デフォルトの名無しさん
07/06/27 20:32:55
138では、詰める前の文字を指すのにstrを使い、
詰めた後の文字を指すのにtoを使っている。
143:デフォルトの名無しさん
07/06/27 20:39:59
ポインタを使わないと、どこに文字をいれていいかわからないから
144:デフォルトの名無しさん
07/06/27 20:42:04
>>142さん、わかりやすかったです!ポインタの理由が理解できました!
145:デフォルトの名無しさん
07/06/27 21:15:37
>>98
でも有名な話ですよね。
146:デフォルトの名無しさん
07/06/28 00:02:40
キューのプログラムで
#define QUEUE 5
static int i = 0;
i = (i+1)%QUEUE;
で次の添字が得られる
とか書いてあるんですが、よくわかりません。
常にiは0である気がするんですが、どこが間違っています?
147:デフォルトの名無しさん
07/06/28 00:13:33
(0+1) % 5 == 1
(1+1) % 5 == 2
(2+1) % 5 == 3
(3+1) % 5 == 4
(4+1) % 5 == 0
(0+1) % 5 == 1
148:デフォルトの名無しさん
07/06/28 00:16:59
初期化とキーボード入力以外で文字列を一回で代入する場合はstrcat()しかないですよね?
149:デフォルトの名無しさん
07/06/28 00:21:51
そんなことないよ
150:デフォルトの名無しさん
07/06/28 00:22:37
>>147
ありがとうございます。
ですがもう少し。
a%bってあったら「aをbで割った余り」ですよね?
だとすると、
(0+1)%5 = 1%5 = 0?
ではないのですか?
151:デフォルトの名無しさん
07/06/28 00:23:13
>>149
何がありますか?
教えてください
152:デフォルトの名無しさん
07/06/28 00:23:30
って書いたらわかりました。
スレ汚しごめんなさい。
153:デフォルトの名無しさん
07/06/28 00:23:51
1÷5
1は5で割り切れないので終了。余り 1
154:デフォルトの名無しさん
07/06/28 00:24:31
strcpyとか
155:デフォルトの名無しさん
07/06/28 00:27:32
>>151
strncat,strcpy,ctrncpy,sprintf,sscanf
ざっと思いつくのでこの程度。
あと、可変個引数使うときにある、printfのやつ。
あんま使ったこと無いから忘れたけど、vsprintfだっけ?
156:デフォルトの名無しさん
07/06/28 00:28:03
>>152
どちらさまですか?
157:デフォルトの名無しさん
07/06/28 00:28:28
>>150
おぬしは間違いなくstaticについて理解していない。
なぜstaticが付いているのかを考えるのじゃ
158:デフォルトの名無しさん
07/06/28 01:02:20
質問です。
BASICのgotoみたいな命令はないのでしょうか?
159:デフォルトの名無しさん
07/06/28 01:02:33
Cで書いてコンパイルしたファイルを人に送ってもその人は実行できないんですか?
というかできなかったのです。一瞬だけ実行されてすぐ消えてしまいます。
どうすればいいかわかりますか?
160:デフォルトの名無しさん
07/06/28 01:05:29
>>158
gotoというそのまんまの命令がある
loop:
printf("test");
goto loop;
みたいに使う
>>159
コマンドプロンプト経由で使えばおk
161:デフォルトの名無しさん
07/06/28 01:06:30
あ、ちなみにif文で条件を満たしていなかったらmainの一番上まで戻るというのがやりたいのですが・・・・
162:デフォルトの名無しさん
07/06/28 01:10:52
>>160
そのファイル名のみを相手のコマンドプロントでコマンドさせるってことですか?
163:デフォルトの名無しさん
07/06/28 01:12:28
構造体とポインタはどちらのほうが理解するのが難しい?
164:デフォルトの名無しさん
07/06/28 01:13:18
>>161
int main(void){
start:
〜いろいろな処理〜
if(条件を満たしていない) goto start;
多分普通の人であれば
int main(void){
do{
〜いろいろな処理〜
}while(条件を満たしていない);
165:デフォルトの名無しさん
07/06/28 01:13:31
おつむのレベルによる。
166:デフォルトの名無しさん
07/06/28 01:14:04
>>162
渡したファイルはexe?
コマンドプロントで、exeのあるディレクトリに移動して実行すればオケ。
167:デフォルトの名無しさん
07/06/28 01:15:06
>>163
一般的にはポインタが難しいと言われる。
168:デフォルトの名無しさん
07/06/28 01:16:06
>>162
1.コマンドプロンプトを起動してもらう
2.コマンドプロンプトにexeファイルをドラッグアンドドロップしてもらう
3.Enterキーを押してもらう
これが一番手軽だと思う
169:デフォルトの名無しさん
07/06/28 01:17:32
>>167
ポインタって何に便利なの?
170:デフォルトの名無しさん
07/06/28 01:18:24
何に便利とか言い出すから一向に理解できないんだろ。
171:デフォルトの名無しさん
07/06/28 01:19:15
>>166
>>168
ありがとうございました
172:デフォルトの名無しさん
07/06/28 01:20:43
>>169
必要にならないと分かりにくいと思う
173:デフォルトの名無しさん
07/06/28 01:24:36
>>169
Nバイトの構造体配列をソートして並び替えることを考える。
このとき、Nバイトのコピーが頻繁に発生することになる。
構造体に対するポインタの配列として保存していた場合、ポインタのソートで済むことになる。
例えばポインタが4バイト、構造体が100バイト超とかで配列が1000超とかだとすれば
どちらが効率的かはわかるよね?
174:デフォルトの名無しさん
07/06/28 01:24:45
Cpad for Borland...ってやつで書いてるんですけどexeファイルがありません。
どうすればいいですか?
171と同一人物です
175:デフォルトの名無しさん
07/06/28 01:29:33
>>170
お前がその便利さを知らない、説明できないだけだろ?えせプログラマは
こんなところで質問者をたぶらかしてないで、へちょいプログラマで満足してろよ?
176:デフォルトの名無しさん
07/06/28 01:29:34
>>174
ファイルを保存している場所と同じ場所にexeファイルがあると思われ
177:デフォルトの名無しさん
07/06/28 01:30:55
>>175
へちょくないあなたがへちょい>>170の代わりに答えてあげてください
178:デフォルトの名無しさん
07/06/28 01:34:22
>>176
あるにはあるのですが、ドラッグアンドドロップはできませんし、
そのディレクトリに移動して 〜.exe と打っても実行されません
179:デフォルトの名無しさん
07/06/28 01:40:02
>>178
コマンドプロンプトって何かわかってるか?
180:デフォルトの名無しさん
07/06/28 01:42:45
なんか全体的に黒いやつですよね?
わかってるつもりです
181:デフォルトの名無しさん
07/06/28 01:43:02
Wikipedia項目リンク
182:デフォルトの名無しさん
07/06/28 01:45:17
>>180
「notepad」って打ってメモ帳が起動するか?
ドラッグアンドドロップでフルパスが表示されて、エンター押して実行できると思ったんだけどなぁ
183:デフォルトの名無しさん
07/06/28 01:48:14
>>182
メモ帳はでてきます。
でもファイルをドロップしようとすると○の中に×が入ってるようなのが出てきて
できません
184:デフォルトの名無しさん
07/06/28 01:49:57
もしかしてvistaか?
185:デフォルトの名無しさん
07/06/28 01:50:51
>>183 ちょっwwwwwww伏字エロいwwwwwwwww
ティ○ポの中にオ×コが入ってるようなので とか妄想しちゃうぞwwwww
186:デフォルトの名無しさん
07/06/28 01:51:04
>>183
xpとかだとドラッグアンドドロップできないようになってるのかな?
じゃぁあきらめてフルパス(c:\cpad\test.exeみたいなやつ)を打って実行するべし
入力面倒だけど。
187:デフォルトの名無しさん
07/06/28 01:54:18
>>186
Vistaですよ。
かなりめんどいってことですね〜〜…
ありがとうございました
188:デフォルトの名無しさん
07/06/28 01:55:23
VistaはD&Dできないのか・・・ ひとつ勉強になった。
189:デフォルトの名無しさん
07/06/28 01:56:12
セキュリティ云々でできなくなったそうだ
190:デフォルトの名無しさん
07/06/28 01:57:04
なぁ〜〜に、こうすりゃええがな。XPを仮想PCにインストール。仮想PCでプログラミング
あっ武勇伝、武勇伝、武勇でんでんででんでんっ♪
191:デフォルトの名無しさん
07/06/28 02:41:46
ポインタが無かったらprintfすら・・・
192:デフォルトの名無しさん
07/06/28 02:43:50
ファイル操作も出来ないね
193:デフォルトの名無しさん
07/06/28 03:03:13
そもそもポインタって何?実体は?それが理解できていないとダメ。
Wikipedia項目リンク
194:デフォルトの名無しさん
07/06/28 07:10:08
2つの文字列を指すポインタ(例えばs1はABC、s2はABを指してる)で
下のソースコードだと2つの文字列が改行にいくまで繰り返すって言う意味ですかね?
while((*s1 != '\n') || (*s2 != '\n'))
{〜〜
s1++;
s2++}
195:デフォルトの名無しさん
07/06/28 07:12:03
(;^ω^)恐ろしいコード
196:デフォルトの名無しさん
07/06/28 07:18:58
すいません、ちょっと適当に書き込んだんで…。
ホワイルの中身の意味が知りたくて。
197:デフォルトの名無しさん
07/06/28 07:21:18
>>194
そのロジックだと、s1、s2の改行文字の位置が揃っていないと誤動作しそうだが。
#つーか、>194自身が挙げたサンプルで死亡確定だな。
198:デフォルトの名無しさん
07/06/28 07:57:55
>>194
s1にもs2にも改行コードないからプログラム起動して即吹っ飛ぶ。
s1がABC\n、s2がAB\nだったとしても一致しないのでやっぱり吹っ飛ぶ。
そのコードはs1とs2の改行コード位置が一致した場合にループ抜ける。
199:デフォルトの名無しさん
07/06/28 08:00:03
〜〜の中にきっとbreakが含まれてるんだ
200:デフォルトの名無しさん
07/06/28 08:45:23
C言語の精度って小数点以下いくつなんでしょうか??
201:デフォルトの名無しさん
07/06/28 08:49:39
そういう精度の決まり方じゃない。
これの IEEE 方式。
Wikipedia項目リンク
202:デフォルトの名無しさん
07/06/28 08:50:57
言葉が足りなかった。
IEEE 方式のマシンが多い、と。
別にエクセス 64 のマシンでも C は使える。
C かどうかで決まるものではなく、
CPU が何かによって決まるもの。
203:デフォルトの名無しさん
07/06/28 10:07:58
うん、それで、小数点以下いくつなんでしょうか??
204:デフォルトの名無しさん
07/06/28 11:11:40
>>203
>>201に書いてあるだろ
205:デフォルトの名無しさん
07/06/28 11:14:24
>>203
だから小数点以下いくつという形の精度じゃないと。
「浮動」小数点ってのは、そういう事だ。
206:デフォルトの名無しさん
07/06/28 12:07:34
有効桁数って、確か中学で習うよな…?
207:デフォルトの名無しさん
07/06/28 14:02:25
10進数だとIEEEの64ビット浮動小数点は小数点以下15桁ぐらいかな。
但しそれに掛ける10のn乗という指数が付くわけだが。
208:デフォルトの名無しさん
07/06/28 14:16:16
有効桁数15〜16桁あたりだな。
本当は2進数で考えないといけないんだけど。
209:207
07/06/28 14:21:03
#include <stdio.h>
#include <values.h>
int main(void)
{
printf("%d, %Lg, %Lg\n", sizeof(long double), LDBL_MAX, LDBL_MIN);
printf("%d, %g, %g\n", sizeof(double), DBL_MAX, DBL_MIN);
printf("%d, %g, %g\n", sizeof(float), FLT_MAX, FLT_MIN);
return 0;
}
gcc 4.1.1 (i386-redhat-linux) で上記のソースをコンパイルして
動かすと結果はこう出る。
12, 1.18973e+4932, 3.3621e-4932
8, 1.79769e+308, 2.22507e-308
4, 3.40282e+38, 1.17549e-38
e から後ろの部分が指数で「掛ける10のn乗」を表す。
3.3621e-4932 は 3.3621 掛ける10の -4932 乗だ。
但し上記の結果は環境依存で、同じ gcc でもコンパイルオプションに
よっては変わってしまう。だから全てについてこうであるという保証は
できない。(values.h も gcc 独自のヘッダかも知れない)。ただ大雑把に
言えることは float よりは double、また double よりは long double
の方が多くの範囲をカバーできるかも知れないというだけだ。
(コンパイラによっては long double はないかも知れないが)。
210:デフォルトの名無しさん
07/06/28 17:00:08
ISO準拠の処理系ならlong doubleは必ずある。
209が使っている定数は<float.h>で提供されている。
211:デフォルトの名無しさん
07/06/28 17:01:51
long double は必ずある。
しかし、double と同じサイズのこともある。
212:デフォルトの名無しさん
07/06/28 17:10:52
putchar関数の意味がよくわかりません。
質問が抽象的すぎてごめんなさい
213:デフォルトの名無しさん
07/06/28 17:12:06
標準出力に文字(char)を一文字出力(put)する
214:デフォルトの名無しさん
07/06/28 17:42:10
…?
putchar('\n')
ってのはどういうことですか?
215:デフォルトの名無しさん
07/06/28 17:48:00
標準出力はわかるか?
通常は画面だと思っていい。
\n はわかるか?
改行コードをあらわすエスケープシーケンスだ
つまり、画面上で改行する、ということ
216:デフォルトの名無しさん
07/06/28 17:50:19
それは
printf("\n")
とは違うんですか?
217:デフォルトの名無しさん
07/06/28 18:07:45
printf は文字列を扱う
たまたまprintfで1文字出力するなら、putchar と同じ様になるな。
でも、printf の第一引数の文字列は % とか入ると違ってくるけどな。
218:デフォルトの名無しさん
07/06/28 18:08:09
"\n" は文字列
'\n' は文字
219:デフォルトの名無しさん
07/06/28 18:31:55
でもこの場合では意味することは同じなんですよね?
というか、putcharでできることはprintfでもできるんですか?
220:デフォルトの名無しさん
07/06/28 18:32:55
できるけど、効率は悪い。
221:デフォルトの名無しさん
07/06/28 18:35:29
それは打つ文字数が多くなるとかいうレベルの話ですか?
プログラムの内容には関係ないですよね?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5371日前に更新/185 KB
担当:undef