トップページ⇒tech
1001コメント253KB

C言語なら、俺に聞け! <26>

レス数が1000を超えています。これ以上書き込みはできません。
0001日下部?はつみみですNGNG
C言語質問スレッド Part 26

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ

<25> http://pc.2ch.net/test/read.cgi/tech/1024918442/
<24> http://pc.2ch.net/test/read.cgi/tech/1024033400/
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/

コンパイラなどのリンクは>>2-3 あたり
void日下部氏の激動の半生は過去スレを参照
0002デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

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

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

【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html
0003デフォルトの名無しさんNGNG
http://www.itnavi.com/asp/urldisp3.asp?Root1=7
0004デフォルトの名無しさんNGNG
今から考えると、僕の人生はvoidだった。
そう、何も作り出すことは出来なかった。
しかし、僕の中のstatic変数にはいろんな思い出がつまってる。
でももうダメだ。
いつの日からか発生したループは、スタックを食いつぶしながら
僕のメモリ領域をどんどん蝕んでいく。

もうダメだ・・・。

僕は決心して窓を開けた。

「このプログラムは不正な処理を行ったため・・・」
0005デフォルトの名無しさんNGNG
5
0006デフォルトの名無しさんNGNG
乙
0007デフォルトの名無しさんNGNG
>>1 ヽ(-д-)オツカレ・・・
0008デフォルトの名無しさんNGNG
むしろ>>4におつかれ。。。
0009デフォルトの名無しさんNGNG
ほー
0010デフォルトの名無しさんNGNG
namespace {
>>4; //翻訳単位に隔離しますた
}
0011デフォルトの名無しさんNGNG
fgetcの戻り値は、EOF以外なら何でもunsigned charに入れていいですか?
0012デフォルトの名無しさんNGNG
>>11
いいよ、むしろ漏れの以下略
0013デフォルトの名無しさんNGNG
0〜UCHAR_MAX (一般に0〜255) とあるから (ANSI C言語辞典)
いいのではないかな。>>11
001411NGNG
ありがとう。>>12-13
0015デフォルトの名無しさんNGNG
↑返却値が 0〜UCHAR_MAX ということで↑
0016過去ログその1NGNG

25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html (予定)
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html (予定)
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html (予定)
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
0017過去ログその2NGNG
15 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
0018過去ログ書けん・・・NGNG
なぜか5以下のリンクを張ろうとすると
「名前いれてちょ」
で書けない。

あと上のリンク、重複がいくつかあります。スマソ
0019デフォルトの名無しさんNGNG
年配のCプログラマは、なぜ不要なキャストを多用しがちなのでしょうか?歴史的な理由が
あれば教えてください。

p = (Pの型 *)NULL; とか、const P* 型の引数を関数内で 必ず・わざわざ P* 型の
変数にキャストして代入して使ってみたり、などです。別のバッググラウンドをもっている
複数人が揃ってこの調子なのでヘナヘナ萎えています。

僕は普段はVC++を使うので、こういうtype safeのタの字も無いコードを書く理由が
思い当たらないのですが…。単にANSI以前にCを覚えたのでconstを知らないとか?
だとしたら寂しすぎる。


0020デフォルトの名無しさんNGNG
無能な年寄りなんかに構っちゃいけません。徹底放置が一番
0021デフォルトの名無しさんNGNG
>>20
そいつが考えるAPIにconstがついていなかった場合、呼ぶ側がconst_castしなければいけなくなって大迷惑、
よって徹底放置というわけにもいかない。

…という罠は一応考えられるな。まぁCコンパイラを使うのだったら警告が出るだけだっけか?

0022デフォルトの名無しさんNGNG
ところでMicrosot C/C++なんてあるの?
マイクロソット
0023デフォルトの名無しさんNGNG
>>22
くだらないことをきくなよ
0024名無しさん@カラアゲうまうまNGNG
>>22
チェコでは正式名称なのかもしれん。
http://www.microsoft.com/cze/traincert/mcp/UkazteCoUmite.asp
0025デフォルトの名無しさんNGNG
>>24
単なるタイプミスでしょ。
0026デフォルトの名無しさんNGNG
> 年配のCプログラマは、なぜ不要なキャストを多用しがちなのでしょうか?歴史的な理由が
> あれば教えてください。
昔はvoid *が存在せず。それに変わる汎用ポインタとしてchar *が使われていた。

例えば
foo *p = (foo *)malloc(sizeof(foo) * n);
とか

まぁ、10年後C99が普及したら何で年輩の人は
foo p[n];
と定義すればいいのに不要なmallocを使うんですか?
とか言われるかもしれない。
0027名無しさん@カラアゲうまうまNGNG
>>26
それはそうだけど、>>19のあげてる例はちょっと違うだろう。
やっぱりポインタとかキャストについての理解がいい加減なんじゃあ。
0028デフォルトの名無しさんNGNG
アセンブラ上がりの人が多いからとか?
変数の型に対する認識が甘かったりするかも知れない。
002926NGNG
>>27
> p = (Pの型 *)NULL; とか、
26はここの部分の説明をしてみた。

> const P* 型の引数を関数内で 必ず・わざわざ P* 型の
> 変数にキャストして代入して使ってみたり、などです。
C++ でmutableを使うべき処理の場合、Cではcastで騙さないと同じ処理を実現できない。
他にやり方があったら教えてくれ。
0030デフォルトの名無しさんNGNG
>29
え?26って、「 p = (Pの型 *)NULL; 」の説明やったん?
すると、昔は、#define NULL (char*)0 とかやったりしたん?
mallocとは違って、どんな時代のC/C++でも、
p=NULL;で済む筈やと思うけどなぁ。
0031デフォルトの名無しさんNGNG
Fortranで書かれた、書式なしの文章を
Cで開く事は出来るのでしょうか?

write(6) N
write(6) (X(I),Y(I),I=1,N)

で書かれたらしいのですが………
0032デフォルトの名無しさんNGNG
一応バイナリモードで開けば読めるんじゃないの?
ただREAL型とかがどんな風に書き込まれてるか知らないけど。
0033デフォルトの名無しさんNGNG
Fortranではこれで開けたのですが……
なんとかこの操作をCでやりたいのです。

real x(100),y(100)
open(10,file='xy.dat',form='unformatted')
read(10) n
read(10) (x(i),y(i),i=1,n)

do j=1,n
write(6,*) x(j),y(j)
enddo

stop
end



f2cだと
#include "f2c.h"
なんてなモノをやら無きゃならないので困ってます…。
0034デフォルトの名無しさんNGNG
よくわかんないけど要はフォートランの吐き出したバイナリテープを
読み込んで標準出力に吐き出したいわけ?Cで。

フォートランで書いたサブルーチンをオブジェクトファイルにしてcにリンクとかすれば
できるんじゃない?
使ってるコンパイラのリファレンスでも読め。
003519NGNG
>>29 いや、mutable的な処理をするときにconst外ししているだけなら そもそも文句言わないって(^^;
0036デフォルトの名無しさんNGNG
>>33
fscanf(fp,"%d",&n);
for(i=0;i<n;i++){
 fscanf(fp,"%f%f",&x[i],&y[i]);
}
0037デフォルトの名無しさんNGNG
return関数っつーのは
return(0)やらreturn(-1)とか数値しか返せないの?
例えばmyfuncとかいう自作関数があった場合
エラー時にはmyfuncに戻るという動作をさせたいときには
どうすりゃいいのですか??????
0038デフォルトの名無しさんNGNG
>>37
意味が。
0039デフォルトの名無しさんNGNG
if (error)
myfunc()
0040デフォルトの名無しさんNGNG
>>37
longjmp以下略ワラ
0041デフォルトの名無しさんNGNG
関数ではない罠
0042デフォルトの名無しさんNGNG
>>37
関数じゃねーよ
0043デフォルトの名無しさんNGNG
setjmp()をmyfunc()から呼び出すしかないな。
0044デフォルトの名無しさんNGNG
,
004537NGNG
優しく教えてくれるヤシ・・・アリガ�d
厳しい指摘するヤシ・・・アリガ�d

ミンナミンナアリガ�d
0046デフォルトの名無しさんNGNG
>>37は
>myfuncに戻る
というてますが、戻るんだったらreturnでいいじゃん
0047デフォルトの名無しさんNGNG
初めて聞いたよ>return関数
目からうろこが落ちた
0048デフォルトの名無しさんNGNG
@`
004937NGNG
>>46
他の関数から飛ぶっす。
0050デフォルトの名無しさんNGNG
>>47
目からうろこが落ちたの使いどころが間違ってないか?
0051デフォルトの名無しさんNGNG
>>49
myfuncを呼ぶだけじゃだめなのか?
0052デフォルトの名無しさんNGNG
エラーが出たら-1でも返して、呼び出し元がさらにmyfunc呼べばいいじゃん。
0053デフォルトの名無しさんNGNG
>>37
とりあえず、テストソースでもいいから、ソース出せ。
みんな混乱してるじゃねーか。
005437NGNG
http://www.otafuku.co.jp/
0055デフォルトの名無しさんNGNG
>>54
くだらねー(見に行っちまったが)
0056デフォルトの名無しさんNGNG
>>55
URLで気づけ
0057デフォルトの名無しさんNGNG
我慢できずに見に行ってしまった鬱・・・。
0058デフォルトの名無しさんNGNG
なぜか紫になっていた鬱・・・。
0059デフォルトの名無しさんNGNG
結構カワイイ社員いるね
しかもお好み課(藁
0060デフォルトの名無しさんNGNG
>>59
http://www.otafuku.co.jp/jinji/fujiwara_2.htm

この会社、いまどきフローチャート書かせるのかよ・・・・
0061デフォルトの名無しさんNGNG
すみません、質問いいですか?
構造体についてなんですが・・・

Aのソースで宣言した構造体を、
Bのモジュールで使用することは可能でしょうか?
現在、AとBをコンパイル&リンクしようとすると、
Bのモジュールのコンパイル時に「宣言されていない構造体」ってエラーが出て、
コンパイルできずエラーが出てしまいます・・・。

構造体を、Bで宣言すればコンパイルは通るんですが・・・。

他のソースで宣言してる構造体を、
その別のソースで使用する方法がありましたら教えてください。
よろしくお願いします。
0062デフォルトの名無しさんNGNG
.hに入れて#include
0063デフォルトの名無しさんNGNG
あのー、
rand()関数使って何かおもしろいことできませんか?
ゲームでも面白い動作でも何でもいいです。
よろしくおながいします。
0064デフォルトの名無しさんNGNG
*((int*)rand()) = 0;
0065デフォルトの名無しさんNGNG
>>64
恐ろしい動作
0066デフォルトの名無しさんNGNG
>>64
ランダムなアドレスに0を書き込むってこと?
006761NGNG
>>62
構造体自体は、ヘッダーファイルを作って、Aでインクルードしてます。
しかし、問題が解決されません・・・。
Aでも、インクルードして、Bでも、インクルードしろって意味なのでしょうか・・・???

でも、たしか、宣言ってカブって行うと、ダメなんですよね・・・???
0068デフォルトの名無しさんNGNG
>>64
やってみてアクセス違反がでなかったら勝ち。
0069デフォルトの名無しさんNGNG
>>64
VC++じゃ実行できないYO!!
VC++で実行できるものでrandをつかった面白いものをおながいします。
0070デフォルトの名無しさんNGNG
同じ翻訳単位でかぶるとまずい
0071デフォルトの名無しさんNGNG
宣言は被ってもへいき
定義はだめ
0072デフォルトの名無しさんNGNG
そう言えばBASICでもよく POKE RND, RND / 256 ってやってたよ。
走らせてると突然ピタッと止まるんだよな。その瞬間ゾクゾクっとした
快感が体を走り抜けたよ。たまんねえな。

>>67
宣言がダブッたらまずいのは、同一ファイル内のみ。
007361NGNG
>>70-72

宣言はOKで定義はダメ!
スペシャルサンクス!
さっそく、テストしてきます!!
0074デフォルトの名無しさんNGNG
つか、かぶってねーじゃん。
0075デフォルトの名無しさんNGNG
レスはかぶりまくりだな。
0076221NGNG
すいません、めっちゃ初歩の質問良いですか?
昨日初めてコンパイルしてみようとしたのですが、
完了-コンパイル「C:\WINDOWS\PROFILES\SHIN\MYDOCU~1\HELLO.c 1: ファイル 
stadio.hがオープンできない (No such file or directory)」と出てコンパイルできません。
何が問題なんでしょう?宜しくお願い致します。
0077デフォルトの名無しさんNGNG
>>76
本のサンプル入力してるのか?
もう一度サンプルと同じか確認して見ろ。
0078 NGNG
>>76
stadio → stdio
0079デフォルトの名無しさんNGNG
ワロタ
メッチャレベルヒクイ
0080デフォルトの名無しさんNGNG
まぁ、気がつかなくて悔しがっている>77=79な訳だが・・
008177NGNG
>>80
え?なんで俺?
本人からのレスかと思って見てみれば( ;´Д`)
0082デフォルトの名無しさんNGNG
80はちょっとあれなので気にしないでやってください。
0083221NGNG
>>77
LSI C-86 超簡単セットアップ Ver 1.53を使って
ドラッグ&ドロップしただけなので、入力ミスとかはないと思います。
008477NGNG
>>83
>>78も書いてるけど、ミスがあるから言ってるんだよ・・・。
0085かわりにこれ使えNGNG
/* hello.c */
#include <stdio.h>

int main()
{
printf("hello world!\n");
return 0;
}
0086221NGNG
>>78
「stadio」と出てます。
>>84
ソースコードを書いて、Cコンパイラのアイコンに放り込んだだけなのですが…
ソースコードに問題があるのでしょうか?
0087デフォルトの名無しさんNGNG
>「stadio」と出てます。
だから、stdio.hに直してくれよ
0088221NGNG
>>85
メモ帳にコピペしてCコンパイラに放り込んだら
「[email protected]」とでました。
0089デフォルトの名無しさんNGNG
それほんとにCコンパイラか?
0090デフォルトの名無しさんNGNG
LCCだろ。そう出るよ
0091221NGNG
>>90
これでいいんですか?
hello world!と出るもんじゃないんですか?
0092デフォルトの名無しさんNGNG
つーか、そのソースをここに晒したほうがはやいだろ。
stadio.hになっていませんように・・・(-人-)ナムナム・・・
0093デフォルトの名無しさんNGNG
>>91
実行ファイル(hello.exe)ができてないか?
0094デフォルトの名無しさんNGNG
コンパイルはできたのか?
0095デフォルトの名無しさんNGNG
もんの凄い厨発見・・・・・・・・・・・・・・・・・・・・・・
0096デフォルトの名無しさんNGNG
LSICのEXEにソースをドラッグする人って、とっても珍しいと思う。
歴史上10人も居ないのではなかろうか。
0097デフォルトの名無しさんNGNG
>>96
おいらはVC++のcl.exeにD&Dしています。
0098デフォルトの名無しさんNGNG
>>97
ありえねぇ
0099デフォルトの名無しさんNGNG
lcc.exe(だっけ?)は16bit pure dos アプリだし・・・
0100デフォルトの名無しさんNGNG
ウィンドウズ用
ftp://ftp.cs.virginia.edu/pub/lcc-win32/lccwin32.exe
0101デフォルトの名無しさんNGNG
LSIC を
  窓 か ら
    投 げ 捨 て ろ
0102デフォルトの名無しさんNGNG
このスレおもしろい
0103デフォルトの名無しさんNGNG
>>101
そのシミュレータをC言語で作ってみます。
0104デフォルトの名無しさんNGNG
>>103
よろしくおながいします。
0105221NGNG
できました。
皆さん、ご協力ありがとうございました。
本当に感謝してます!
0106デフォルトの名無しさんNGNG
>105
結局、どうやって解決したの?
0107デフォルトの名無しさんNGNG
どこのスレの221なのかとても気になる
0108221NGNG
>>106
ボーランドのコンパイラを落としてきました。

>>107
http://pc.2ch.net/test/read.cgi/tech/1026138039/
ここです
0109デフォルトの名無しさんNGNG
>>108
そこはたった今221になったと思うんだけども。
まさか余因子行列聞いてる212じゃないだろうな。
0110デフォルトの名無しさんNGNG
LSICでも出来るけどなぁ。lld@何タラってのはコンパイル&リンクできたっつーこと。
同じディレクトリにhello.exeがあるはずだが。
あとstadio.hはstdio.hの間違いだったろ?
0111デフォルトの名無しさんNGNG
ヘッダーファイルの中で他のヘッダーファイルをincludeするのはいけない行為?
0112デフォルトの名無しさんNGNG
>>111
いけなくないが、そのヘッダに#ifndef #define #endifの、例の
あれが書いてあるといいね。
0113デフォルトの名無しさんNGNG
>>112

#ifndef _HEADER_H_
#define _HEADER_H_

/* 中略 */

#endif

多重インクルード防止用のこういうやつ?
0114デフォルトの名無しさんNGNG
> あれが書いてあるといいね。
> 多重インクルード防止用のこういうやつ?
一応「インクルードガード」という名称がある。
0115デフォルトの名無しさんNGNG
俺も最初の頃はスタジオ.hだと思ってたよ。
ついでに、random関数ってrandだけ良いのね。
これも知らずにリンカエラーでさんざ悩んだよ。
0116デフォルトの名無しさんNGNG
昔、cin(シン)、cout(コート)と読んでたぞ (激鬱
0117ツリー構造NGNG
リスト構造とツリー構造の違いを教えてください。
0118デフォルトの名無しさんNGNG
>>117
名前を変えたの?
0119ツリー構造NGNG
えっ?
今回の書き込みが初めてですけど
0120デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1026138039/244
0121デフォルトの名無しさんNGNG
>>119
マルチすんな、ぼけぇと言いたいところだが、これ以上被害が広まるのもいやなので
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%83%AA%E3%82%B9%E3%83%88%E6%A7%8B%E9%80%A0+%E3%83%84%E3%83%AA%E3%83%BC%E6%A7%8B%E9%80%A0+%E9%81%95%E3%81%84&lr=

これでわからなかったらあ き ら め ろ
0122ツリー構造NGNG
学校の問題なので別の人が書き込んだのかも?
おねがいします。
教えてください。
0123デフォルトの名無しさんNGNG
>>122
>>121さんが答えへの道を示してくれている
0124デフォルトの名無しさんNGNG
>>122
宿題はスレ違いだ。(・∀・)カエレ!
0125デフォルトの名無しさんNGNG
つーか情報系の学生ってこんなレベル低い?
普通科行けなかったヤツが行くところとか?
0126デフォルトの名無しさんNGNG
学生なのに普通科?
0127デフォルトの名無しさんNGNG
>>122
大人をなめるんじゃねーぞ。このウソつき。
0128デフォルトの名無しさんNGNG
ツリー構造とリスト構造の違いか・・・
ツリービューとリストビューくらい違うな・・・
0129デフォルトの名無しさんNGNG
木と表くらい違う。
0130デフォルトの名無しさんNGNG
ツーリは分岐するけど
リストは分岐する気がしない
0131ツリーNGNG
>>123から128
別人にだまされたおまえらはDQN!
大人だかなんだかしらんが心の狹いやつらだな、おい!

0132ツリー構造NGNG
ばーか!!
答えなんてソッコーでわかってんだよ!!
早く終わって暇だったから書き込んだだけ。
聞けっていうから聞いてやったのに、
結局だれも答えてねーじゃん。
0133デフォルトの名無しさんNGNG
ネタはけっこうです。
0134ツリーNGNG
心の狹い大人=カス
この方程式は万国共通です。
すぐにネタだといって煽る奴=DQN
これもまたしかり


0135初心者NGNG
>132
すみません。
ツリー構造について教えてください。
0136543NGNG
スンマソーン
他スレの543ですが、
「2のべき乗」って、VBAだと
「2^5 とか、2^12」なんすけど、
C(C++、VC++)では違うんですか?
さっき2^4とか計算させたらエラーが出たんですけど。
0137デフォルトの名無しさんNGNG
>>134
ネタじゃなくて天然だったのか。
バカすぎるぞ。

ネットで宿題の答え聞いてるガキはDQN。
これは万国共通(マジで)
0138デフォルトの名無しさんNGNG
>>136
エラーはでなくねぇ?
結果はぜんぜん違うけど
0139543NGNG
>138
もう一度試してみるっす。
ちなみに今VC++でやってます。
0140デフォルトの名無しさんNGNG
>>136
演算子ではべき乗はないっす。
math.hをinclude してpow(2,4)かな
0141デフォルトの名無しさんNGNG
>>136
> さっき2^4とか計算させたらエラーが出たんですけど。

本当に試したのかよ。
エラーにはならないだろ。
0142デフォルトの名無しさんNGNG
>>135
エクスプローラの左を見なさい、それがツリーです。
エクスプローラの右を見なさい、それがリストです。

これでわからないようなドキュは氏んでください。
0143デフォルトの名無しさんNGNG
エクスプローラで左に出てる奴がツリー、右に出てる奴がリスト。
0144デフォルトの名無しさんNGNG
XORだ
0145初心者NGNG
うるせえ、ばか!
くたばれ!
Fuck yourself
0146デフォルトの名無しさんNGNG
ネタはけっこうです。
0147143NGNG
>>142
ピンポン同時。
0148初心者NGNG
ネタに混じれすするな
0149543NGNG
>141
ビルドの段階で。
0150デフォルトの名無しさんNGNG
>>142-143
別人ならすごいな
0151543NGNG
>140
ありがとうございました。
「16」
と出ました。
0152543NGNG
ちなみにスンマソン。。。

pow(2,128)

をやってみました。実行はされたんですけど、

3.40282e+038

となりました。
これを完全に整数の形で表示させる事が出来ないものなのでしょうか?
0153デフォルトの名無しさんNGNG
できるよ。
どうせ有効桁数6桁だからその部分と'0'をずらっと並べる。
"3.40282000000・・・・"と
0154初心者NGNG
うるせえ!さる!
殺すぞ!おい、543!この野郎邪魔すんな!

0155デフォルトの名無しさんNGNG
>>154
あなたはこのスレに誤爆しないで・・・
0156デフォルトの名無しさんNGNG
>>152
完全な整数は無理。
そこまでの精度は無い
0157155NGNG
543って>>152のことか(ワラ
0158543NGNG
げ!
もしかして「近似」の結果なんすか???
ちなみに上の
「3.40282e+038 」
の意味を教えていただければと。。。

初心者でスンマソーン。。。
0159デフォルトの名無しさんNGNG
3.40282×10^38

0160デフォルトの名無しさんNGNG
3.40282x10^38
0161デフォルトの名無しさんNGNG
>>158
3.40282 * 10^38
0162543NGNG
>>159-161

本当にありがとうございます。
0163161NGNG
>>159-161
3Pハァハァ
0164初心者NGNG
おい!543!
無視すんな!
真面目ぶってもおもしろくねぇぞ!
笑わせろ!
0165161NGNG
>>164
おまえが笑わせてみろよ(プ
0166543NGNG
そうしてみると、ある巨大な整数(紙の上には書けるくらい)が、
「素数か否か」
を判定するプログラムってかなり難しいと考えていいですかね?
0167543NGNG
>164
おっきい?
0168初心者NGNG
Fカップですが何か?
0169543NGNG
豚なの?
0170デフォルトの名無しさんNGNG
宿題が出来なくて暴れてるヤツをかまうなって・・
0171デフォルトの名無しさんNGNG
>>166
多倍長整数演算のライブラリとか、どっかで拾ってくればいいよ。
0172543NGNG
ありがとう。

0173デフォルトの名無しさんNGNG
素数か否かを判定するには1から平方根までの素数で試し割りしてみるんだっけ?
割れなきゃ素数。

どおしても大きな値を扱いたいならそれなりに工夫が要る
組込型じゃ扱えない。

0174543NGNG
そうですか。。。
例えばですね、
全ての1以上の自然数nに対して、
n^2と、(n+1)^2 の間には必ず素数が存在する(リーマン予想)
はnが何兆の時まで正しい事が確認されている、らしいんです。

うーむ。。。これをCで動かすには。。。グタ。
0175デフォルトの名無しさんNGNG
やめときなさい。
0176543NGNG
はい。
0177デフォルトの名無しさんNGNG
C以外でも動かないだろ。

文字列を使って計算すれば?
たとえばunsigned shortは65535までしか扱えないけど
char num[10]なら"100000000"だぞ。
もちろん四則演算も自分で実装する。
plus(num1, num2);とか

あるいは大きな数字は複数のintで表すとか。
12345678=
1234*10000 + 5678だろ?
そうすればint num1 = 1234, num2 = 5678で表して
2で割るならおのおのを2で割れば?

0178543NGNG
>177
アイデアは嬉しいっす。
ありがとうございます。

ただですね、a+bをcで割る時に、
a,b両方がcで割り切れなくとも、a+bがcで割れることが
あるんです(例 a=b=1,c=2)。
0179デフォルトの名無しさんNGNG
a+bではなくa*10^x+bですが。
まぁいいか。
0180デフォルトの名無しさんNGNG
>>178
そのへんも、ちゃんと実装するのよ
0181543NGNG
考えてみます。
ありがとうございました。
一旦落ちて飯の支度をします。
0182デフォルトの名無しさんNGNG
無限ループに陥ったとき、画面上でマウスをダブルクリックするとループはとまりますが、ctrl+cを押した場合と異なった処理が行われているのですか?
0183デフォルトの名無しさんNGNG
> 一旦落ちて飯の支度をします。
0184デフォルトの名無しさんNGNG
>>181
どうしてもCじゃないとだめっすか?
このスレに書いている以上、どうしてもCじゃないとだめなのかもしんないけど。

標準でないライブラリを使ってもいいのであれば、
ttp://www.score.is.tsukuba.ac.jp/~okuma/OpenMath/
なんてどうだろう、って使ったことないんだけども。

bignumのある処理系使うと手軽なんだけど。
scheme (たいていbignum持ってる) とか、Rubyとか(この名前出すと厨房よってくるか?)。
でも処理の規模を考えるとこの辺の処理系使うのは速度に問題あり、かな。
0185543NGNG
>>184
ええとですね、
俺はCの勉強も兼ねてるんです。
もう直ぐ三十路なのに職も無く、ぷらぷらするのも
なんなので、C(VC++)を勉強してそれ関係の仕事にと。。。

遅い?
0186デフォルトの名無しさんNGNG
>>185
どういう方面に就職希望かわからんけど、
素数の計算とかはあんまり深入りしないで、違うことやったほうが
いいと思う。
0187543NGNG
>186
サンクス。
当方VBAはそこそこ使えますが、それ以外のプログラムは
html言語をちょろっと出来る程度なので凄く不安。。。
はぁ。。。
0188デフォルトの名無しさんNGNG
html・・・
0189デフォルトの名無しさんNGNG
>>185
なるほど、そういうことね。

おれも>>186の言うことに半分賛成。
でもこういう風に自分で課題を設定して何かやろうとするのはいいことだと思うよ。
ただ、今回の課題は初心者にはレベルが高すぎるような気がする。

やるとすると、

struct bignum {
 unsigned int *buf;
 size_t len;
};

みたいな構造体を使ってごにょごにょすることになるんだろうけど、
メモリ管理とかややこしい問題が絡んでくるんでかなりきついと思う。

どういった本を読んでます? (この話題も荒れるかも)
とにかくCに関してはクズ本が99%を占めてるんで、
下手な本で勉強するとロクなことにならん。

おれが今まで読んだ中では Practical C というオライリーから出てる本がいいかな。
入門書はそんなに読んでないけど。他にちゃんと読んだつったらK&Rくらいだからなあ。
ttp://www.oreilly.co.jp/BOOK/cpra/
これね。岩谷の粗悪な翻訳も以前出てたのでそれを掴まされないように注意してね。
0190デフォルトの名無しさんNGNG
>>185
遅くないよ。
0191デフォルトの名無しさんNGNG
俺の知り合いに45才で会社を起こして、自分でCのプログラム書いて
バリバリ稼いでいる奴がいるよ。

最近はさすがに疲れたのか、学生にアルバイトさせているが。
0192543NGNG
皆さんありがとう。
今手元にある本は、
「新C++言語入門 ビギナー編」 by 林晴比古
「新VisualC++6.0入門」    by ヾ

です。
先にも述べたとおり、これまで組んできた事のある言語は
HTMLとVBA。
VBAのほうは(マクロを組むと言うのかな)、ちゃんと金融会社
に勤務中に、ある計算をするためにプログラムを組んでいました
(moduleを沢山使いました)。

あとUNIXも使った事はあるんです。
手元にある本は
「UNIX プログラミング環境」 by kernighan and Rob.Pike
(石田 晴久訳)

です。
0193デフォルトの名無しさんNGNG
本で1から練習するよりも、本を片手に実践の方が
速く身に付くよ。
0194デフォルトの名無しさんNGNG
C言語はJavaなどの言語に比べて細かいプログラムが
組めるらしいのですが、 具体的にどのくらい細かくまでプログラミングできるのでしょうか
0195デフォルトの名無しさんNGNG
>>194
細かさの意味がわからんが、大して変わらんかと
0196こうやって細切れに出来るって事かなNGNG
#include <stdio.h>
int
main
(
int
argc
,
char
*
*
argv
)
{
printf
(
"Hello "
"World.\n"
)
;
return
0
;
}
0197デフォルトの名無しさんNGNG
レベル ノ ヒクイ ジサクジエン ニ ワラタ
0198デフォルトの名無しさんNGNG
>>193
どーい。この分野ほど、知っているだけではなにもできない分野はないね。
なんでもひたすら試してみるといいよね。
0199デフォルトの名無しさんNGNG
random
randomize
って使ってる?
0200デフォルトの名無しさんNGNG
srandやrandなら使わんことも無い
0201デフォルトの名無しさんNGNG
malloc
free
って使ってる?
0202デフォルトの名無しさんNGNG
pennis
って最近使ってる?
0203デフォルトの名無しさんNGNG
NTTコムウェア
って知ってる?
0204199NGNG
房のせいでちゃんとした回答が得られなかった
020533NGNG
超亀レス

>34 36
ありがとう。
0206543NGNG
スンマソーン。
再び543っす。
仮に面接で、
「C言語できますか?」
ってきかれたら、俺のレベルで、
「簡単なプログラムなら出来ます」
って答えて問題無いすかね???
0207543NGNG
http://pc.2ch.net/test/read.cgi/tech/1023530449/
ここの543でした。
すみません。。。
0208デフォルトの名無しさんNGNG
>>206
「簡単なプログラムなら出来ます」
なんて回答をしている時点で
相手には君のレベルが分かっちゃうからOK!
0209543NGNG
???
よくわからんです(笑)
0210デフォルトの名無しさんNGNG
>>206
具体的に作ったプログラムを言った方がいいのでは?
0211543NGNG
んじゃぁ、ここの553に書いたものが自作の中で
最新のものだと人に言えないかも。。。

http://pc.2ch.net/test/read.cgi/tech/1023530449/

C言語二日目。。。
0212デフォルトの名無しさんNGNG
2chをフル活用してますな
0213543NGNG
ええ。
0214デフォルトの名無しさんNGNG
本当に簡単だな
0215543NGNG
ええ。。。(恥
0216デフォルトの名無しさんNGNG
2次元配列の要素数を取得するにはどうすればよいですか?
0217デフォルトの名無しさんNGNG
質問なんですが

プログラムは細かく関数化したほうがいいですか?
フローチャートを書くことは勉強になりますか?
フローチャートって楽しいですか?

おねがいしまする
0218デフォルトの名無しさんNGNG
>>217
・物による。いろんな分割法あり
・まぁ、いい加減に書きまくるよりはイイかと
・俺は嫌い
0219デフォルトの名無しさんNGNG
>>216
厳密にはCには二次元配列はないと思った。

で、たとえば、
int ary[10][10];

なんて配列があったとして、要素数を求めるのは

sizeof(ary) / sizeof(ary[0][0])

だろうねえ。
0220デフォルトの名無しさんNGNG
>>218
ありがとうございました
ググルで 関数 分割法で調べてみまする
0221デフォルトの名無しさんNGNG
>>219
ありがとうございました。
C++にはあるんでしょうか・・・・?

でもそれはスレ違いになりそうなのでC++スレに逝ってきます
0222デフォルトの名無しさんNGNG
>>218
フローチャートは百害あって一利なしだと思う。
あっちゃこっちゃ飛ぶgotoの乱用みたいなチャートになりがちだし。
PADとかHCP(だっけか?)のほうがましだけど、
こういうのって擬似コード使うほうがよっぽどいいと思ってる。
0223217NGNG
関数内がifばっかりって…
やっぱり良くないですよね…
0224デフォルトの名無しさんNGNG
>>215
あっちでレスしてみたよ。584ね。

で、このレベルでプログラム書けます、というのは、うーん。
嘘じゃないけどもね(ニガワラ

まあでも仕事でやるとスキルがむちゃくちゃあがるからね。
独習よりははるかにいいと思う。
問題は、採ってくれるところがあるかどうかだけども(w
0225217NGNG
値が4つあって、その値を大きい順に並べて、その順番を数値に当てはめて返すという
関数なんですが
0226543NGNG
>>224
どうもです。
あっちのレス読んできました。
ありがとうございます。
とりあえず俺としては、
「プログラムを組む上で最も基本的なことが抑えられていて、
 且つ余計な事をしていないか?」
ということが問題だったのです。

といいつつ、気になるので質問させてください。
sm = ((a + b) * (b - a + 1)) / 2;
のほうが計算が速くなるとかっていうメリットはあるのでしょうか?

初心者ですんません。
0227デフォルトの名無しさんNGNG
>>226
うーん。まあVC++よりはCの話題だからこっちのスレでいいか(w

で、一般にループまわすよりは速くなります。

ただし欠点もあって、forでまわすよりもオーバーフローしやすいという問題があります。
掛け算してるところでね。
0228デフォルトの名無しさんNGNG
すいません 書き直します
値が4つあって、その値を大きい順に並べて、
その順番を数値に当てはめて返すという
関数なんですが

例
A=2 B=5 C=4 D=1
だったら
cbadなので5を返す

というのなんですが、
ifとかつかわずに可能でしょうか。
if使うとものすごく長くなってしまったので
おながいします
0229デフォルトの名無しさんNGNG
> その順番を数値に当てはめて返すという

わからん…

>例
>A=2 B=5 C=4 D=1
>だったら
>cbadなので5を返す

最大値を返すってこと?
0230デフォルトの名無しさんNGNG
>>228
ポカーン
0231デフォルトの名無しさんNGNG
bcad?
0232デフォルトの名無しさんNGNG
>>228
今世紀(はじまって間もないけど)最大の難問だ
何が言いたいのか全くわからん・・・
0233デフォルトの名無しさんNGNG
>>228
宿題?

A, B, C, Dが0未満じゃないと仮定して、こんな感じかな。
ただし、試してないよ。

#define numitem(a) (sizeof(a) / sizeof((a)[0]))

int max(a, b) {
 return (a > b) ? a : b;
}

int foo(a, b, c, d) {
 int i, m = 0, ary[4] = {a, b, c, d};

 for (i = 0; i < numitem(ary); i++) {
  m = max(m, ary[i]);
 }
 return m;
}
0234デフォルトの名無しさんNGNG
素因数分解のプログラムってどうやればいいんですか?
0235233NGNG
あっと、配列の初期化ってこういう風にはできなかったっけか(汗
0236デフォルトの名無しさんNGNG
>>234
ユークリッドの互除法でぐぐってみれ。
0237228NGNG
あ、すいません
例えば
abcdという順番で大きければ1を返す
bacdならば2を返す
でbcadなので5を返すという風にしたいのです。

この数字はなんでもよいです…
何かしら返り血から順番がわかるようにしたいのです

おねがいします(;_;)
0238デフォルトの名無しさんNGNG
>>234
楕円曲線法でぐぐってみれ。
0239228NGNG
そこで素直に
abcdを大きい順に変数M1からM4に格納して
M1が何なら どの値を返すという風に
IFを羅列しようと考えているのですが…
すいません
0240デフォルトの名無しさんNGNG
>>237
わかた〜よ!!
abcdの順列に番号をつけておいて
大きい順に並べ替えたものに対応する番号を返すんだね!!
0241228NGNG
>>240
配送です。
おめがいします
すいません
0242デフォルトの名無しさんNGNG
>>241

return (srt[0]*10000 + srt[1]*1000 + srt[2]*100 +srt[3]);

0243228NGNG
>>242
誤植ばっかりですいません2ch怖いので…

それってひとつの値が10を超えても大丈夫ですか?
引数の値は不定値で桁数がわからないのです。
0244デフォルトの名無しさんNGNG
オレ的にこう


#include <stdio.h>

int main(void)
{
int A=2, B=5,C=4, D=1;
int values[] = {A, B, C, D };

int result = 0;
for( int j = 0; j<4; ++j ) // j 番目に大きい数字を見つけて result に入れる
{
int min = 0;
int minIndex = -1;
for( int i = 0; i<4; ++i )
{
if ( values[i]>min )
{
minIndex = i;
min = values[i];
}
}
result |= (minIndex+10)<<(j*4);
values[minIndex] = 0;
}

printf( "%X\n", result );
return 0;
}
0245デフォルトの名無しさんNGNG
メガデモ級のが作れるようになれば一人前じゃないの
0246228NGNG
>>244
おおすごい
なるほど、
たしかにそうなんだな…
abcdを数字にすれば返せるし
ありがとうございました
0247244NGNG
>>246
あ、ゴメン
コメント逆だ、j番目に小さい数字を
0248デフォルトの名無しさんNGNG
2byte文字がうまくあつかえないのですが、その辺について詳しいサイト知りませんか?
0249デフォルトの名無しさんNGNG
>>248
ここはどう?
http://www.mars.dti.ne.jp/~torao/program/appendix/japanese.html
0250デフォルトの名無しさんNGNG
C++では#define NULL0;と書きますが、なぜC言語では#define NULL (void*)0;
と書くのですか?
0251デフォルトの名無しさんNGNG
>>250
#define NULL 0と書かれている場合もあるよ。
それとセミコロンはいらない。
0252デフォルトの名無しさんNGNG
次スレはケイコタンの1きぼんぬ
0253デフォルトの名無しさんNGNG
>>250
C では
#define NULL (void *)0
と書きますが、なぜ C++ では
#define NULL 0
と書くのですか?
0254デフォルトの名無しさんNGNG
>>250
NULL というマクロを使わないでプログラム組んでみればわかるよ。
0255デフォルトの名無しさんNGNG
>>253
つーか、C++では NULL の代わりに 0 と書けよ。
0256デフォルトの名無しさんNGNG
つか、CでもNULLなんか使わんで、0でいいだろ。
0257デフォルトの名無しさんNGNG
>>256
Cではいけなかったのでは?汎用機の一部には、NULL != 0のものが
あったような記憶が。
0258デフォルトの名無しさんNGNG
>>257
規格上はokよ。処理系によってはだめなのもあるけど。
いまだにプロトタイプ使えない処理系ある(らしい)のと一緒ね。
0259258NGNG
心配になってC FAQを見直してみた。
そうか、プロトタイプが foo(int bar, ...); みたいな関数の不定数引数に
ヌルポインタを渡すときだけはキャストする必要があるみたいだな。

ttp://www.catnet.ne.jp/kouno/c_faq/c5.html#2
0260デフォルトの名無しさんNGNG
コメントの所が /* */というのと//というやつの違いは何なんですか?
拾ったexampleソースをCでコンパイルしようとしたら、//が全部エラー出ました。
0261デフォルトの名無しさんNGNG
/*comment*/
はCとC++のコメント
//comment
はC++のコメント

C++を知らないCコンパイラなら上記のコメントしか受け付けないだろうね。
0262デフォルトの名無しさんNGNG
>>261
おお、なるほど。
どうも有り難うございました。
0263デフォルトの名無しさんNGNG
>>260
gccなら//もコンパイルできるよ
0264248NGNG
>>249
ありがとうございます!
0265デフォルトの名無しさんNGNG
質問いいでしょうか?

動的に構造体の配列を取ろうとしてるのですが・・・
うまく動かなくて困ってます。

http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/311.zip

・・・に、ソースを置かせてもらってます。
どなたか、アドバイスお願いします・・・。
0266デフォルトの名無しさんNGNG
これは罠ね!
0267265NGNG
>>266
罠ではなく、マジです(汗
PC初心者板用のアップ板を借りてます。
0268デフォルトの名無しさんNGNG
stderrをfcloseしてもいい?
0269デフォルトの名無しさんNGNG
>>265
1Kもないようなソースを圧縮すんなよ。
0270デフォルトの名無しさんNGNG
>>267
Testの中のintやcharまでポインタにする必要はない
0271265NGNG
>>269
いや・・・癖でして・・・・

>>267
このソースは、抜き出した物でして・・・
どうしても、構造体の中の変数をポインタで取りたいのです。

このソースで、構造体の配列って作れてますかねぇ〜?
0272265NGNG
すみません、>>267は、>>270の間違いです・・・。
0273デフォルトの名無しさんNGNG

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

struct Test{
int test01;
char test02[2];
};

int main ()
{
int i;
struct Test *test;
test = (struct Test *) calloc (3, sizeof(struct Test));

test[0]->test01 = 10;
test[0]->test02 = 'a';

test[1]->test01 = 20;
test[1]->test02 = 'b';

test[2]->test01 = 30;
test[2]->test02 = 'c';

for (i=0; i<3; i++) {
printf("%d  %s", test[i]->test01, test[i]->test02);
}

return 0;
}
試してないが。
0274デフォルトの名無しさんNGNG
>>271
test[0].test01 = 10;
test[0].test02 = 'a';

これって、

int *pi;
char *pc;
pi = 10;
pc = 'a';

と同じようなことやってんだけど、どこがおかしいかわかる?
0275デフォルトの名無しさんNGNG
>>273

> test[0]->test02 = 'a';

いや、ここは
strcpy(test[0]->test02, "a");
もしくは
test[0]->test02[0] = 'a';
test[0]->test02[1] = '\0';
だろう。
0276デフォルトの名無しさんNGNG
>275
めんご。
0277デフォルトの名無しさんNGNG
>>271
「取りたい」というのは「自分の気持ち」でしょ?
論理的または理論的根拠にはいくらでも拘ればいいと思うけど、
自分の気持ちを拘りの根拠にしてたら上達は望めないと思うよ。
0278デフォルトの名無しさんNGNG
>>276
どんまい
0279デフォルトの名無しさんNGNG
>271
構造体配列はできてるが構造体メンバがポインタなのにいきなり
値を代入してるのは間違い。
メモリをアロケートしてそこをポインタに指させるまでポインタは使えない。
つまり
test[0]->test01 = (int *)malloc(sizeof(int));
test[0]->test02 = (char *)malloc(n * sizeof(char));
みたくメモリを確保しないと。
0280デフォルトの名無しさんNGNG
>>271
どうしても構造体のメンバをポインタでやりたいというのなら、
int t0;
t0 = 10;
test[0]->test01 = &t0;
test[0]->test02 = "a";
または、
test[0]->test01 = (int *)malloc(sizeof(int));
*test[0]->test01 = 10;
test[0]->test02 = "a";
こんなかんじでやれ。

"a"と'a'の違いはわかってるよね。
0281デフォルトの名無しさんNGNG
int a=3;
int b=2;
foat f;
f=a/b
以上のように、2つの変数をint型で、その2つの変数の割り算の結果を収めるのにfloat型で宣言した場合、小数部分は切り捨てられ、1.0という出力結果になります。
2つの変数をint型のままでちゃんと割り算の結果を1.5と出力したい場合どうすればよいのですか。方法はありますか。
0282デフォルトの名無しさんNGNG
>>281
f = (double)a / b
0283デフォルトの名無しさんNGNG
>>281
キャストする。
f = (float)a/b;
0284デフォルトの名無しさんNGNG
>>282
>>283
・・・・・どっちですか??
0285282NGNG
あ。floatか。283が正解。
てかfloatなんか使うなYO!(逆ギレ)
0286265NGNG
た・・・沢山のレス、ありがとうございます!
>>273
わざわざ、ソースを書いていただいてありがとうございます。
う〜ん、しかし同じようなエラーが出ます・・・
>>275さんの修正を入れても、エラーが出てしまいます・・・。

>>274
ええ、どこがおかしいか分かります。
しかし、アローを使うとエラーが出てしまってコンパイルすら通らず・・・
ドットだと、警告は出るものの、コンパイルが通るので、コンパイルして、
実行。 即エラー終了。 この時点で途方にくれてました・・・(汗)

>>277
言葉が悪かったです・・・
「取りたい」のではなく、「ポインタで取る必要がある」です。
すんません・・・。

>>279
はい、試させてもらいました。
しかし、「-> か ->* の左には構造体のポインタが必要」というエラーが出てしまって・・・

>>280
えっと、同じく、「-> か ->* の左には構造体のポインタが必要」のエラーがでます・・・


う〜〜ん・・・
ここまでエラーが出るとコンパイラを疑いたくなります(苦笑)
0287273NGNG
ごめん。'->'じゃなくて'.'でいいみたい。
0288273NGNG
#include <stdio.h>
#include <stdlib.h>

struct Test{
int *test01;
char *test02;
};

int main ()
{
int i;
struct Test *test;
test = (struct Test *) calloc (3 , sizeof(struct Test));

test[0].test01 = (int *)malloc(1 * sizeof(int));
test[0].test02 = (char *)malloc(2 * sizeof(char));
*test[0].test01 = 10;
test[0].test02[0] = 'a';
test[0].test02[1] = '\0';

test[1].test01 = (int *)malloc(1 * sizeof(int));
test[1].test02 = (char *)malloc(2 * sizeof(char));
*test[1].test01 = 20;
test[1].test02[0] = 'b';
test[1].test02[1] = '\0';

test[2].test01 = (int *)malloc(1 * sizeof(int));
test[2].test02 = (char *)malloc(2 * sizeof(char));
*test[2].test01 = 30;
test[2].test02[0] = 'c';
test[2].test02[1] = '\0';

for (i=0; i<3; i++) {
printf("%d %s", *test[i].test01, test[i].test02);
}

return 0;
}

おわび。freeしてません。
0289デフォルトの名無しさんNGNG
>>282
>>283
ありがとうございます!
0290デフォルトの名無しさんNGNG
ポインタちゃんと勉強したら?>>265
以下長文スマソ

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

struct Test{
  int *test01;
  char *test02;
};

struct Test *
Test3_new()
{
  struct Test *test = (struct Test *) calloc( 3, sizeof(struct Test) );
  int i;
  for ( i = 0; i < 3; i++ ) {
    test[i].test01 = (int *) calloc( 1, sizeof(int) );
    test[i].test02 = (char *) calloc( 2, sizeof(char) );
  }
  return test;
}

int main ()
{
  int i;
  struct Test *test;
  test = Test3_new();

  *(test[0].test01) = 10;
  test[0].test02[0] = 'a';
  test[0].test02[1] = '\0';

  *(test[1].test01) = 20;
  test[1].test02[0] = 'b';
  test[1].test02[1] = '\0';

  *(test[2].test01) = 30;
  test[2].test02[0] = 'c';
  test[2].test02[1] = '\0';

  for (i=0; i<3; i++) {
    printf("%d %s\n", *(test[i].test01), test[i].test02);
  }

  return 0;
}
0291デフォルトの名無しさんNGNG
>>286

> >>279
> はい、試させてもらいました。
> しかし、「-> か ->* の左には構造体のポインタが必要」というエラーが出てしまって・・・

あ、そうか。testの型はTest*だから、test[0]の型はTestだ。
だから、.(ドット)演算子を使うべきであった。
0292デフォルトの名無しさんNGNG
>>290
改造してみた。
#include <stdio.h>
#include <stdlib.h>

struct Test{
 int *test01;
 char *test02;
};

void Test_new(struct Test *t, int n, char c)
{
 t->test01 = (int *)calloc(1, sizeof(int));
 t->test02 = (char *)calloc(2, sizeof(char));
 if (!t->test01 || !t->test02)
  exit(3);
 *t->test01 = n;
 t->test02[0] = c;
 t->test02[1] = '\0';
}

int main ()
{
 struct Test *test = calloc(3, sizeof(struct Test));
 int i;

 Test_new(&test[0], 10, 'a');
 Test_new(&test[1], 20, 'b');
 Test_new(&test[2], 30, 'c');
 for (i=0; i<3; i++) {
  printf("%d %s\n", *test[i].test01, test[i].test02);
 }

 return 0;
}
0293デフォルトの名無しさんNGNG
プログラム中でファイルの内容を配列に読み込みたいが、
ファイルの大きさが事前に分らないため配列のサイズを正確に予測できない場合、
どうしたらいいのでしょうか。何か関数とかあるのですか
0294超初心者NGNG
どなたか知っていましたらレベルの低い質問ですがお願いします。
floatのデータ型を確かめようと下記のソースをコンパイル&実行したところ

0.123457
1234567.000000
1234567.125000

と出力されました。
期待した結果は
「1234567.1234567」
だったのですが何故小数点以下が「.125」になったか超初心者なので解りません。
環境 kernel 2.4.17 + gcc2.95.3

------------------------------
#include <stdio.h>

main()

{

float a,b,c;
a=0.1234567;
b=1234567;
c=a+b;
printf("%f\n",a);
printf("%f\n",b);
printf("%f\n",c);

}
------------------------------
0295デフォルトの名無しさんNGNG
>>293
malloc
0296デフォルトの名無しさんNGNG
>>293
最初適当な大きさでmallocしておき、足りなくなったらreallocでまた
拡げればよい。
0297265NGNG
>>287-292
本当にありがとう!
書いてもらったソースをすべて試させてもらいました。
すべて、正常にコンパイルが通って正常処理をしてくれました。

う〜ん、本をもう一度読み返してちゃんと勉強します(汗

本当に、ありがとうございました〜!

0298デフォルトの名無しさんNGNG
>>293
適当に配列を伸ばしながら(大きめに確保してコピーを繰り返す)読み込む
0299デフォルトの名無しさんNGNG
>>294
floatだから有効桁数が足りない。doubleにすればよい。
0300デフォルトの名無しさんNGNG
300
0301294NGNG
>>299 レス有難う御座います。

本で読んだのは有効桁数7桁と読んだのですが
整数7桁と小数点以下7桁の両方が存在した場合にどう再現されるか知りたく
粗探しをしたのですが、ハンパに小数点以下が残っているのが気になって....。
0302デフォルトの名無しさんNGNG
>>293
これでどう?
fp はオープン済みのファイルポインタ。エラー処理省略。
あと、テストしてない

unsigned len = 0;
while ( getc(fp) != EOF ) len++;
char *str = (char *) malloc( sizeof(char) * (len+1) );
fseek( fp, 0L, SEEK_SET );
fread( str, sizeof(char), len, fp );
str[len] = '\0';
0303293NGNG
ありがとうございます!!
0304デフォルトの名無しさんNGNG

a[i] = i++;
というコードはうまく作用しないという話を聞きました。
その理由としてi++は副作用をもたらすという理由があるから
と聞きましたがどのような副作用なのでしょうか?
解説おねがいします。
0305デフォルトの名無しさんNGNG
>>304
なんかこの質問って定期的に出てくるんで、
本当に知りたいのかネタなのか分からんべ。
0306デフォルトの名無しさんNGNG
>>304
これを読め。
ttp://www.catnet.ne.jp/kouno/c_faq/c3.html
0307デフォルトの名無しさんNGNG
SEEK_ENDとftellの組み合わせは?
何か問題があるという話を聞いたような気もしないでもないけど…
0308デフォルトの名無しさんNGNG
>>307
ASCIIモードで開いたときの問題かな?
0309デフォルトの名無しさんNGNG
コンパイルも問題なく済んだけど、
特定の場所で何故かエラーが起きる。
printfをかけまくって、エラーになっているラインは探し当てたけど、
どーーーーしても
なんてことないその処理がエラーを出している原因がわかりません。

UNIXgccのCGIで作ってますが、エラーのログとか確保する方法はないんでしょうか?
がいしゅつだったらすいません。
0310デフォルトの名無しさんNGNG
printfでデバッグ出力してるのだったら、
% ./a.out > err.log
でいいんじゃないか。
0311japh ◆J.5V8ta6 NGNG
>>309
stderrをfreopen()するとか、管理者に頼んでhttpdのエラーログ見せてもらうとか。
0312デフォルトの名無しさんNGNG
>>309
あ、ごめん。CGIなのね。デバッグ出力用の関数作って、
えーとたとえば、

#define DEBUG_LOG = "~/debug.log"

void debug_printf(char *format, ...) {
va_list ap;
FILE *fp = fopen(DEBUG_LOG, "a");

if (!fp)
exit(3);
va_start(ap, format);
vfprintf(fp, format, ap);
va_end(ap);
fclose(fp);
}

とかいうので出力しといて、シェルから
% tail -f ~/debug.log
とやっとけばいいんじゃないの。
0313デフォルトの名無しさんNGNG
ビットの
2の補助表現とか浮動小数点表現
についてのっているサイト教えてください
0314デフォルトの名無しさんNGNG
>>309
printf("Content-Type:text/html\n\n");
この行はある?text/htmlじゃなくてもいいけど。
0315デフォルトの名無しさんNGNG
>>313
んなこたぁGoogle先生に聞けよ。
ちなみに ×補助→○補数 な。
0316デフォルトの名無しさんNGNG
>>313
基本情報処理のテキストを買え。
0317313NGNG
今日買ってきましたよ
のってるのかな?
0318313NGNG
載っていた。ありがとん。
0319デフォルトの名無しさんNGNG
ポカーン
0320デフォルトの名無しさんNGNG
#include <stdio.h>

typedef struct{
char a:2;
char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=1;

printf("%d %d\n",k.a,k.b);
}

なぜかk.aが-2が表示される。なんで?
00000010
だから2が表示されるんじゃないの?
0321デフォルトの名無しさんNGNG
>>320
ビットフィールドは無条件でunsignedになります。
0322デフォルトの名無しさんNGNG
>>320
じゃなかったスマソ、signed charだからこそマイナスになるんだ。
0323デフォルトの名無しさんNGNG
aには2ビットしか与えられていない。ここに2を代入すると、最上位
ビットが立ってしまう。つまりsigned charからすると、マイナスの値
になってしまう。

printfする時にintに拡張されて、この符号ビットが伸びてしまう。
0324デフォルトの名無しさんNGNG
#include <stdio.h>

typedef struct{
char a:2;
unsigned char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=2;

printf("%d %d\n",k.a,k.b);
}

これだと、bはunsigned charなので、intになる時に符号拡張が起きない。
従って2が表示される。
0325デフォルトの名無しさんNGNG
というよりも、ANSI C ならビットフィールドは
signed int か unsigned int のみでは?
gcc -pedantic -Wall だと warning が出る。(gcc 2.95.2)

char でも long でもよいのは C++ だろう。
0326デフォルトの名無しさんNGNG
だれか、ダイ=ワーフ問題について答えられる人いますか?
0327320NGNG
ありがとん
0328デフォルトの名無しさんNGNG
昨日NULL の話題が出ていたので、前々々…スレから転載

NULL

・定数の "0" は、文脈によってヌルポインタ、または整数の 0 として解釈される。ただし、可変長引数、またはプロトタイプをもたない関数の引数に現れた場合は整数の 0 として解釈される。
また、整数型とポインター型とで多重定義している関数の引数では、解釈は実装依存となる(C++ 限定)。
・ヌルポインタのビットパターンは実装依存である。
・条件式にヌルポインターが現れた場合、偽となる。
・ヌルポインタとヌルポインタとは等しい。
・ヌルポインタとその他のポインタとは、常に等しくない。
・ポインタ型によりヌルポインタのビットパターンが異なる場合があるが、コンパイラは(騙されない限り)正しい型を知っているので、比較は正しく行われる。

・NULL は 定数 "0" がヌルポインタとして解釈される場合のみ、定数 "0" の代わりに使用できる。他の文脈では、結果が実装依存となる。(NULL を整数 0 の代わりに使用してはいけない)
・NULL の定義方法は処理系に依存する。
0329名無しさん@カラアゲうまうまNGNG
>>312
> #define DEBUG_LOG = "~/debug.log"
これが示すものは、カレントディレクトリにある"~"というディレクトリの下
の"debug.log"というファイルであって、ホームディレクトリにある
"debug.log"ではない。Cの標準ライブラリで~を展開するものはない。
0330312NGNG
>>329
そうでした。恥ずかしい。
ちなみに、ライブラリが~をホームディレクトリに展開してくれたとしても、
CGI実行時のホームディレクトリ(普通ない)と
シェルでのホームディレクトリ(/home/login id)の位置は
一般に異なるんで、みられないっすよね(意味のない議論)。

でもいいたいことは伝わったんじゃないかな、と(必死だ)。
0331名無しさん@カラアゲうまうまNGNG
>>330
> 一般に異なるんで、みられないっすよね(意味のない議論)。
みられないっすよ(意味のない同意)。

> でもいいたいことは伝わったんじゃないかな、と(必死だ)。
伝わっちゃいるがね。
0332332NGNG
332
0333333NGNG
333get!!!!!!!!!!!!!
0334デフォルトの名無しさんNGNG
>>333
そんなチップとかPCとかあるの?
0335デフォルトの名無しさんNGNG
>>331
どうでもよいが唐揚げよこせ。
0336デフォルトの名無しさんNGNG
Pentium333MHz
0337デフォルトの名無しさんNGNG
すいません。超初心者なんですけど、
VCのソースをnmakeするとwin32.makがありませんと出てきます。
VC持ってないんで、Bolandか.Netでのコンパイルの仕方ご存じないでしょうか
0338デフォルトの名無しさんNGNG
>>337
スレ違い。
0339デフォルトの名無しさんNGNG
win32.mak の中に nmake で実行する内容を記述するんじゃなかったっけ?
よく知らないけど。
0340デフォルトの名無しさんNGNG
>>338
どこで聞けばいいでしょうか
MSDNのサンプルはMakefileに全部
!include <win32.mak>
と書いてあって、先にすすまないんですよ
せめてその辺のことがわかるサイトだけでも・・・
0341デフォルトの名無しさんNGNG
>>340
ただで使えるBorland〜スレ
0342デフォルトの名無しさんNGNG
どうもです。
0343デフォルトの名無しさんNGNG
#include <stdio.h>

typedef struct{
char a:2;
char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=1;

printf("%d %d\n",k.a,k.b);
}

なぜかk.aが-2が表示される。なんで?
00000010
だから2が表示されるんじゃないの?

↑最上位ビットだから。という事は,0と1を入れたい場合は,2ビットではなく3ビットでなくてはならないんですよね?
0344デフォルトの名無しさんNGNG
win32.makはwindowsの環境とか標準的なマクロを定義してある。
コンパイルしたければ、win32.makをincludeしないで、自分で
必要な分を定義すれば.netで使えるはず。

win32.makって再配布可能とされていないので、内容を書くことは出来ません
0345デフォルトの名無しさんNGNG
343の言ってることがよく分からんのは私だけ?
0346デフォルトの名無しさんNGNG
>>345
安心しろ。俺もだ。
特に最後の行は全く意味が分からん。

>>343
2ビットのchar(恐らくsigned char)がintに型変換される時に
最上位ビットが立ってる=負数だから型変換の結果も負数になったのでは。
typedef struct{
unsigned char a:2;
unsigned char b:2;
}KOU;
または
printf("%d %d\n",k.a & 3,k.b & 3);
でいけると思う。後者推奨。
0347デフォルトの名無しさんNGNG
>>343
0と1だけなら1ビットでいいに決まってるじゃん。ただその値はintに拡張
すると0と-1になるから、unsigned intにキャストして使えば0と1になる。
0348デフォルトの名無しさんNGNG
343は解決済みじゃなかったか?
0349デフォルトの名無しさんNGNG
>>344
どうもありがとうございます。
とりあえず、341さん御紹介の
BCCスレの過去ログでwin32b55.makなるものを発見。
それから.Net勉強してみます。感謝!
0350デフォルトの名無しさんNGNG
グルーバル変数をなるべく使うなと,書いているのをよく目にするのですが,
ゲームを作っているとどうしてもグローバル変数を使わなければならなくなるのですが。
実際のところどのようにしてる?
0351デフォルトの名無しさんNGNG
ほんとうに、どうしても使う必要があるなら、使うよろし。
0352デフォルトの名無しさんNGNG
Singletonをグローバルと言い張るならグローバルを使うことになるが、
そうでないならSingleton一つ設置しておくだけだな。
0353デフォルトの名無しさんNGNG
たとえば、どっかのソースに、
static int hoge;
という変数があって、この変数にアクセスするのに
GetHoge(), SetHoge() のような関数を使うとするでしょ。

これって、グローバルにアクセスしてるのと大差ないような気が
するんだけど、これでいいの?
0354デフォルトの名無しさんNGNG
どっかのソースにstatic int hogeなんて置かないもん。
0355デフォルトの名無しさんNGNG
>>353
モジュール変数
0356デフォルトの名無しさんNGNG
プログラム全体で通用するようなグローバル変数(errnoとか)じゃなければあまり怖くないな。
0357デフォルトの名無しさんNGNG
>>353
呼び出し側(ソースファイルが異なる)でhoge=0;とやっても大丈夫だもん。
0358357NGNG
でもextern int hoge;と書かなければ大丈夫か・・・
0359デフォルトの名無しさんNGNG
アクセスうんぬんじゃなくスレッドアンセーフ(再入不可能)になることが問題なんじゃなかった?
>>グルーバル変数をなるべく使うなと,書いている
0360デフォルトの名無しさんNGNG
>>353
assertと併用するといい感じになる。
0361名無しさん@カラアゲうまうまNGNG
>>358
定義側でstaticにしてなかったらダメだろ。
0362デフォルトの名無しさんNGNG
public,privateなんて、自分ひとりでプログラム作ってる限り、
そんなに関係ないだろ。

ライブラリや、多人数作業の時は必須だけど。
0363デフォルトの名無しさんNGNG
>>362
それを言ったら個人で使うなら何をやっても良いと思われ。
0364デフォルトの名無しさんNGNG
>>362
んなこたぁ〜ない。
0365デフォルトの名無しさんNGNG
>>363
つまるところ、そうだろ。
公開ライブラリ作るとか、仕事でモジュールを作るとかだったら気をつかうけど、
自分でつかうオナーニプログラムでそんなには気にしないだろ。
とりあえず動けばおーけーで。
0366デフォルトの名無しさんNGNG
>>365
まぁ、同意。
いざ、誰かに見せる段になって恥かくかも知れないけどね。
0367デフォルトの名無しさんNGNG
>>365

いや、普段からそうしてると、業務でもコーディングが
荒れてきちゃうよ。
個人的には、其の辺りをプライベートでもきっちりやる
のがアマとプロの違いだと思っておりますですハイ
0368デフォルトの名無しさんNGNG
一人で作っても保守性って問題があるからな。
0369デフォルトの名無しさんNGNG
>>353
static int hoge;はヘッダに書く必要はないだろ?
それはつまりhogeの存在を隠蔽出来るってことだ。
0370デフォルトの名無しさんNGNG
規模とか、それを何回くらい使うかによるね。
0371デフォルトの名無しさんNGNG
errnoは参照するだけで自分で書き換えたりしない方がよいですか(自作ルーティンのエラー番号を設定する時とか)?
というのもPerlの本にerrnoはUNIXシステムコールが返すエラー番号だと書かれていましたので。
0372デフォルトの名無しさんNGNG
基本的にはそうね。
0373デフォルトの名無しさんNGNG
>>371
書き換えていいかどうか自分で判断できるまで我慢しる。

>UNIXシステムコールが返すエラー番号だと書かれていましたので。
これは表現が正確じゃないな。
っつーか、perl の本を読む前に K&R なり企画書なりを読めYO!
0374デフォルトの名無しさんNGNG
>>372
ありがとうございます。

>>373
K&Rは全てではないけど読みました。
0375デフォルトの名無しさんNGNG
while(1){
for(i=0;i<2;i++){
if((msglen[i] = read(s[i+1],&str[i],1)) < 0){
perror("read");
exit(1);
}
}
if((strncmp(&str[0], &str[1], 1)) == 0){//引き分けの場合
printf("%s\n",buf2);
printf("a1");
for(i=1;i<3;i++){
write(s[i],buf2,strlen(buf2));
}
continue;
}else{
exit(0);
}
}

以上のwhile文のところで、思うような動作をしてくれません。
ifの条件をみたした時、こっちとしては普通にもう一度はじめから動作して
欲しいのですが、なぜか全部3回繰り返した後、こっちの動作を受け付けるように
なるんですけど、なぜでしょうか?
0376デフォルトの名無しさんNGNG
>>375
あ?
0377デフォルトの名無しさんNGNG
1文字ならstrncmpを使う必要はないと思う。
0378デフォルトの名無しさんNGNG
&str[1]ってみにくいね。str+1にして。
0379デフォルトの名無しさんNGNG
醜い
見難い
0380名無しさん@カラアゲうまうまNGNG
>>375
s[0]は使わんの?

> 以上のwhile文のところで、思うような動作をしてくれません。
> ifの条件をみたした時、こっちとしては普通にもう一度はじめから動作して
> 欲しいのですが、なぜか全部3回繰り返した後、こっちの動作を受け付けるように
> なるんですけど、なぜでしょうか?
whileの中にforがあって、その中でcontinueしてるから。
0381デフォルトの名無しさんNGNG
>>375
readとwriteのパラメータってこれでいいの?
配列sにはopen(2)で返ってきたファイルディスクプリタが入ってるのかな。

あとcontinueはいらないし。どうせelseせずwhileまで落ちるんだし。

>>380
>whileの中にforがあって、その中でcontinueしてるから。
それはねえだろ。forの中でcontinueしてないよ。
0382デフォルトの名無しさんNGNG
>>380
s[0]は親プロセスで使ってます。これは子プロセスなので。
長すぎたので省略しました。
continueをはずしても同じように3回繰り返されてしまいました。
0383デフォルトの名無しさんNGNG
>>381
配列s[1]と[2]にはacceptしたファイルディスクリプタが入っています。
0384デフォルトの名無しさんNGNG
>>375
その前に「思うような動作」ってなに?
回答者の解釈をあてにするな。
0385デフォルトの名無しさんNGNG
>>383
なるほど、ソケットか。

えと、3回繰り返されるってのは、
printf("%s\n",buf2);
printf("a1");
が3回、えーとたとえばbuf2が"hoge"だったとして、
hoge
a1
hoge
a1
hoge
a1
と出ているってこと?
0386375NGNG
>>385
そうです。本当は、
hoge
a1
だけかかれて、read()に戻ってほしいのですが、そうなってしまうんです。

>>384
すいません。上のような動作をしてほしいです。
0387デフォルトの名無しさんNGNG
>>386
なるほど。えと、ソケットの向こう側で1文字送ってるつもりが
3文字送ってた、なんてことは、いくらなんでもないかな(w

printf("%s\n",buf2);
を
printf("%s: %02x: %02x\n",buf2, msglen[0], msglen[1]);
に置き換えたらどうなるだろう。
0388名無しさん@カラアゲうまうまNGNG
>>381
> >whileの中にforがあって、その中でcontinueしてるから。
> それはねえだろ。forの中でcontinueしてないよ。
forは二つあるんだが。
0389375NGNG
>>387
: 01: 01がbuf2の後に三回出力されました
0390デフォルトの名無しさんNGNG
>>388
うん。どっちもforの中でcontinueしてないよ。
とりあえず、整形してインデントあわせて見てみたけど。
0391デフォルトの名無しさんNGNG
>>389
むー、わからんなあ。コード自体はおかしなところないようだし。
さっきも書いたけどソケットの向こう側で1文字のつもりが
3文字書いていたのでなければお手上げだ。
0392375NGNG
>>391
3文字書いてはないのですが、さっきのプログラムのwhileの直後に
printf("str[0]:%c\n", str[0]);
printf("str[1]:%c\n", str[1]);
をいれて試してみたところ、やはり2回目と3回目では
str[0]とstr[1]には何も入ってなく、そのままif文にとんで繰り返して
いるみたいでした。
けど3回くりかえすのはなんでなんでしょう・・・?
0393デフォルトの名無しさんNGNG
>>392
最初のifが変。
0394375NGNG
どのように変なのでしょうか?
0395デフォルトの名無しさんNGNG
>>394
それで期待した値がmsglenに入ってる?
と思ったけど、違うような気もしてきた。スマソ
0396デフォルトの名無しさんNGNG
printf("a1");
を
printf("a1\n");
に変えたらどうなるだろう?と言ってみるテスト
0397デフォルトの名無しさんNGNG
3回目までは同じ値が返ってきてるだけじゃないかな・・・
readがどんな値を返してるのか調べてみたら?
0398初心者なんですがNGNG
ここで質問してもいいんですか?
a〜xまでの順列のパターンを列挙させたいんですが、C言語で
どうつくったらいいんでしょうか?
関数とかありますか?ヒントをいただけたらと思うんですが。

例 ABC,ACB,BAC,BCA,CAB,CBA
0399デフォルトの名無しさんNGNG
char str[] = "***";
for(str[0] = 'A'; str[0] <= 'X'; str[0]++)
for(str[1] = 'A'; str[1] <= 'X'; str[1]++)
for(str[2] = 'A'; str[2] <= 'X'; str[2]++)
printf("%s\n", str);
0400デフォルトの名無しさんNGNG
>>398

char str[4];
str[3] = '\0';
for(str[0] = 'A'; str[0] <= 'X'; str[0]++)
 for(str[1] = 'A'; str[1] <= 'X'; str[1]++)
  if ( str[0] == str[1] )
   continue;
  else
   for(str[2] = 'A'; str[2] <= 'X'; str[2]++)
    if ( str[0] == str[2] || str[1] == str[2] )
     continue;
    else
     printf("%s\n", str);

もっとスマートな方法ないのかな〜?
0401初心者なんですがNGNG
>399-400
ありがとうございます。
>399
すいません、同じ値が出てきてしまいます。
>400
「使用できない文字があります。」となってしまいます。どうしてかなぁ?
自分で探せばいいんですが。

ちょっと説明が足りなかったんですが、順列の値をもとに計算とかの処理をさせて
最小の値の順列を求めるということをさせてみようと思ったんですが、
配列とfor文駆使すればいいのかな?知識がないんで頭が痛いです。

0402デフォルトの名無しさんNGNG
>>401
順列生成だったら「c言語による最新アルゴリズム事典」
とかにも書いてあるよ
0403394NGNG
すいません。
acceptしたファイルディスクリプタからの入力を読みとりたいのですが、
whileで何度も読みとりたいのですが、1回目は読みとれるのですが、
2回目以降読みとらずに、勝手に進んじゃいます。
もしかして、一回ずつacceptしなおさないといけないのでしょうか?
0404394NGNG
あと、forkとselectって同時に使えますか?
0405名無しさん@カラアゲうまうまNGNG
>>390
スマソ。グチャグチャなインデントにだまされた。
0406名無しさん@カラアゲうまうまNGNG
>>403
何度もってのが接続ごとにという意味なら当然そのたびにaccept()が必要だが、
どういう風にやってるのかソースを出すべし。

>>404
同時にってどういうことよ? fork()してからselect()は当然可能だが。
0407デフォルトの名無しさんNGNG
>>400
スマートかどうかわからんけど、より汎用的なのを作ってみた。
はじめは、[a-x]に24文字あるから、24進数3桁の数字を111から
カウントしていくってコードを思いついたけど、
汎用にしたらオーバーフロー起こしそうな感じだったので
再帰で実装してみた。

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

void rgenerate(unsigned int digit, const char *seed, char *buf)
{
int i;

if (!digit) {
puts(buf);
return;
}
for(i = 0; i < strlen(seed); ++i) {
buf[digit - 1] = seed[i];
rgenerate(digit - 1, seed, buf);
}
}

int generate(unsigned int digit, const char *seed)
{
char *buf = (char*)malloc(digit + 1);
if (!buf) {
return -1;
}
buf[digit] = '\0';
rgenerate(digit, seed, buf);
free(buf);
}

int main(int argc, char * argv[])
{
generate(3, "abcdefghijklmnopqrstuvwx");
return 0;
}
0408デフォルトの名無しさんNGNG
>>407
インデント無しでその括弧付け・・・
0409デフォルトの名無しさんNGNG
>>408
すまん、emacsからそのままコピペ。
行頭の半角スペースは見えなくなっちゃうのよね…
0410デフォルトの名無しさんNGNG
2chでソース晒すとそうなっちゃうんだよね。
そういう時は、エディタにコピーしてインデント付けながら読むとえ〜よ。
0411名無しさん@カラアゲうまうまNGNG
2ch用ブラウザで見るとちゃんと見えるよ。navi2chとか。
0412デフォルトの名無しさんNGNG
>>411
かちゅは無理
0413名無しさん@カラアゲうまうまNGNG
書き込むときに連続するスペースを全角にするとか、
&nbsp;にするとかいう機能があるといいかもね。
0414デフォルトの名無しさんNGNG
>>412
ん?>407はかちゅでちゃんとインデント付いて見えたけど
0415デフォルトの名無しさんNGNG
ポップアップだと見えるけど、そうでないなら見えない
0416デフォルト名無しさんNGNG
以下のプログラムを実行すると、6文字以上打ち込んでも
返してくれます。
変数"ss"は5文字と指定しているのに。
どうしてなのでしょうか?
教えてください。


int main()
{
char ss[5];
cin >> ss;

cout << ss << '\n' << ss << '\n' ;

return 0;
}
0417デフォルトの名無しさんNGNG
>>416
単に配列ss[]がオーバーフローしているだけ。関数を呼び出したりしてから
表示するとバグる可能性大。
0418デフォルトの名無しさんNGNG
よくわかんないんだけど4文字じゃなくて5文字なの?
ってーかC++だし。
0419デフォルトの名無しさんNGNG
>>418
うむ。4文字までだな。'\0'を入れて5文字まで。
0420デフォルトの名無しさんNGNG
>>416
それ、8文字以上でも大丈夫か?
0421名無しさん@カラアゲうまうまNGNG
ダメだろうな。たぶん表示した後でコケると思われ。
もっと大量に打ち込むと表示するときにコケるかも試練。
0422デフォルトの名無しさんNGNG
fgetsでええやん
0423416NGNG
試しに10文字以上適当に打ち込んだら
エラーという反応だった。

ところで416に書いたプログラムがC++とどうしてわかったん???
0424デフォルトの名無しさんNGNG
スレ違いと分かっていて聞いたのね。
Cにoperator>>()もstd::cinもない
0425Pennis M.RitchieNGNG
ふざけんな
0426デフォルトの名無しさんNGNG
>>423
おいおいそんなことぐらいわかるよ、 ね。
0427416NGNG
>424
マジで解らんかった。。。
このレベルならCもC++も同じなんだろうな、くらいの
感覚でここに書き込んだ。
迷惑だったらスンマソン
0428デフォルトの名無しさんNGNG
>>68
違反おきなかったら逆に怖くない?
0429デフォルトの名無しさんNGNG
C言語で,ユーザーに名前を入力させてそれを使っていきたいんだけど(MS-DOSではないです),
win32API使わないと入力欄とか作れないのかな?
0430デフォルトの名無しさんNGNG
うん
0431デフォルトの名無しさんNGNG
>>429
MS-DOSではないものを作る=ウィンドウズプログラムを作る
つーこと?

ウィンドウズプログラムを作るは、win32APIはほぼつかうです。

0432デフォルトの名無しさんNGNG
>>428
違反が起きないこともありうる。
randが返してきた値をポインタに変換したとき、
偶然スタックを指してたとかヒープを指してたとか。
書いた場所がスタックにある関数の戻りアドレスだったり、
レジスタを退避した場所だったりしたら一見関係ない場所で大抵クラッシュするだろうけど、
そうじゃない場合もありうる。

まあ大抵は違反が起きてくれるだろうけど。

だからこの種のポインタの値が腐ってるコードが一見うまく動くように
偶然なってしまった場合、非常に見つけ出すのが困難なバグになる。
0433デフォルトの名無しさんNGNG
点 P(x、y)があったとして。
i=0;i<30;i++
というループのなかでちょうどよくその点を中心に横半径RX 縦半径RY の円を描く様な点を求めるにはどうコーディングすればよいのでしょう?
0434デフォルトの名無しさんNGNG
>>433
いいなおしてくれ
0435433NGNG
>434
すみません。つまり、

int rx=40,ry=30;//半径40、30の楕円
int x=100,y=100;//中心
int p_x[30];//点を格納する配列
int p_y[30];//同上
for(int i=0;i<30;i++){

//ここで、rx,ryの円を描くように繰りかえし回数と等しい変化の割合で上限30個の点を求めたい。

}
0436デフォルトの名無しさんNGNG
>>435
12度ずつ角度をつけて(cos,sin)で半径rxの正円を書いてから、
縦に(ry/rx)倍して最後に(x,y)だけ平行移動
0437436NGNG
ちょっといびつになるが。
0438433NGNG
>436
なるほど!形の綺麗さにはこだわらない部分なので大丈夫です。どうもありがとうございました。
0439デフォルトの名無しさんNGNG
>>378
おいらどっちかと言えば str+1 よりも &str[1] の方が好き。
0440デフォルトの名無しさんNGNG
みなさん、関数プロトタイプって書いてますか?
0441デフォルトの名無しさんNGNG
>>440
規模の小さいプログラムなら関数の定義の順番を工夫して
書かないで済ませることもあります。

しかしソースを複数に分割するような場合は必ずプロトタイプをヘッダに書いてincludeします。
ちょっとした労力でバグが入る可能性を大きく減らせますから。
しかもプロトタイプがないと、コンパイラは関数の返す値をintと仮定しちゃうので、
いろいろ面倒なことも起こりがちですし。

staticな関数の場合はプロトタイプ書かないことが多いです。
0442デフォルトの名無しさんNGNG
ハァ(゚Д゚)?
0443デフォルトの名無しさんNGNG
ハァ(゚Д゚)?
0444デフォルトの名無しさんNGNG
>>440
当然だ。
externならヘッダーファイルに、staticなら同じファイルに書いている。
0445デフォルトの名無しさんNGNG
整数計算の桁数をdoubleより大きくすることはできないんでしょうか?
バイト長を指定できたりとかはしませんか?double(=8バイト)では足りないのです。
始めたばかりで何も分からずすいません。
0446デフォルトの名無しさんNGNG
>>445
long doubleが使えるかも。
0447デフォルトの名無しさんNGNG
整数計算とdoubleに関係が?
0448デフォルトの名無しさんNGNG
ハイハイ。
0449446NGNG
>>447
なんかひっかかると思ったら、doubleで整数ってなんじゃ〜
0450デフォルトの名無しさんNGNG
longをつけても変わりませんでした。
整数計算なんですが、x^255などというでかい数字を計算するもので、unsignedなどでは桁が全然足りないのでdoubleを使ったのです。
それで、無限桁数であればいいなと思ったのです。
0451デフォルトの名無しさんNGNG
>>450
xが0か1ならcharで大丈夫(ワラ
0452デフォルトの名無しさんNGNG
long longとか使えば?
後は文字列にするとか、
多売長にするとか。
0453デフォルトの名無しさんNGNG
>>441>>444
アリガトゥー。
0454デフォルトの名無しさんNGNG
>451
(^_^;)
>452
long long と書いたら蹴られました。
多倍長のやりかたが分かりません…すいません…
0455デフォルトの名無しさんNGNG
多倍長しかないだろ。
0456デフォルトの名無しさんNGNG
>>454
マァヴ(^_^;)
0457デフォルトの名無しさんNGNG
>>454
C++なら多倍長クラスがあるがどうよ?
0458デフォルトの名無しさんNGNG
>>454
このスレか前のスレにbignumについて書いてあるから、それみてみれ。
Cで使えるbignumライブラリについてのポインタがあったと思ったぞ。
0459デフォルトの名無しさんNGNG
>456
聞いたことあります。携帯板かどこかで見たような?
>457
Cでやってます。何も知らなくてすいません。
>458
探してみます。ありがとうございます。

しばらくいろいろやってみます。ありがとうございます。
0460デフォルトの名無しさんNGNG
>>454
long longが跳ねられる…VCか?
__int64とか。
0461デフォルトの名無しさんNGNG
>>460
それでも全然桁が足りないらしい。
0462デフォルトの名無しさんNGNG
>>460
255乗する必要あるんだから、64bitでは全然足りんのではないか。
2^255でさえ、255bit必要だし。
0463デフォルトの名無しさんNGNG
そもそも^255する必要があるのか?
0464デフォルトの名無しさんNGNG
いったい何をするんだろ?
0465デフォルトの名無しさんNGNG
しらね
0466デフォルトの名無しさんNGNG
>>464を攻撃します
0467デフォルトの名無しさんNGNG
素晴しい!
0468デフォルトの名無しさんNGNG
fopenでファイルを開くときに、exeとは別のフォルダの中にあるファイルを開くことってできませんか?
絶対パス指定とかしてもだめっぽいんですが・・?
0469デフォルトの名無しさんNGNG
>>468
無理。
0470デフォルトの名無しさんNGNG
>>468
まさか\マークを2個重ねてないとかそういうことか?
但しDOS/Windowsの話だが。
0471デフォルトの名無しさんNGNG
¥は二つ重ねてるよ。
やっぱ無理かね
0472デフォルトの名無しさんNGNG
じゃあ、やっぱ無理なのかもしれないね
0473デフォルトの名無しさんNGNG
もう一度言ってみてください。
0474デフォルトの名無しさんNGNG
わけわからん
0475デフォルトの名無しさんNGNG
絶対パスを指定しても駄目ってことあるのかな。
ファイルが無いとかじゃなく。
0476デフォルトの名無しさんNGNG
>>1-1001
無理なモンは無理
0477デフォルトの名無しさんNGNG
>>471
んなこたーない。
0478名無しさん@カラアゲうまうまNGNG
>>468の脳味噌に無理がある
0479デフォルトの名無しさんNGNG
>>477
確かにんなこたーない。
うちでもちゃんと動く。

絶対の話があがってるけど、相対はどうなん?
0480デフォルトの名無しさんNGNG
相対でも絶対でも開けるだろ。
ちなみにVCだとdebugとかreleaseとかのフォルダにexeがあるが、
VC上で動かすときはその一つ上のフォルダにexeがあるようなイメージになっているので
相対パスの指定がそんなかんじ。
0481デフォルトの名無しさんNGNG
相対のときはカレントディレクトリがどこに設定されてるかで
結果が変わってきませんか?
0482デフォルトの名無しさんNGNG
C言語ってDOS窓で動くんですか?
0483デフォルトの名無しさんNGNG
>>482
いいえ、コンピュータで動きます。
たまたま標準出力がそこにあるだけ。
0484デフォルトの名無しさんNGNG
>>482
C言語は動かないです。C言語で作られた実行モジュールが動きます。
0485デフォルトの名無しさんNGNG
ネタはマ板でやってくださいです。。
0486デフォルトの名無しさんNGNG
>>482 コンソールモードでコンパイルすれば DOS窓で動くアプリが作れますよ。
0487デフォルトの名無しさんNGNG
>>481
あたりまえだろ。そんなことをここで聞くな。
0488わからないNGNG
どう説明していいかわからないのですが、「a^63をコンピューターに計算させようとしたとき、最低何回乗算すれば求まるか」という問題で、僕は答えが8回だと思ったのですが、解答を見ると10回になっていました。
↓具体的に考えた例を挙げておきます。

a^3 = a^1 * a^1 * a^1
a^7 = a^3 * a^3 * a^1
a^21 = a^7 * a^7 * a^7
a^63 = a^21 * a^21 * a^21

↓模範解答ではこうなっていました。

a^1 * a^1 = a^2
a^2 * a^2 = a^4
a^4 * a^4 = a^8
a^8 * a^8 = a^16
a^16 * a^16 = a^32
a^32 * a^16 = a^48
a^48 * a^8 = a^56
a^56 * a^4 = a^60
a^60 * a^2 = a^62
a^62 * a^1 = a^63

一体僕の解答のどこがおかしいのか教えてください。
0489デフォルトの名無しさんNGNG
>>488
6回でできるよ。

a^3 = a^1 * a^1 * a^1
a^9 = a^3 * a^3
a^7 = a^3 * a^3 * a^1
a^63 = a^7 * a^9
0490デフォルトの名無しさんNGNG
7回だった。逝ってきます・・・・・・

a^3 = a^1 * a^1 * a^1
a^9 = a^3 * a^3 * a^3
a^7 = a^3 * a^3 * a^1
a^63 = a^7 * a^9
0491デフォルトの名無しさんNGNG
とりあえずツッコミ・・・
a^7 * a^9 は a^16 っす・・・
0492デフォルトの名無しさんNGNG
・・・・と思ったけどやっぱり6回でできるね。

a^3 = a^1 * a^1 * a^1
a^6 = a^3 * a^3
a^9 = a^6 * a^3
a^7 = a^6 * a^1
a^63 = a^7 * a^9
0493デフォルトの名無しさんNGNG
>>491
ガーン
0494デフォルトの名無しさんNGNG
Cとなんの関係があるのだろうか。
0495わからないNGNG
あ、すいません。すれ違いでした。
宿題スレに行って来ます。
0496わからないNGNG
みなさんありがとうございます。でもやっぱり分かりません。僕の答えと模範解答の違いがよく分からなかったのです。
0497デフォルトの名無しさんNGNG
1回できますよ.
a^63 = a ^ 1 * a ^ 1 * (中略) * a ^ 1
です.↑でa ^ 1は63回出てきます.
0498デフォルトの名無しさんNGNG
>>497
62回じゃん
0499デフォルトの名無しさんNGNG
>>497
つかそれ乗算ありすぎ。
0500デフォルトの名無しさんNGNG
C言語って、どのくらいで習得できるん?
0501さくらNGNG
カイジっておもしれーな。
0502デフォルトの名無しさんNGNG
>>500
串打ち三年・割き八年・焼き一生
0503500NGNG
>>502
真面目に答えろ!
0504デフォルトの名無しさんNGNG
>503
天才なら3日
0505デフォルトの名無しさんNGNG
Cって乱数発生の関数ないの?
0506デフォルトの名無しさんNGNG
>>488
0回で出来た。

pow(a,63);
0507デフォルトの名無しさんNGNG
>>505
rand
0508デフォルトの名無しさんNGNG
習得って?
0509デフォルトの名無しさんNGNG
>>505
疑似乱数生成関数ならあります。
0510デフォルトの名無しさんNGNG
あのぅ、fork()とpipe()をつかってnkfに漢字変換をさせたいと考えて
ますが、nkfにデータを渡す際、パイプを閉じているにもかかわらず、
nkfがデータの終わりを待って、デッドロックが発生します。

どのようにすればいいんでしょう?
0511デフォルトの名無しさんNGNG
>>503
>>502が真実を語ってると思われ。
0512デフォルトの名無しさんNGNG
経験がものを言う世界だからな。本だけ読んでもどうにもならない。
0513デフォルトの名無しさんNGNG
>>510
親プロセスが、ちゃんと EOF まで nkf の出力パイプを読みきってあげていますか?
0514デフォルトの名無しさんNGNG
>>513
親プロセスのwait()でひっかかっていて、nkfの出力パイプを読めるところまでいっていません。

nkfの出力パイプを試しに標準出力にしてみてみると、入力待ちをしているようです。

nkfへの出力パイプにはwriteして、最後にclose()を呼び出しています。なので、パイプは切れているはずですが、なぜに待ち続けるnkf・・・。
0515デフォルトの名無しさんNGNG
ゴメソ。できた。
パイプは2個つかうのね・・・ドキュソぶりを発揮してしまった罠。
0516デフォルトの名無しさんNGNG
(a)^=(b), (b)^=(a), (a)^=(b)
どうしてこれが置換になるのですか?
0517デフォルトの名無しさんNGNG
1番目の式でaに aとbの違い が代入される。
2番目の式でbに aとbの違い とb の違いが代入される。これはもとのa。
3番目の式でaに aとbの違い とa の違いが代入される。これはもとのb。
0518デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/983191866/856-857n
0519デフォルトの名無しさんNGNG
GUI処理と内部ロジックは,分けろといわれたんですが
GUI処理って画像の表示とかでしょうか?
0520デフォルトの名無しさんNGNG
>>519
グラフィカルなユーザインタフェースとかでしょう。
0521デフォルトの名無しさんNGNG
「コメントがなくてもわかるようにかく・・・」
ゲーム作っていればむりぽなのだが
0522デフォルトの名無しさんNGNG
xorってこんなことにも使えるんだ。ビット反転くらいにしか使わなかったが・・・
0523デフォルトの名無しさんNGNG
それでいいって・・
0524デフォルトの名無しさんNGNG
>>521
どのへんが?
0525デフォルトの名無しさんNGNG
1の補数とか2の補数って何の考えで使うんだろう?
みんな覚えている?
覚えていた方がいい?
0526デフォルトの名無しさんNGNG
>>525
確か引き算に使ったような、違うかな
0527デフォルトの名無しさんNGNG
swapなら
a=a+b-(b=a);
もアルネ。

>>525
引き算に使うというか。CPU内では
10 - 5 は 10 + (-5)
と処理されます。
引き算の命令なんかほんとは無いんですよ。
その正の数を負にするのが2の補数。
知ってて得したことは無し。
でもビット反転~は知っとこう。
0528デフォルトの名無しさんNGNG
負の整数は2の補数で表現される。
でもって、2の補数は1の補数+1だ。
1の補数は全部のビットを逆にしたやつ。
0529デフォルトの名無しさんNGNG
>>526-528
役に立ちました
参考書以上に理解できました
0530デフォルトの名無しさんNGNG
実数型には通用しない事が多いからそこんとこヨロ。
0531デフォルトの名無しさんNGNG
>>527
わかってるとおもうけど、ないのは減算命令じゃなくて減算器。
なお、普通は整数演算は加算とビット演算はひとつの演算器になってる。

たまーに、負数の内部表現が2の補数であることを(無意識に)仮定して、
ワードの全ビットを1にするのに-1と書いてあるコードがあるけど、
正しくは~0(うるさくいうと~((unsigned)0))。
0532デフォルトの名無しさんNGNG
>>531
~0u
0533デフォルトの名無しさんNGNG
どっちもおなじやん
0534デフォルトの名無しさんNGNG
>普通は整数演算は加算とビット演算はひとつの演算器になってる。
おれはこの日本語が分からん。不定形だ。

ところで型接尾子u、UはANSI規格内じゃなかった気が
するんだけど、どうなん?
0535デフォルトの名無しさんNGNG
>>534
はじめてのCから勉強し直してきなさい
0536デフォルトの名無しさんNGNG
整数演算は→整数の
0537デフォルトの名無しさんNGNG
入門書で、copy コマンドのようなもの
を作るといSAMPLEがあってコンパイ
ルしてみたんですけど、.exeファイル
がコピーできません。
なぜでしょう??
テキストファイルしかCOPYできないん
です。
0538デフォルトの名無しさんNGNG
ファイルをバイナリモードで開いてないから
0539デフォルトの名無しさんNGNG
fgetsからintを使うfgetcにしたら解決しました。
0540デフォルトの名無しさんNGNG
>>539
もしかして copy のサンプルがその本ではfgets()で書いてあったのか!?
そんな本捨てろよ。
0541ロリNGNG
VC++で聞こうか迷ったんですが、
とりあえずVC++6.0の環境で、
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
char value;
value = 1042*1042*1042;
printf("%d\n",value);
return 0;
}

をビルドすると警告のみで済み(エラーなし)、
実行すると「-56」と出ます。
何故???
コンパイルの時点でエラーが出ない事がそもそも不思議ちゃん。
0542デフォルトの名無しさんNGNG
ロリは帰れ
0543デフォルトの名無しさんNGNG
scanf("%d",&a);
で数値を入力させるといちいちEnterキーを押さないといけませんよね。
なんとかEnterキーを押さずに数字入力したいのですが
どうすればいいのでしょうか?
0544デフォルトの名無しさんNGNG
>>543
難しいですね
1 と
12 と
120 をどうやって区別するんでしょうか
0545デフォルトの名無しさんNGNG
>>544
超能力で見分ける。
0546ロリNGNG
低レベルなボケ(プ
0547デフォルトの名無しさんNGNG
>>541
本を読め。死ぬほどよめ。
0548デフォルトの名無しさんNGNG
死ぬまで
0549デフォルトの名無しさんNGNG
>>543
まずは
>>1であげられてる
・C FAQ 日本語訳
を読め。
0550デフォルトの名無しさんNGNG
>>541
明らかにネタとわかるネタはやめて。
0551デフォルトの名無しさんNGNG
>>544
一桁の数字なら方法はありますか?
0552デフォルトの名無しさんNGNG
>>551
標準ライブラリでは無理(なはず)。
windowsならgetcheでできたような・・・
0553デフォルトの名無しさんNGNG
>>551
http://www.catnet.ne.jp/kouno/c_faq/c19.html#1
0554デフォルトの名無しさんNGNG
cygwinでncurses使ったらどう?
0555543NGNG
>>544 >>549 >>552 >>553
ありがとうございました。
C FAQ 日本語訳 システム依存までは読んでませんでした。
回線で首つって逝って来ます。
0556デフォルトの名無しさんNGNG
>回線で首つって逝って来ます。
意味わかってんの?

0557デフォルトの名無しさんNGNG
>>556ワラタ
0558デフォルトの名無しさんNGNG
>>556
マジレスつまらん
0559デフォルトの名無しさんNGNG
下手に通ぶるのも痛い罠。
0560デフォルトの名無しさんNGNG
>>541
1042が、微妙に天然のヨカソ
0561デフォルトの名無しさんNGNG
>>560
ワラタ
あごが外れるかとオモタよ
0562デフォルトの名無しさんNGNG
>>560
気がつかなかったよ
0563デフォルトの名無しさんNGNG
ioctl()をラップする関数ってどうやって書くの

...の部分をどうしたらいいかわかりません
0564デフォルトの名無しさんNGNG
みなさん、こんにちわ。
C言語を勉強中なんですけど分からないところがあります。ぜひ、教えてください。
MS VC++6.0でCのソースを開いてコンパイルして使っています。
配列を多く使うとエラーになってしまうんですがどうしてでしょうか?

char ss[1024][1024][1024]; ←これだと大丈夫。

char ss[4096][4096][4096]; ←これだとだめ。(c2133エラー)サイズが不明です。が出てしまいます。
0565デフォルトの名無しさんNGNG
36bit個だぞゴルァ!
0566デフォルトの名無しさんNGNG
>564
なんのために、そのような暴挙を?
0567デフォルトの名無しさんNGNG
1024*1024*1024 = 0x40000000
4096*4096*4096 = 0x1000000000

なっ
0568デフォルトの名無しさんNGNG
そういうもんだから。
0569564NGNG
すいません、

>char ss[1024][1024][1024]; ←これだと大丈夫。
これでは、エラーは出なかったけど実行出来ませんでした。

ータル イメージ サイズ -2147278848 が最大値 (268435456) を越えています;
0570564NGNG
多く配列が欲しい場合どうすればいいのでしょうか?

出来れば char ss[16384][16384][16384]ぐらい欲しいのですが…。
無理でしょうか?
0571デフォルトの名無しさんNGNG
まじで、なにをするのよ?
0572デフォルトの名無しさんNGNG
>>570
Cとしては正しいよ。
あと50年くらいすれば実行できるんじゃない?
0573デフォルトの名無しさんNGNG
>>564
そのタイミングでそのネタは、アレだよ…
0574デフォルトの名無しさんNGNG
>570
それってテラバイトいってないか?
0575デフォルトの名無しさんNGNG
つーか、汎用機でもそんなにメモリ積んでない
0576 ◆JAPH9PWA NGNG
メモリを400TBもつかって何するつもりなんだか…。
0577名無しさん@カラアゲうまうまNGNG
>>574
4TBだね。流体シミュレーションでもしようってのかな。
0578 ◆JAPH9PWA NGNG
間違えた…ウワァァァン
0579デフォルトの名無しさんNGNG
( ´,_ゝ`)
0580マグマ大便NGNG
64ビットCPUと対応するコンパイラがないと無理じゃないの?
0581名無しさん@カラアゲうまうまNGNG
OSから必要と思われ。
0582デフォルトの名無しさんNGNG
(´-`).。oO(きっと地球趣味レータで動かすんだよ)
0583デフォルトの名無しさんNGNG
あのー、俺は double [100000][100000][100000][100000] 必要なんですけど
どうすればいいですか?逝ってよしですか?

超対称性理論を実証するのに必要なんですけど・・・・・
0584デフォルトの名無しさんNGNG
整数でやれば?
char[100000][100000][100000][100000]
0585デフォルトの名無しさんNGNG
>583
心配しなくても、計算が終わる頃にはそれくらい当り前にできるようになってるよ。
0586584NGNG
ああ、前スレ読んでなかったよ。。
これでもオーバーフローするんだね。(鬱

>>583
あらためて。
PS3買ってグリッドコンピューティングでもすれば?
0587デフォルトの名無しさんNGNG
PS3はcellを搭載しませんが、何か?
0588デフォルトの名無しさんNGNG
64bit対応コンパイラでも無理なのかな(sparcとかalphaとか)
アドレス空間は64bit,longも64bitでもintが32bitだと無理かも
0589デフォルトの名無しさんNGNG
char ss[2][2][2][2]でもオーバーフロウします。。。
0590デフォルトの名無しさんNGNG
char ss[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1];
で代用してください。
0591デフォルトの名無しさんNGNG
あのー、ほんとに基本で申し訳ないんですけど、
標準入力からの文字と数字の見分け方ってどうすればいいんですか?

ほんとにすいません。
でもとりあえず教えてくださいお願いします。
教えてもらったらキーボードのカドに頭ぶつけて二度と来ないんで、
これだけは教えてください。
0592デフォルトの名無しさんNGNG
>>591
なぜそんなに謝るんだね?
ん?何をしたんだい?言ってみなさい。
大丈夫、秘密は絶対誰にもしゃべらないから。
0593デフォルトの名無しさんNGNG
int main(void)
int main()
main()
などがありますが、どれを使ったほうがいのですか?
0594デフォルトの名無しさんNGNG
>>593
void main(void)
が正解です。
0595デフォルトの名無しさんNGNG
>>594
それは環境による。大概のOSは int main(void) が正解。
0596デフォルトの名無しさんNGNG
>>591
標準入力から流れてくるのは文字列だけ?
そうなのだったら、ctype.hの各関数(マクロ)を調べるとよい。
0597デフォルトの名無しさんNGNG
>>593
規格上はint main()が正解。int main(void)は同じ。プロトタイプだと話は変わってくるけど。
0598デフォルトの名無しさんNGNG
スレとしてはvoidが正解
0599デフォルトの名無しさんNGNG
FILE *main()
0600デフォルトの名無しさんNGNG
>>595
つか規格上は、mainはintを返さないとまずい。
まずいというか、intを返さなければならない。
0601591NGNG
>>596
標準入力からは、文字列のみ、または数字のみです。
文字列と数字が混ざることはありません。
この場合、どんな関数で受け取るのが都合がいいのかも
あわせて教えてもらえるととてもありがたいです。
0602デフォルトの名無しさんNGNG
>>601
isdigit()
0603593NGNG
いろいろな返答ありがとうございます。
とりあえず、
int main()
int main(void)
のどちらかをつかっておけば、無難ということでOKですか?
0604デフォルトの名無しさんNGNG
>>603
うん。あとは、
int main(int argc, char **argv)
も使う。とにかくmainはintを返しとけ。
0605591NGNG
>>602
それだ!!
ありがとうございます。
ではお約束通りキーボードのカドに頭ぶつけて逝ってきます。
0606名無しさん@カラアゲうまうまNGNG
>>601
お前の定義じゃ数字は文字列に含まれないのか小一時間
0607デフォルトの名無しさんNGNG
>>606
議論する抽象化の度合いが違うんでは?
0608デフォルトの名無しさんNGNG
はい、唐突に質問です。パスワードを暗号化して記録しておくためにハッシュを行いたいんです。
crypt()を用いてDESハッシュはできたのですが、暗号文が短いのでちょっと不安。

そこでmd5ダイジェストを実装しようとしたのですが、コンパイルが上手く行きません。
現在Vine Linux環境で、コマンドラインの指定が間違ってると思うのですがアドバイスをお願いします。
エラーメッセージは↓(次に続く)
0609608NGNG
必要なやつをリンクさせる気がするのですが…

$gcc -o main.c md5_crypt.o
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x18): undefined reference to `main'
md5_crypt.o: In function `md5_crypt':
md5_crypt.o(.text+0x45): undefined reference to `MD5Init'
md5_crypt.o(.text+0x64): undefined reference to `MD5Update'
md5_crypt.o(.text+0x83): undefined reference to `MD5Update'
md5_crypt.o(.text+0x93): undefined reference to `MD5Final'
collect2: ld returned 1 exit status
0610608NGNG
失礼、↑ちょっと訂正。

$gcc -o md5 main.c md5_crypt.o
0611名無しさん@カラアゲうまうまNGNG
>>609
そのmain.cとmd5_crypt.oはどっから持って来たもの?

> $gcc -o main.c md5_crypt.o
もしかして、本当にこうやってmain.cを壊したとか。
0612608NGNG
さっきのはここに書くときに間違えただけなのでmainは無事です。
main.cは関数を呼ぶだけでmd5_crypt.c、md5_crypt.hはmd5暗号化処理を行う関数の実体を記述してます。

で、MD5Init、MD5Update…とかはjman md5で調べたら<openssl/md5.h>を
インクルードして使うらしいので全部ライブラリを流用しました。
なんか、これらmd5関連の関数の実体をリンカで結べばいい気がするのですが、どこにある何をもってこればいいのかワカリマセン
0613名無しさん@カラアゲうまうまNGNG
-lcrypto
0614608NGNG
>>613
試してみたけど先程と同じエラーがでます。うーむ

$gcc -o md5 -lcrypto main.c md5_crypt.o
md5_crypt.o: In function `md5_crypt':
md5_crypt.o(.text+0x45): undefined reference to `MD5Init'
md5_crypt.o(.text+0x64): undefined reference to `MD5Update'
md5_crypt.o(.text+0x83): undefined reference to `MD5Update'
md5_crypt.o(.text+0x93): undefined reference to `MD5Final'
collect2: ld returned 1 exit status
0615名無しさん@カラアゲうまうまNGNG
>>614
$ gcc -o md5 main.c md5_crypt.o -lcrypto

-lオプションは順序を考えないと。
0616608NGNG
何度も申し訳ない。順序を換えても変化なしです…。
うおお、謎ッ!
0617名無しさん@カラアゲうまうまNGNG
$ gcc -print-file-name=libcrypto.so
でlibcrypto.soを確認して、
$ rpm -qf /path/to/libcrypto.so
とか
$ nm /path/to/libcrypto.so | grep MD5
ってやったらなんか出て来る?

(/path/to/libcrypto.soはgccで表示されたファイル名)
0618デフォルトの名無しさんNGNG
>>616
手元のマニュアル見ると、
MD5_Init
みたいにアンダーラインが入ってるようだけど?

gcc に -Wallオプションつけて未宣言関数を呼び出そうとしてないかチェックしてみたら?
0619名無しさん@カラアゲうまうまNGNG
>>618
> みたいにアンダーラインが入ってるようだけど?
あ、気づかなかった…。伐つ出汁。
0620デフォルトの名無しさんNGNG
ド素人な質問はここでいいんでしょうか…?
0621デフォルトの名無しさんNGNG
>>620
C言語なら
0622620NGNG
>>621
即レスしていただきありがとうございます。
でも聞く前にもうちょっとがんばってみようと思いますので。
どうしようもなくなった時はまたお願いします。

まあただ単に、配列に関数どかどかならべて順番に実行したいだけなんですが。
0623デフォルトの名無しさんNGNG
int型の変数aとbがあったとして、このaとbの符号が異なっている場合にtrueを得るにはどうすればスマートでしょうか?
if文で比較するような、泥臭い方法しか思い付きませんでした... (TT)
0624デフォルトの名無しさんNGNG
最上位ビットの排他的論理和をとる
0625デフォルトの名無しさんNGNG
>>623 aとbを掛けて、正か負か
0626デフォルトの名無しさんNGNG
つか、すなおにif文つかうのが、スマート。
0627デフォルトの名無しさんNGNG
>625
オーバーフローは大丈夫か?
0628デフォルトの名無しさんNGNG
どっちかが0だとダメ。
0629デフォルトの名無しさんNGNG
>>623
その部分がボトルネックになることが分かってから考えたら?
0630デフォルトの名無しさんNGNG
うーん、自分があふぉなんだと思ってたんだけど...
スマートな方法が思い付かないんじゃなくって、そんな方法は無いのかな。

>>624
int型のサイズを決め打つような方法は採りたくないんですよ。
最上位ビットのマスクを求めるようなコードを書くのなら、if文の方がマシなような...

>>625
おぉ、プラスになれば符号は同じ、マイナスになれば符号が違ったって事ですね。
思い付かなんだ... (恥)

>> 627
オーバーフローしても、符号自体は保持される筈ですね。


今はif文で書いてあるんですけど、ちょっとテストしてから書き直してみます。
ありがとうでした。
0631デフォルトの名無しさんNGNG
>>629
確かにボトルネックになる部分ではありますが、それよりは「このコード格好悪いなぁ」という方が問題かも... (w

if( is) {
a = 1;
} else {
a = 2;
}

と書くよりは

a = is ? 1 : 2;

って書きたいですよね? 漏れだけかな...


>>628
ご指摘の通りです、書くときに考慮します。
0632デフォルトの名無しさんNGNG
4バイトだとして
0x80000000 * -1 = 0x80000000
じゃなかったっけか
0633デフォルトの名無しさんNGNG
本当にボトルネックになってるのなら、そういう基本操作はアセンブラでやったほうが速くなるかも。
0634デフォルトの名無しさんNGNG
うーむ。個人的には624に結構感動したのだが。一番速いと思うし。
0635デフォルトの名無しさんNGNG
>>633
この程度なら、まともなコンパイラならちゃんと最適化してくれるから、
自分でアセンブラ書くのはやめといたほうがいいかと。
0636デフォルトの名無しさんNGNG
int f(int a, int b)
{
 return ((a & (1<<(CHAR_BIT*sizeof(int)-1))) ^ (b & (1<<(CHAR_BIT*sizeof(int)-1)))) != 0;
}
int g(int a, int b)
{
 return ((unsigned)a >> (CHAR_BIT*sizeof(int)-1)) ^ ((unsigned)b >> (CHAR_BIT*sizeof(int)-1));
}
int h(int a, int b)
{
 return (a < 0) != (b < 0);
}
クリティカルな部分に使うなら、gを使ってhの内容をコメントに書いておく
0637デフォルトの名無しさんNGNG
ん?
return (a^b)>>(CHAR_BIT*sizeof(int)-1);
の方が良くない?
0638デフォルトの名無しさんNGNG
だんだんトリッキーになりつつある
0639デフォルトの名無しさんNGNG
鳥ッキー
0640デフォルトの名無しさんNGNG
>>631
無理にif文を使わないようにする方が格好悪い。
0641デフォルトの名無しさんNGNG
まあ三項演算子のほうが生成される実行ファイルが小さくなりやすいだろうが。
0642デフォルトの名無しさんNGNG
>637がベストだ。気がつかなかった。
あと、(a^b)をunsignedにキャストしないと、
結果がうまく0or1にならないかもしれないね(処理系依存)。
0と比較するなら構わないけど。

個人的には、普通に(無理に)ifや?:を使うより、
(a < 0) != (b < 0)
の方がよっぽど見やすいと思う。
0643デフォルトの名無しさんNGNG
>>642
コメントは書いておいた方がいいと思う。
あと、関数じゃなくてマクロにするといいかも。
0644デフォルトの名無しさんNGNG
(a^b)<0は間違い?
0645デフォルトの名無しさんNGNG
Cのビットシフトってsignedの値にやった場合は算術シフトに、unsignedの値にやった場合は論理シフトになるんでしたっけ?
0646デフォルトの名無しさんNGNG
>>644
gcc -O2 -S でコンパイルしてみたが一緒。そっちの方が分かりやすくて良いかも

>>645
同じくコンパイルしてみたが一緒だった
0647デフォルトの名無しさんNGNG
>>644
素直なコンパイラだと分岐命令に展開される

>>645
signedだろうがunsignedだろうが、実装依存
0648646NGNG
>>645
悪い。違った。
signedだと sarl (算術シフト)
unsignedだと shrl (論理シフト)
でした
0649645NGNG
>>646-647
情報ありがとう。
実装依存か。じゃあCから算術、論理を選択してビットシフトする(標準的な)方法はないんだ。
0650デフォルトの名無しさんNGNG
てゆーか、まあ、最初から負数が2の補数表現であることに依存してるわけで。


面白かったけど。
0651デフォルトの名無しさんNGNG
>>650
(a < 0) != (b < 0) のどこが依存しているの?
0652デフォルトの名無しさんNGNG
>>651
なにが?
0653デフォルトの名無しさんNGNG
2の歩数だろ
0654デフォルトの名無しさんNGNG
>>645
unsignedおよびsignedで正であるときにのみ
a<<b⇔a*2^b
a>>b⇔a/2^b
であることが決まっている。(ただしbはaのビットサイズ未満かつ0以上)
その他は未定義や実装依存
0655デフォルトの名無しさんNGNG
便乗質問ですが、
整数をqsort()でソーティングするときに渡す比較関数は、
みなさんはどのように実装してます?
とりあえず、
int compar(int *a, int *b) {
return *a-*b;
}
は良くないということなので、私はif分岐でしてるんですが、
何か良い方法ありますか?
0656デフォルトの名無しさんNGNG
良くないことはないとおもうが
0657608NGNG
md5に悩んでいた608です。問題の箇所は"MD5_Init"のアンダーバー入れ忘れでした。
アンダーバーを書いて(↓)でうまくいきました。
カラアゲうまうまさん、名無しさんありがとうございました!

$gcc -o md5 main.c md5_crypt.o -lcrypto

0658655NGNG
>>656
オーバフローするので大きい数字扱えません
0659デフォルトの名無しさんNGNG
無名共用体って合法かつポータブルですか?
0660デフォルトの名無しさんNGNG
Cでは非合法
0661デフォルトの名無しさんNGNG
>>659
てか、使い道あるのですか?
0662デフォルトの名無しさんNGNG
>655
オーバーフローの可能性があるなら
return -(*a < *b) + (*b > *a);
にでもしといたら
0663659NGNG
やはりCではサポートされていないんですね。

>>661
struct{
 union{
  struct{
   ...
  } C;
  
  struct{
   ...
  } D;
 } B;
} A;
のような構造体を定義した場合、
A.B.C, A.B.Dというように毎回Bを指定するのは冗長です。
無名共用体使ってA.C, A.Dと書けば多少すっきりするので
たまに使います。
0664デフォルトの名無しさんNGNG
age
0665デフォルトの名無しさんNGNG
>659
union {
 struct{... } C;
 struct{... } D;
} A;
じゃだめなのかな?
0666デフォルトの名無しさんNGNG
>>663
grep 'define.*addr.*\.' /usr/include/netinet/*
0667デフォルトの名無しさんNGNG
C て、変数を漢字で記述できるのですか

0668デフォルトの名無しさんNGNG
>>667
多分、できないと思われ
0669デフォルトの名無しさんNGNG
お、これは、できるツールツクッチャエ ビジネスチャンス
既にあったりして
0670デフォルトの名無しさんNGNG
どう?
http://isweb44.infoseek.co.jp/computer/muiztani/efforts/ident/ident05.html
0671デフォルトの名無しさんNGNG
いい、m(._.)m
0672デフォルトの名無しさんNGNG
>>667
英字と数字と_のみ。先頭は数字であってはならない。
0673デフォルトの名無しさんNGNG
>>670
デバッグできねーじゃん。
0674デフォルトの名無しさんNGNG
>>670 すげぇ・・・やってのけているな
0675デフォルトの名無しさんNGNG
VBでは(Javaも?)変数名に2バイト文字を使えるけど、使う人はいないよね。
0676デフォルトの名無しさんNGNG
>>673
ご、ごめんなさい
0677デフォルトの名無しさんNGNG
>>676==作者
0678676NGNG
デバッグ用に識別子を戻すフィルタを急いでつくったので、よかったら
お試しください。失礼いたしました。
0679 NGNG
>>678
つーか、デバッガが使えないだろ。
0680ukNGNG
sprintf(str,"<html>\n<head>\n<title>うんこですがイ可か</title>\n</head>\n
<body>\n<h1>うんこ画像</h1>\n<br>\n<img src="http://www.unko.com/img/unko.jpg">\n</body>\n
</html>") ;

当方VC++6.0
こんな感じでstrにhtml記述をぶち込みたいのですが、やり方が激しく分かりませんです
まず <img src="unko.jpg"> のダブルクォートでsprintf(str,"…"unko.jpg"…")
となってしまうのは問題なのでしょうか
さらに http://www.unko.com/… の//以降がコメント扱いされるくさいので、
\\\ に変えてみたところ、「不要な箇所に、エスケ-プシ-ケンスが付いています。」とVCに吐き捨てられますた。
どなたか解説おながいします(;´Д`)
0681デフォルトの名無しさんNGNG
<img src=\"unko.jpg\"> みたいにしてみそ。
そうすれば // があっても無問題。

src=" の部分で文字列が終わってしまうのね。
で、// で C++ 式のコメントが始まってしまうというわけ。
0682ukNGNG
>681さん
即レスあがとうございます
ものごっつ普通に実行出来ますた(;´∀`)
心の底からありがとうございます
0683名無しさん@カラアゲうまうまNGNG
>>676
どっちかというと、これが気になる。

> まあ、水谷カスタムとはいっても、flex win32用実行バイナリ内の
> 文字列リテラル( 多分 .simpleファイルか何かに相当 ) を
> 直接 ほんの十数バイト書き換えただけなので、簡単な
> わずかの修正で対応できると思います。
0684名無しNGNG
質問です。
メモリ関数と構造体を使用して、簡易データベースを作りたいのですが
構造体にメモリを割り当てるにはどうすればいいんですか?

構造体宣言を
struct main_deta{
int deta_id;//データID
char deta_name;//データネーム
int deta_value;//データヴァリュー(数値)

}*p;//確保したメモリのアドレス。データの格納先

このように書いて

p = calloc(w, sizeof(struct main_deta));
printf("データIDを入力してください。   :");
scanf("%d",&p[i].deta_id);
printf("データネームを入力してください。  :");
scanf("%s",&p[i].deta_name);
printf("データヴァリューを入力してください。:");
scanf("%d",&p[i].deta_value);

この形で入力して表示させようとすると
「"0x0040832c"の命令が"0x00000031"のメモリを参照しました。
メモリが"rezd"になることはできませんでした」と、でてきます。

このエラーは何なんですか?

よろしくお願いします。
0685デフォルトの名無しさんNGNG
とりあえず、%sをcharで受けるのは無謀
0686デフォルトの名無しさんNGNG
どうでもいいが、data?
0687677NGNG
>>678
ワラタ 本当に作者だったのか。
0688デフォルトの名無しさんNGNG
>>684
char data_nameはchar data_name[n]の間違いか?
0689名無し684NGNG
>>684
%cで受けると入力ができないのですが
>>688
そうでした。間違えてました。
0690デフォルトの名無しさんNGNG
>>689
%sが間違っている意味ではない。
deta_nameに&をつけているし、charに名前を入れる気なんだろうなぁ
と思って。
0691first timeNGNG
初めての仕事で、Warning 除去を行っているのですが、なかなか時間がかかってしまいます。勉強にはなるのですが・・。
0692デフォルトの名無しさんNGNG
>>691
独り言はhttp://cocoa.2ch.net/qa/でどうぞ。
0693デフォルトの名無しさんNGNG
>>690
そうでしたか。
0694デフォルトの名無しさんNGNG
>>693が>>684という前提で聞くけど、解決したんすか?
0695timerNGNG
PC-9821Xa10 TCC4
でタイマー(割り込み)を500ms以下にしたいんですができますか?
500msはできました。
0696デフォルトの名無しさんNGNG
構造体の名前が長くて書くのめんどくさいときに
defineみたいなやつありませんでしたか?
0697695 timerNGNG
>>695
自己レス。できますた。
timerの仕組みをもう少し勉強しなきゃ。
0698名無しさん@カラアゲうまうまNGNG
>>696
#define s struct long_long_long_name_struct
typedef struct long_long_long_name_struct s;
0699デフォルトの名無しさんNGNG
>>696
コピペ汁。
0700デフォルトの名無しさんNGNG
Xa・・・懐かしい響きだ。
0701デフォルトの名無しさんNGNG
>>696
初心者板で答えただろ・・・
0702真性包茎NGNG
dosのプログラミングにも飽きたので、
そろそろwindowsアプリにも挑戦しようかなって思ったんだけど
コンパイルがうまくいきません
ソースが間違ってるのかな?…↓
#include <windows.h>

int WINAPI WinMain(HINSTANCE Inst, HINSTANCE Prev,
LPSTR Cmd, int Show)
{
int hoge;
hoge = MessageBox(NULL,
(LPCSTR)"逝ってよし?",
(LPCSTR)"2ch",
MB_YESNO);
if(hoge = IDYES){
system("rundll user.exe,exitwindows");
}
return 0;
}
誰かうまく逝った方教えてください
0703デフォルトの名無しさんNGNG
>702
なにがしたい?
0704真性包茎NGNG
>>703
できた〜?
0705デフォルトの名無しさんNGNG
>>702
実行しちまったがな

GUIプログラムとしてコンパイルしないと
(WinMainを呼ぶライブラリをリンクしないと)
だめだよ。それから
#include <stdlib.h>
とif(hoge = IDYES)は
==の間違い
0706真性包茎NGNG
レスありが�d
でも僕包茎なので
リンクって何か分かりません
どうやってやるんですか?
module2つ以上作ったことありません
0707デフォルトの名無しさんNGNG
コンパイラが何か知らんが
例えばborland c++ならば
bcc32 -tW hoge.c
とか
0708真性包茎NGNG
>>707
コンパイルできたんだきど
パソコン止まります。
0709デフォルトの名無しさんNGNG
その名前を変えてくれ。
なんか見ていていやだ。

#俺が、って突っ込みはなしの方向で(ちがうけどw
0710684NGNG
>>694
遅レスすいません。
何とか解決しました。
0711仮性包茎NGNG
変えてみましたン
>>708の答え教えてほしいです。
0712デフォルトの名無しさんNGNG
なんでおとなしくメッセージループを作らないの?
0713仮性包茎NGNG
>>712
意味がわかんないです。
教えてください♥
0714デフォルトの名無しさんNGNG
聞くとしたらここかなぁ?
http://pc3.2ch.net/test/read.cgi/tech/1023361418/l50
0715仮性包茎NGNG
レベルが高すぎてついていけませんでした。

ヽ(`Д´)ノ ウワァァァン
0716デフォルトの名無しさんNGNG
じゃあ、ここは?
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index_sdk.html

0717仮性包茎NGNG
>>716
returnの前に付け足すってことですか?
0718デフォルトの名無しさんNGNG
DOSは基本的に入力を受け付けるプログラムは同時にひとつしか
動いていなかったけど、windowsでは複数動作することがあるので、
メッセージドリブンというか、メッセージと呼ばれる要求をいったん
蓄えておいてそれを取り出して処理を行わなくてはならない。
最後のreturnの前のwhileやGetMessageは、そのメッセージをとりだして
Dispatchで処理するルーチンに送る。
0719仮性包茎NGNG
>>718
ありがとう
http://vitaltrack.hoops.ne.jp/midi/dqlvup.mid
702は皮が1mmむけた
0720デフォルトの名無しさんNGNG
>>702
こんな感じ?
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR s,int nShow)
{
int rc = MessageBox(NULL,
TEXT("逝ってよし?"),TEXT("(* ゚Д゚)"),MB_ICONQUESTION | MB_YESNO);

if(rc==IDYES){
 // 以下 NT,2000の処理
 TOKEN_PRIVILEGES tp;
 HANDLE hToken;
 // アクセストークンを開き、遮断特権のLUIDを得る
 if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)
 && LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tp.Privileges[0].Luid)){
  // 遮断特権を使用可能にする
  tp.PrivilegeCount=1;
  tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
 }
 // ここまで NT,2000
 // 遮断 user.exeを使わず、自力で逝く
 if(! ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF,0)){
  MessageBox(NULL,TEXT("逝けませんでした"),NULL,MB_OK);
 }
}
return 0;
}
0721デフォルトの名無しさんNGNG
質問です。
gcc で作ったオブジェクトファイルと、
g++で作ったオブジェクトファイルはリンクできませんか?
よろしくお願いいたします。
たとえば、
gcc -c aaa.c
g++ bbb.cpp aaa.o
とかできませんか?
0722デフォルトの名無しさんNGNG
>>721
やってみたらいいじゃん。
0723デフォルトの名無しさんNGNG
やったことないから知らんが、できるんじゃないかな?
ていうか、やってみたらいい
0724721NGNG
なじぇか、シパーイします。
aaa.oを見てくれません・・・
0725デフォルトの名無しさんNGNG
g++のかわりにgcc -lstdc++は?
0726721NGNG
>>725
ありがとうございます。
なるほどー
やってみますね。
gcc でちょっとしたwarningで済んだものが
g++では厳しくなってますから・・
Cで書いた関数をC++で使いたいってときは、
いい方法があるのでしょうか・・・
0727デフォルトの名無しさんNGNG
>>724
エラーメッセージ等を張りたまい。
0728 NGNG
>>726
extern "C"
0729721NGNG
>>727、728
おぉ、ありがとうございます。
extern "C" 調べたら載ってましたー。
調査が足りませんでした・・・
0730デフォルトの名無しさんNGNG
ある時刻(例:2000年05月10日14時02分45秒を入力)から
ある時刻(例:2001年10月03日06時10分10秒を入力)までの
経過時間を、○年○月○日○時○分○秒の形式で出力する
プログラムを作りたいんですけど、どうしたらいいでしょうか?
お願いします。
0731デフォルトの名無しさんNGNG
作ればいいんじゃない?
0732デフォルトの名無しさんNGNG
>>730
mktimeで秒にしてから差を取ってlocaltimeで・・・・・
という方法ではうまくゆかないな(鬱
0733730NGNG
関数やアルゴリズムについて教えて下さい。
0734デフォルトの名無しさんNGNG
>>730
なんでsage?
0735730NGNG
>>732
助言ありがとうございます。
その方法でやってみます。
0736デフォルトの名無しさんNGNG
>>735
だめだってば。
0737730NGNG
>>736
ではどうしたらいいでしょうか?
0738デフォルトの名無しさんNGNG
>>737
さぁ・・・
意地悪じゃないよ。
0739デフォルトの名無しさんNGNG
Cでファイルを開く時、fopenを使いますよね?
使い方がよく解らないのですが…教えていただけませんか?
0740デフォルトの名無しさんNGNG
>>739
ヘルプ見ろ
0741デフォルトの名無しさんNGNG
>>730
ふつーに差を60で割って、60で割って、・・・とやればいいのでは?
0742デフォルトの名無しさんNGNG
>>739
それぐらい本を買って来い。>>1のK&R買っとけ。
0743730NGNG
では入出力を○時○分○秒形式で、どなたか作れませんか?
0744デフォルトの名無しさんNGNG
>>743
いくら出す?
0745デフォルトの名無しさんNGNG
>>742
うるう年とか2月は28日までとかをいれると面倒だな。
mktimeの値の差分に2000年1月1日のmktimeの値を
足して、localtimeに放り込めばできるだろ。
年からのみ2000を引いておけ。
0746デフォルトの名無しさんNGNG
>>739
標準関数は
http://www.linux.or.jp/JM/
のセクション3より検索。
0747739NGNG
>740
ヘルプ…持ってないです。
BCCを使ってるので…以下無いとダメですか?
0748747NGNG
>746
ありがとうございます!
こんなページがあったんですね。
0749デフォルトの名無しさんNGNG
つか、出力の○年○ヶ月方式やったら、
一ヶ月30日方式で計算するんと違うん?
0750デフォルトの名無しさんNGNG
>>749
うむ、そう思った。
時刻の差のうるう年とか大の月小の月っていったい何なんだよと不思議な気分(w
0751デフォルトの名無しさんNGNG
30日だと30*12=360、で5日足りないのは(゚Д゚)マズーくないか?
0752デフォルトの名無しさんNGNG
Cに環境変数は無いのか?
自分(EXE)の場所とかの。
0753デフォルトの名無しさんNGNG
無い
0754デフォルトの名無しさんNGNG
>751
12ヶ月->1年に繰り上がらないならいいのでわ?
1年は365.24日で、31556736秒として、そのあまりを
30で割って、ヶ月にする。そのあまりを、、、と続ければ。

>752
そういうのは環境変数っていうのか?
0755デフォルトの名無しさんNGNG
1/1と2/1と3/1は一ヶ月ずつ違うが
日単位でいえば等間隔ではない
このあたりを定義してくれ
と皆は言っている
0756名無しさん@カラアゲうまうまNGNG
2001-2000で1年
2001/09/10-2001/05/10で4ヶ月
2001/10/02-2001/09/10で22日
翌06:10:10-14:02:45で16時間7分25秒
ってことじゃないか?
0757デフォルトの名無しさんNGNG
「地球衝突まで後1235日!」
とかいう記述はあるけど
「地球衝突まで後3年4ヶ月と20日!」
とかいうのはあまり聞かないな、実際・・・。

>>754
それやると、1日が23時間58秒、とかにならない?
実のところ正しいやり方はないのでわ?
0758デフォルトの名無しさんNGNG
じゃ、
2002/2/28 〜 2005/1/1 までは?
0759デフォルトの名無しさんNGNG
ちと教えて。

extern int hogehoge( void );


extern int hogehoge( void )
{
  return( 0 );
}

ってコードって、どう解釈されるの?
externで外部参照宣言しておいて、自分の中にexternで関数を書くのって
C言語的には普通に問題なく解釈されるものなの?

もう会社から消えた先輩のソースを見て、疑問でまくりの1つです。
0760デフォルトの名無しさんNGNG
>>759
大馬鹿者のコード。かもしくはソースファイルがひとつだけのプログラム。
0761デフォルトの名無しさんNGNG
>>752
自分自身のファイル名やコンパイルした日時を表す定義済みマクロならあるけど。
0762デフォルトの名無しさんNGNG
文字列入力について教えてください。

void main()
{
char c;

/*c=getchar();*/  ←これを入れると
ms();
}

void ms()
{
char ss[10];

gets(ss);       ←文字列入力が出来ません。
printf(ss);
printf("なんで出来ないんだよ〜"); ←これは表示されます。
}

この場合、どうすれば文字列入力飛ばされずにすむでしょうか?
0763デフォルトの名無しさんNGNG
>>762
getcharで一文字取り出したあとに改行コードがバッファに残るから、getsでそれを呼んでしまい、getsで入力待ちにならない。





getsなんて使うな。printf(ss)はやめろ。printf("%s",ss)にしろ。
0764763NGNG
getcharのところでEnterキーだけ入力してみな。
0765759NGNG
>>760-761
どうも。
あるドライバの複数のソースファイルの1つです。
ドライバなので、おそらくドライバ起動時に外部から呼び出されているはずなんですが・・・
以前作られたドライバを組み込もうとしたら起動しないので、原因調べてくれっていわれて
既に存在しない先輩のソースを見てたんですけど、今までこんな記述見たことないので
おかしいな、と思ったんですよ。

結果として、ライブラリの関数でこういう記述をしておいて、外部からちゃんと呼び出せるんでしょうかね?
0766デフォルトの名無しさんNGNG
winでbccでWinAPIの勉強をしようと、
「猫でも」の「SDK1」を見に行ってコンパイルしてみているのですが、
うまくいきません。

何かbcc32にひきすうを渡さないとだめですか?

もうひとつ。
bcc32ではC++はコンパイルできませんか?
0767デフォルトの名無しさんNGNG
×getsでそれを呼んでしまい
○getsがそれを読んでしまい
0768デフォルトの名無しさんNGNG
>>766
bcc32は元々C++用コンパイラ。
それとここではスレ違い。
0769デフォルトの名無しさんNGNG
>>768
非道いな。
0770デフォルトの名無しさんNGNG
>>765
あ、>>759は間違いじゃないぞ。
ただ、こういうものはヘッダーファイルに書いてインクルードする。
0771デフォルトの名無しさんNGNG
だいたい、「うまくいきません」と書いてあるだけで
何故うまくいかないのかわかったら超能力者だ。
どんなエラーになるかぐらいかけや。
0772デフォルトの名無しさんNGNG
次スレは圭子たんでよろしこ
0773デフォルトの名無しさんNGNG
関数はデフォルトでexternだってつい最近見たような
逆に、関数内でローカルに宣言することもできるけどね
int main()
{
 char buff[100];
 int strcpy(char *p, const char *dst);
 int a = strcpy(buff, "abc");
}
とかの矛盾した宣言でも
0774759NGNG
ん。
そのhogehogeという関数が呼び出せないか呼び出し時にエラーが起きる、という話でした。
ドライバ起動時の初期化関数なんすよね。

>>770
そうなの? ありがとー。
でも、思いっきりソースファイルに書いている。
そのソース(init.c)内の関数は、このexternか

static int ahya(void);

static int ahya(void)
{
 /*処理*/
  return( -1 ) ;
}

みたいなのばっかり。
0775デフォルトの名無しさんNGNG
>>773
K&Rのサンプルに局所的なプロトタイプ宣言があったよ。
思った通りその関数の中でしか通用しないね。
0776デフォルトの名無しさんNGNG
>>774
staticならプロトタイプはヘッダーファイルに書いてはならないけど、
他のファイルから参照するexternな関数ならプロトタイプはヘッダーファイルに書くべき。
いちいち書いても間違いじゃないけどね。
それと、変数宣言時につけるexternとはちょっと意味が違うよ。
0777776NGNG
変数宣言時じゃねーよ。外部参照を宣言するときだよ(鬱
0778デフォルトの名無しさんNGNG
>>768
後半部分は特にすれ違いだった。スマソ。

で、前半部分は、Cで書いたのでそれをやろうとしているのですが、
すれ違い?
0779デフォルトの名無しさんNGNG
>>778
特定のコンパイラの使い方についての質問は一応スレ違いということになっているみたいだけど、いいんじゃネーノ?
俺は分からないけど。。。。
0780デフォルトの名無しさんNGNG
>>778
エラーメッセージを貼った方がいいよ。

リンクエラーな気がする。
0781デフォルトの名無しさんNGNG
>>779
奴の言いぐさはそれはC++のコンパイラだから駄目って話では?
0782759=774NGNG
>>776
externの書き方はわかってるつもりです。
気にしてんのは、extern切ってる関数が自分自身にあり、
その宣言部分にexternが付いていることなんですが・・・

 ・外部参照宣言している関数が自分自身にあり、他のソースにはない
 ・extern int hoge(void) という書式から始まる関数の宣言は可能なのか

ということでした。
>>773さんの言うとおりなら、可能ではあるようですが、なんか普通と違うような。。
0783デフォルトの名無しさんNGNG
おい!おまいら教えやがれ。
gethostname()を使わないでIP取得するにはどーすれば良いんだ。

てゆーか、教えてください。
スレ違いならスマソ。
0784デフォルトの名無しさんNGNG
自分自身?
0785デフォルトの名無しさんNGNG
>>782

関数の場合はいいんだってば。
ちなみにデフォルトでexternだから、int hoge(void)とextern hoge(void)は同じだよ。
0786デフォルトの名無しさんNGNG
>>781
やつって>>768のこと?
>>766から読み直したら?
0787デフォルトの名無しさんNGNG
>>783
DNSにでも聞け。
0788デフォルトの名無しさんNGNG
>783
OS依存になると思うのだが。
0789デフォルトの名無しさんNGNG
>>787
すごい言いぐさだが的を射ている。
0790デフォルトの名無しさんNGNG
>>787
(・∀・)オトコラシイ!
0791788NGNG
gethostname() を
gethost*by*name() と
混同しているのでわ……
0792名無し783NGNG
>>787
そのとーりデス。スマソ

>>788
OS依存??
gethostname()が使えない環境なので・・・
VC++暦2週間なので、もう少し簡単におながいします。
0793デフォルトの名無しさんNGNG
gethostnameってUNIXのシステムコールじゃん・・・
0794759=774NGNG
>>785
サンクス!
これで落ち着いて残業できます(T-・ノ

でもその先輩、やるならやるで徹底しろよ・・
ソースによってコーディングルールむちゃくちゃだ。
0795788NGNG
>792
gethostname()はWinsockに有りますが何か。

>The gethostname function retrieves
>the standard host name for the local computer.
0796783NGNG
>>795
えーと説明不足でした。

win98以降では、gethostname()で自機のIPを取得できるのですが、
win95でgethostname()を使うと、”プログラム開始エラー”で起動出来ないのです。

ので、gethostname以外で、取得方法がないモノかと・・・
0797デフォルトの名無しさんNGNG
>>796
それって単にWINSOCK.DLLが入っていないだけでは?
0798デフォルトの名無しさんNGNG
あちきの手元のヘルプ(bcb4付属の古い奴)だとgethostname()は
WindowsNT Yes
Win95    Yes
Win32s   Yes
Import Library  ws2_32.lib
となってるんで、多分Winsock2が入ってないんだね
解決法は知らん
0799デフォルトの名無しさんNGNG
ネットワークのスレで聞くよろし
0800783NGNG
>>797
いえ、バージョン違いで・・・。

>>798
依頼者が、「winsock2をUpしたくない。」と。

>>799
逝って来ます。

みなさま、ありがとうございました。
ネットワークに逝って来ます。
0801デフォルトの名無しさんNGNG
strtokじゃ物足りなくなってきたので
これを改良したものを作りたいのですが、
strtokのソースってどこにあるんでしょうか
0802デフォルトの名無しさんNGNG
何をする関数かわかっているなら、自力で作って、そこから改良するべし
0803デフォルトの名無しさんNGNG
http://www.google.com/search?q=strtok.c
0804デフォルトの名無しさんNGNG
>>801
って言うかスタティック変数使う関数なんぞ使うなよ・・・。
0805801NGNG
>>802
>>803
ありがとうございます。頑張ってみます。
>>804
それに不満があるから自作しようとしているのですが…。
(他にもありますが)
0806デフォルトの名無しさんNGNG
>>801
strtokよりもperlのsplitを流用した方良いかも。
0807デフォルトの名無しさんNGNG
ちょっと質問。

C で文字列の値渡しってできるの?

int
testfunc(char args[2][10]){
return 0;
}

int
main(){
char s[2][10] = {"string1", "string2"};
int retval;

retval = testfunc(ここがわからない);
return 0;
}

ここでsをtestfuncに値渡しすることは可能?
「するな」とか言わないで。
0808デフォルトの名無しさんNGNG
sを構造体にしてしまうのがはやいとおもう。
0809デフォルトの名無しさんNGNG
>>807
するな云々の前に、できない。
0810デフォルトの名無しさんNGNG
>>807
> C で文字列の値渡しってできるの?
Cでは配列の値渡しを行うことはできません。
よって、文字配列である文字列の値渡しは不可能です。

ただし、構造体の値渡しは可能なので
文字配列だけをメンバにもつ構造体を定義し、
それを値渡しすることは可能です。
0811807NGNG
>>808
いや構造体にすればOKなのはわかるんだけど
ふと疑問に思ったから。
>>809
やっぱり不可能?
0812デフォルトの名無しさんNGNG
こんな感じね

typedef struct {
char s[2][10];
} Test;

int testfunc( Test a ) {
return 0;
}

int main() {
Test a;
strcpy( a.s[0], "string1" );
strcpy( a.s[1], "string2" );
testfunc( a );
}
0813デフォルトの名無しさんNGNG
お(=^o^=) や(=^O^=) す(=^。^=) みぃ(=^-^)/~~
0814デフォルトの名無しさんNGNG
はやっ
0815807NGNG
>>812
普通に書くときはそうやるんだけど
試しにtestfunc(char args[2][10])を書いて
コンパイルしたら通ったから
呼び出す方法があるのかな?と思ったの。
0816デフォルトの名無しさんNGNG
す な お に ポインタで受け止めろ。
0817デフォルトの名無しさんNGNG
>>815
それはchar (*args)[10]と同じ。
0818デフォルトの名無しさんNGNG
す な お に Pascalに移行しろ。
0819デフォルトの名無しさんNGNG
す な お に Perlに移行しろ。
0820デフォルトの名無しさんNGNG
す な お に VBに移行しろ。
0821デフォルトの名無しさんNGNG
こうして並べてみるとそういうことができる言語にはろくなのがないね。
0822デフォルトの名無しさんNGNG
>>821
じゃあほとんどの言語はろくなもんじゃなくなるじゃん。
0823デフォルトの名無しさんNGNG
>>822
ああそうだ。
C以外は糞だ。アヒャヒャヒャヒャヒャヒャ
0824デフォルトの名無しさんNGNG
す な お に Rubyに移行しろ。
0825823NGNG
>>824
唯一まともな言語があったか・・・
0826デフォルトの名無しさんNGNG
>>823
Cプログラマってみんなこんなやつ?キモッ
0827807NGNG
なんか煽られてる?(w

>>816
sをポインタで渡したいときはどうするの?

なんか俺 どんどん厨な質問になっていくなぁ。
0828823NGNG
>>825
騙るな。ボケェ。アキャキャキャキャ
0829デフォルトの名無しさんNGNG
>>827
>>817
0830デフォルトの名無しさんNGNG
char [10]を要素にもつ配列へのポインタ。
0831デフォルトの名無しさんNGNG
もしコンパイラをつくったとして、それに付けるライブラリを作成するとき、qsortを再帰を使って書くのはまずい?
0832807NGNG
もう混乱してよーわからん。

char s[2][10] = {"string1", "string2"};
retval = testfunc(s);

を受けるようなtestfunc()ってどう定義するん?
0833デフォルトの名無しさんNGNG
>>800
gethostnameはws2_32.dllにもwsock32.dllにもあるみたいだから
wsock32.dllのgethostnameを呼べばwin95でも動くかも(もちろん未確認)
0834デフォルトの名無しさんNGNG
>>832
void testfunc(char (*_807)[10])だっていってんだろうが。
0835デフォルトの名無しさんNGNG
>>832
testfunc(char (*p)[10])
testfunc(char s[][10])
testfunc(char s[2][10]) /* 2はコンパイラに無視される */
どれでも可です
0836デフォルトの名無しさんNGNG
>>832
>>830で分かるでしょ?
0837デフォルトの名無しさんNGNG
char s[2][10] = {"string1", "string2"};
の時、sの「型」が何なのか、よく考えればわかると思うけど。
0838807NGNG
試しに書いてコンパイルしてきた。
int
testfunc(char (*args)[10]){
printf("%s:%s",*args, *(args + 1));
return 0;
}
してみたらちゃんと表示されてた。

なんか頭の中だと(*args)が10個並んでるイメージだったから。
元のイメージではchar [10]が2個並んでるイメージで。

すまんな。
0839デフォルトの名無しさんNGNG
>>807
int testfunc(char **p)
0840デフォルトの名無しさんNGNG
いいから、ここ読んどけ。
http://www.catnet.ne.jp/kouno/c_faq/c6.html
>>1からリンクされてるだろ。
0841デフォルトの名無しさんNGNG
>>839
>>840
0842762NGNG
>>763 さん
ありがとうございます。
>>getcharで一文字取り出したあとに改行コードがバッファに残るから、
>>getsでそれを呼んでしまい、getsで入力待ちにならない。

c=getchar();
printf("%c",c);

gets(ss); ←ボツ
printf("%s",ss);

両方使いたいんですけど残った改行コードをクリアする方法を
どうかみなさん教えてください。m(_;)m

0843デフォルトの名無しさんNGNG
>>838
> なんか頭の中だと(*args)が10個並んでるイメージだったから。

それはchar *args[10]
0844デフォルトの名無しさんNGNG
>>842
int c;
while((c=getchar())!='\n')
;
0845デフォルトの名無しさんNGNG
>>842
c=getchar();
printf("%c",c);

gets(ss);
gets(ss);
printf("%s",ss);
0846デフォルトの名無しさんNGNG
念のため
int c;
while((c=getchar())!='\n'&&c!=EOF)
;

の方がいいか。
0847762NGNG
>>845 さん

わーい。
ありがとうございました。
おかげで文字列入力出来るようになりました。

0848844NGNG
俺は無視か(鬱
0849845NGNG
>>848
おれのほうは一行コピペするだけで簡単だからな。
気にすんな、ブラザー。
0850デフォルトの名無しさんNGNG
C言語の関数って、printfやscanfやせいぜいfopenくらいしか知らん。
関数を自作しまくり。
関数のリファレンスって、何かいいやつないかな。
0851デフォルトの名無しさんNGNG
>850
man
0852デフォルトの名無しさんNGNG
>851
manて何だよ。man womanかよ。
0853デフォルトの名無しさんNGNG
man printf
って入力してみろ
0854デフォルトの名無しさんNGNG
>>853
相手がUNIX使いとは限らないぞ。
http://www.linux.or.jp/JM/
0855デフォルトの名無しさんNGNG
>853
man 3 printf
0856デフォルトの名無しさんNGNG
>>855
だな。セクション1にもprintfがある。
0857デフォルトの名無しさんNGNG
fopenしてfcloseしない人ハケーン
0858デフォルトの名無しさんNGNG
>>850
www.holomorphy.com/~wli/doc/ANSI+ISO+IEC+9899-1999.pdf
0859デフォルトの名無しさんNGNG
http://www.holomorphy.com/~wli/doc/ANSI+ISO+IEC+9899-1999.pdf
0860デフォルトの名無しさんNGNG
多謝(ワラ
0861デフォルトの名無しさんNGNG
ねーねー。みんななんて読んでる?
for フォー
strcpy エスティーアールコピー
malloc エムアーロック
hoge ほげ
0862デフォルトの名無しさんNGNG
>861
無駄な一行レスが続くのでこちらへどうぞ
http://pc3.2ch.net/test/read.cgi/tech/1014987555/
http://pc3.2ch.net/test/read.cgi/tech/1005578173/
0863デフォルトの名無しさんNGNG
時刻Aと時刻Bの差の時間を、時・分・秒にするプログラムを教えてください。
0864デフォルトの名無しさんNGNG
>>730に戻り無限ループ
0865ここは素敵なインターネットNGNG
みんなこれ理解できるかい?

#include <stdio.h>

char* hello(void)
{
return "hello";
}

char* (*f1)(void) = **hello;
char* (*f2)(void) = *hello;
char* (*f3)(void) = hello;
char* (*f4)(void) = &hello;

/*
char* (*f5)(void) = &&hello; これはエラー
*/

int main(void)
{
printf("%s\n", f1());
printf("%s\n", f2());
printf("%s\n", f3());
printf("%s\n", f4());
return 0;
}
0866デフォルトの名無しさんNGNG
f1 と f2 はエラーにならないの?
環境は?
0867デフォルトの名無しさんNGNG
>>865
2つ疑問がある。
stdio.hをincludeしているのはなぜか?
helloの戻り値の型と、実際の戻り値で型が違うのはなぜか?
0868ここは素敵なインターネットNGNG
>>866
エラーにならないのだよ。どの環境でも。

>>867
>stdio.hをincludeしているのはなぜか?
printfを使うために必要ね。常識。

>helloの戻り値の型と、実際の戻り値で型が違うのはなぜか?
うーむ。もっと勉強しなさい。
0869デフォルトの名無しさんNGNG
>>866
&hello==hello (Cの関数ラベルに対する仕様)
hello==*&hello (当然)
よって
hello==*(&hello)==*hello
*hello==*(hello)==*(*hello)==**hello
同様にして
&hello==hello==*hello==**hello==***hello==****hello==(以下略
0870デフォルトの名無しさんNGNG
何故同じようにして
hello==&hello==&(&hello)とはならないの?
0871デフォルトの名無しさんNGNG
&helloにおけるhelloと(&の付かない)helloは評価が違う。
(前者はLバリューで後者はRバリュー)
だから&helloのhelloについてhelloから&helloへの置き換えは出来ない。
0872デフォルトの名無しさんNGNG
>>869
だから void (*pf)(void);
なんて関数へのポインタがあった時、
pf();でも(*pf)();でも(**pf)();でも(**********************pf)();でも
同じ関数を呼べちゃうんだよね(w
エキスパートCだっけか、あの本に出てて笑っちゃったよ。
0873866NGNG
そうだったのか……勉強になりますた。
0874名無しさん@カラアゲうまうまNGNG
>>872
でないと古い形式で書かれたソースが通らない。
0875msNGNG
昨日も書いたのですが、
C言語のプログラムのWARNING除去を行っております。
環境はGNUです。
ほとんどが、コメントアウトなのですが、
他のWARNINGの対処法がいまいち読み取れません。
参考になるサイト、本などはございますでしょうか?
0876デフォルトの名無しさんNGNG
コメントアウトして除去したら、
機能を果たさなくなるんじゃない?
0877デフォルトの名無しさんNGNG
ワーニングメッセージを書いてください
0878デフォルトの名無しさんNGNG
テキストファイルを開いてその内容を表示させるサンプル書いて下さい。
0879msNGNG
ワーニングメッセージは、
"suggest parentheses around + or -in operand of &"

*(byPtr1 + 4 + 15) |= ((((BYTE)(U_HANDLE & 0x0f)) << 4) & 0xf0)
0880デフォルトの名無しさんNGNG
>>878

#include <stdio.h>

main(int argc, char** argv)
{
 freopen(argv[1], "r", stdin);
 while ( putchar( getchar() ) != EOF);
}
0881名無しさん@カラアゲうまうまNGNG
>>879
> *(byPtr1 + 4 + 15) |= ((((BYTE)(U_HANDLE & 0x0f)) << 4) & 0xf0)
*(byPtr1 + 4 + 15) |= ((((BYTE)((U_HANDLE) & 0x0f)) << 4) & 0xf0)
これでも消えるとは思うが、
おそらくマクロと思しきU_HANDLEを()で括った方がいいと思われ。
つーか加算式そのまんまマクロにするようなヴォケは逝ってよし。
0882デフォルトの名無しさんNGNG
>875
コメントアウトしてるって何を?
0883msNGNG
ありがとうございます。
もうひとつ!
"array 'name' assumed to have one element"

0884名無しさん@カラアゲうまうまNGNG
ソースの関連する部分出せよ。
0885msNGNG
inttp_keiyu_tbl[];
これなんです。
ところで>881さん
どういうワーニングメッセージなんですか?
直訳とは違うような・・・。

みなさんすみません。
0886デフォルトの名無しさんNGNG
誰か教えてください。
for(i1=0 ; i1<50 ; i1++)
{
printf("<%d>", data[i1]);
}
で、data[0]からdata[49]全体の値(つまり50個の値)とある一つの値とを
比較する方法ってありませんか?
よろしくお願いします。
0887デフォルトの名無しさんNGNG
for (i1=0;i1<50;i1++)
{
 if (data[i1]==比較したい値や変数) {
  break;
 }
}
if (i1==50) {
全部一致;
}
どこかが不一致;
0888881ではないがNGNG
>885
どーゆーって、つまりだな。
600+5&0x0f という式があるとするわな。
これは演算子の優先順位からいって(600+5)&x0f
なんだが、ひょっとすると、優先順位を間違えてて、
ホントは600+(5&0x0f)とやりたかったのかもしれない。
だから、紛らわしい式には()を付けて明らかにしろよ、
ちゅうことなわけよ。
0889デフォルトの名無しさんNGNG
昔は無駄な括弧を付けるなと怒られた物だ…
0890デフォルトの名無しさんNGNG
>>887
ある値を50個の配列リストに入ってるかどうかです。
だから、1つずつ比較するのではなくてってことです。
誤解をまねいて申し訳ありません。
そんな方法ありますかね?
0891デフォルトの名無しさんNGNG
>>887は==じゃなくて!=な。

>>890それは単なる探索の問題じゃないか。
一つずつ比較して、一致があった時点で終了すればいい。
0892msNGNG
lnl.batを押して、
修正したファイルだけをコンパイルかけているのですが、
DOSプロンプトにエラーがいっぱい表示されてしまいます。
1画面ずつ表示したい場合、どのような手順を
とればよろしいのですか?
0893デフォルトの名無しさんNGNG
>>892
リダイレクト
0894デフォルトの名無しさんNGNG
>>889
そりゃお前んとこだけだよ。BASIC って言うなら話はわかるが...。
0895デフォルトの名無しさんNGNG
>>889
お前は小学生か
0896デフォルトの名無しさんNGNG
この条件式を短くできないものか?

if(data[x][y]!=41 && data[x][y]!=42 && data[x][y]!=51 && data[x][y]!=52 && data[x][y]!=6)
0897デフォルトの名無しさんNGNG
>>896
他の変数にdata[x][y]を代入しておいてそれと比較する。
0898デフォルトの名無しさんNGNG
>>894
余計な括弧を付けると、演算子の優先順位をしっかり覚えていない証拠だとか言われて、
括弧を省くように言われていたんだが。10年近く前の話だけどね。
0899デフォルトの名無しさんNGNG
>>898
なんか、もうだめぼな会社/先輩としか思えない。
いずれにしろ、そう言うこと言ってんのはお前んとこだけだから、もうで
てくんなよ。
0900デフォルトの名無しさんNGNG
for( red = 0 ; red <= 255 ; red++ )
{
 printf("#%X0000\n",red) ;
}

redが15以下の時でも%Xが二桁になるような変換文字はないのでせうか
0901デフォルトの名無しさんNGNG
>>900
%02X
0902デフォルトの名無しさんNGNG
>901
どうもです
0903デフォルトの名無しさんNGNG
>>902
おまえはヘルプとかmanとかを見る習慣は無いのか。
0904専門士 ◆.t4dJfuU NGNG
C言語だけで、パチ屋にあるようなスロットゲームって作れますか?
0905ppNGNG
このサイトにはトヨゾウの被害はありませんか
0906デフォルトの名無しさんNGNG
>>905
ttp://pc3.2ch.net/test/read.cgi/mobile/1026956948/l50
ここみれ。
0907デフォルトの名無しさんNGNG
>>903
うるさいボケ。
ちゃんとここのヘルプの奴らを利用してやったじゃないか
役に立ってよかったと自己満足でもしてろ
0908デフォルトの名無しさんNGNG
ヘルプの奴らか。
0909デフォルトの名無しさんNGNG
>>904
できるよ
0910デフォルトの名無しさんNGNG
>>896
if (!strchr(")*34\6", data[x][y]))
0911デフォルトの名無しさんNGNG
>>910
6をエスケープ?
0912911NGNG
8進数は3桁だよな・・・
0913902NGNG
>907
絶対出てくると思った(ワラ
>903
マジレスすると、ヘルプファイル無い&man知らんかったです
とりあえずmanが何かは分かったので気付けます
つーか漏れが持ってる本には%02Xとか載ってなかったんだypヽ(`Д´)ノ
0914デフォルトの名無しさんNGNG
>>913
初心者過ぎる本には載ってないことが多い。
さらにいうなら、formatは

%<<digit>><<l or h>>type

という形を覚えておくといいかモナー。(ほんとはもっと複雑だけど)
0915デフォルトの名無しさんNGNG
>>908
スマソ、ワロタ。
哀愁漂ってる(;´Д`)
0916c初心者NGNG
あのー、質問なんですけど、

以下のファイルがありました。
�@カンマ区切り(CSV形式)のデータが格納されているファイルで、
�Aレコードの区切りに改行コードがなく、全レコードが物理的な1レコードで構成

このようなファイルを、固定長の構造体に格納するには、
どうしたら良いのでしょうか?

以下の2点を考えてみましたが、どちらもイマイチです。
案1)レコードの区切りが無いから、一定サイズずつ読み込んで、
ごりごり構造体に格納して、格納しきれなかった分は、
領域の先頭に持ってきて、その後ろ分のデータをまたreadする。
(これは効率悪そうだし、テストが面倒だし、バグ多そう)

案2)fscanfを使って、カンマ区切ごとに構造体の各要素にreadする。
(これも、1項目の内容に空白があった場合、次の項目としてみなされ
 てしまうので名称等の項目はNG。)

なれないC言語で、しかも開発要因が一人で、期限も厳しいのでどうか
お助けください。
0917デフォルトの名無しさんNGNG
全部読みこむかmapして
memchrなどで区切りを探し
memcpyでコピーする

ただし、ファイル全体が読みこめるアドレス空間があることが確実な場合のみ
0918デフォルトの名無しさんNGNG
要素数が決まっているのならfscanfでいいと思うけど。
0919デフォルトの名無しさんNGNG
1から99の乱数を生成したいんですけどどうやるんでしょう?
0920デフォルトの名無しさんNGNG
rand()*99+1
0921デフォルトの名無しさんNGNG
rand()%99+1
0922デフォルトの名無しさんNGNG
srand(time(NULL));
rand() * 99L / (RAND_MAX+1L) + 1
0923デフォルトの名無しさんNGNG
x = rand_from_1_to_99();
0924881NGNG
>>885
> inttp_keiyu_tbl[];
これはexternもついてないし、関数の引数でもないんだよな?

Cでは空の配列ってものは定義できないから、
「とりあえず要素が一個あるものとみなすよん」
という警告。

>>879の意味は>>888氏の解説してくれた通り。
で、>>881の後半の意味は、たとえば
#define U_HANDLE 1+0
なんてなってたときに U_HANDLE * 100 とかを考えてみれば分かるだろう。

基本的に、マクロ式やマクロの引数は、式のどこに置かれても意味が変わらな
いようにカッコをつけるべき。
0925デフォルトの名無しさんNGNG
(rand() >> 8) % 99 + 1
0926デフォルトの名無しさんNGNG
99面のサイコロをほうり投げる。( -∀-)ノ ◆
0927デフォルトの名無しさんNGNG
◆←6面ダイス
●←99面ダイス
0928デフォルトの名無しさんNGNG
>>927
100面ダイスってまだ売っているのだろうか?

懐かすぃ。
0929デフォルトの名無しさんNGNG
int kaesuyo_ransu(void)
{
 getchar();
 return (time(NULL)%99)+1;
}
0930デフォルトの名無しさんNGNG
static unsigned Ransu;

void initRand(unsigned u){ Ransu = u; }

unsigned uRnd(void){
Ransu = Ransu * 0x343fdL + 0x269ec3L;
Ransu &= 0x7fff;
returnRansu;
}

main(){
int x;
initRand(1 | time(NULL));
x = 1 + 99 * uRnd() / 0x8000;
}
0931デフォルトの名無しさんNGNG
VC++6.0のrandはRAND_MAXが小さすぎ。
0932デフォルトの名無しさんNGNG
>>928 100面ダイスってほとんどジョークグッズだよな
10面ダイス色違いで2ケ振ったほうがよっぽど実用的だと当時から思った。
0933_NGNG
% 演算子ってdoubleには使えないの?
0934デフォルトの名無しさんNGNG
使えない。
0935_NGNG
残念。ってよく考えたら当然か・・・
最下位の桁を得たいときみんなどうしてるのかな?
整数なら%10で簡単に得られるよね。
普段小数使ってなかったから学校の宿題困ってます。
0936デフォルトの名無しさんNGNG
(int)でキャストしる。
0937デフォルトの名無しさんNGNG
>>935
fmod()
0938デフォルトの名無しさんNGNG
>>935

char s[32];
double f;
int result;

f = 123.45
sprintf(s, "%f", f);
result = *(strchr(s, '.') - 1) - '0';






本気にすんなよ(w
0939デフォルトの名無しさんNGNG
void main (void)と
main
はどう違うんですか?
0940_NGNG
>>936
doubleの範囲で値がとれるようにパワーアップせよ、みたいな問題だったので・・

>>937
さすがCライブラリなんでもあるなー。車輪の再発明するところだった。

>>938
あはは。いいですね。全部標準関数だし。

937さんの方法でやってみます。みんなありがとー!
0941_NGNG
>>939
void main(void)とmain()では?
意味はいっしょだと思うけど、なんか古い人は前者の書き方するみたい。
私がCを始めた頃はちょうどvoidって導入されて
void使う方がいい書き方って本で習ったけど・・・
0942デフォルトの名無しさんNGNG
>941
そんなクソい本は投げ捨ててしまえ。
0943デフォルトの名無しさんNGNG
>>941
voidが導入されたのってANSI draftあたりからだろ?

> void使う方がいい書き方って本で習ったけど・・・
なのにこれか? そんな本捨てちまえ。つーか書名/著者は?
0944デフォルトの名無しさんNGNG
>>941
返値の型省くとint扱い〜。
0945 ◆JAPH9PWA NGNG
>>941
いや、全然違うよ。
戻り値を省略するとintになる。
だからmain()はint main()と同じこと。(奨励はされないだろうけど)
void main(void)はダメでしょ。引数のvoidはともかくmain()は値を返すべき。
0946_NGNG
>>942, 943
ああmainの話じゃなくて引数です。省略しないでvoid書いた方がいいと。

>>944, 945
そうなんですか。省略したことがないので知らなかった(w;
もちろんmain()はいつもintかえしてますけど。(make とか困るので)
0947デフォルトの名無しさんNGNG
こことかニュースグループとか、niftyのFCなんかも含めて、ネット上で
これだけ言われてるのにいまだにvoid main()と書いてる本があるという
のはある意味すごいな。
0948デフォルトの名無しさんNGNG
void main()なんざ知ってるかどうか、の問題だろ。
本質にはまったく関係ない。
こんなので初心者呼ばわりするのは正直カコワルイ
0949デフォルトの名無しさんNGNG
初心者呼ばわりしてるんでなくて、本の話でしょ?
0950デフォルトの名無しさんNGNG
main関数の構文は以下の通り。

int main(int argc,char **argv); もしくは int main(int argc,char **argc,char **envp);

多少とも意味のあるプログラムを造るのに、argcやargvを使わないことは考えられない。
また、main関数は、終了ステータス(正常終了、異常終了)を返す必要があるため、
戻り値を必要とする。以上。
0951デフォルトの名無しさんNGNG
>>948
初心者じゃないね。もぐりだね。
0952デフォルトの名無しさんNGNG
>>950
>argcやargvを使わないことは考えられない。

どうします?これ。
0953デフォルトの名無しさんNGNG
>>950
envpは規格外。
int main(void)かint main(int argc,char *argv[])。
0954デフォルトの名無しさんNGNG
>>952
ほっとけば? 必要ないときだってあるんだし。

とりあえずうちのエディタは main C-l と打つと

int main(int argc, char **argv)
{

}

まで入力してくれるんで、argcとargvがいらないときでもつけてる。
あっても害はないしな。

warning levelあげたら文句言ってくるコンパイラがあるかもしらんけどな。
そんときははずすわ。
0955ボラれ王NGNG
Cから勉強したいんですけど
とりあえずボーランドC++ビルダー6購入しました。
インストールしたまではいいんですけど
#include<stdio.h>
main()
とかやるには一体どうしたらいいんですか?
教えてください。
0956デフォルトの名無しさんNGNG
>>955
くれ
0957ボラれ王NGNG
>>956
教えてください!
0958デフォルトの名無しさんNGNG
>>957
6は持ってないからわからないけど、新規作成でコンソールウィザードって無い?
IDE使わないでbcc32使ってもいいけど。

それより、くれ。
0959デフォルトの名無しさんNGNG
>>957
メモ帳に書くの。
0960デフォルトの名無しさんNGNG
処理の高速化とメモリーの消費量(使用量)削減はどちらを優先すべきですか?
ものにもよるでしょうけど、一般的にということで。
0961デフォルトの名無しさんNGNG
>>955
新規作成にある項目すべて試せばわかるよ。
0962デフォルトの名無しさんNGNG
>>955
まだユーザー登録していなかったら、アンインストールして俺にくれ。
0963デフォルトの名無しさんNGNG
一般的には、�dでもなく遅かったり、
�dでもなくメモリ喰ったりしないかぎり、
好きな方を選べばいい。
0964デフォルトの名無しさんNGNG
>>962
あふぉか、俺は質問に答えたし最初にくれと言ったのも俺だ。

>>955
お れ に く れ
0965デフォルトの名無しさんNGNG
>>963
そうですか。
今、ある機能を持った関数を書いていまして、2つ書いたんですけどどちらを取ろうか迷っていたんです。

じゃあ消費目盛りの少ない方を取ろうかな・・・コードもすっきりしているし。
両方とも満たすコードをかければいいんですけどね(^_^;)
0966965NGNG
目盛りじゃないメモリー(^_^;)
0967デフォルトの名無しさんNGNG
970の人、次スレよろしくね
0968ボラれ王NGNG
>>959
あっ、メモ帳に書くんですか!?全然知りませんでした。

>>961
そすですよね。でもそれはかなりめんどくさそうです。

>>962
もうユーザー登録してしまったと記憶しています。

>>964
もっと教えてください。
0969デフォルトの名無しさんNGNG
なんで市販のBCBなんて買っちゃうかな〜
0970デフォルトの名無しさんNGNG
>>968
ぼられたのか?
0971デフォルトの名無しさんNGNG
>>965
一般的には早い速度もメモリ消費もさほど考えずに、
すっきりとしたコードを書くことを心がけたほうがいいと思うぞ。

勿論あまりにもメモリを消費しすぎたり
(今現在だと100MBの配列をどんと取るのはよした方がいいと思う)
非常識に遅いアルゴリズムを使ったり(バブルソートとか)
するのはよくないけどな。

プログラムはまず正しく動くことが重要で、
それから性能に問題があれば最適化していくとよい。
すっきりとしたコードは大抵最適化しやすい。
0972デフォルトの名無しさんNGNG
悪くない選択だ
0973デフォルトの名無しさんNGNG
>>970
次スレよろぴく〜。ビシっとしまる名前で頼むよ
0974デフォルトの名無しさんNGNG
>>973
逝ってくる。
びしっとしまる名前か。どんなのがいいだろうか。
0975ボラれ王NGNG
>>969
やっぱりフリーコンパイラを使うべきですか?
でもダウンロードしたんですけど
パスの設定でつまづいて購入に至りました。

>>970
購入しても、捜査がわからず、
ボラれた気分で日々を過ごしています。
0976デフォルトの名無しさんNGNG
>>975
マニュアルよめ
0977デフォルトの名無しさんNGNG
>>975
よし!元は取らにゃぁな。
今から本屋で「やさしいボーランドC++の使い方」とかいう本を買ってくるんだ。
それでも駄目だったら「初心者でも分かる『やさしいボーランドC++の使い方』」を
買ってくる。それでも駄目だったら・・・

0978デフォルトの名無しさんNGNG
C言語なら、俺に聞け! <27>
http://pc3.2ch.net/test/read.cgi/tech/1027160374/
0979デフォルトの名無しさんNGNG
新スレッド
http://pc3.2ch.net/test/read.cgi/tech/1027160374/
0980デフォルトの名無しさんNGNG
>>975
ボーランドが喜ぶね。
0981デフォルトの名無しさんNGNG
1000ゲトー\      \∧_ヘ    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧∧ ≡≡.\    / \〇ノゝ∩< 1000取り合戦、いくぞゴルァ!!
(゚ー゚*) 、 ≡≡\  /三√ ゚Д゚) /  \__________
O┬Oc )〜≡≡\/三/| ゚U゚|\      \オーーーーーーーッ!!/
(*)ι_/(*) ≡≡\   ∧∧∧∧∧―――――――――――
――――――――――< 予 合 千 > __〃      ヽ lv
い、今だ1000ゲットォ!! < 感 戦 取 > ヽ\ .ノノノ)ヘ))〉ヽ' / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 .∧ ∧ =-       <. !! の り >_!(0.)! (┃┃〈リ / < はわわー。1000げっとです〜
 (゚Д゚;) ≡=-     /∨∨∨∨∨\ Vレリ、" lフ/ ./ \ \________
 ⊂┯⊂)  ≡=-   / 1000 ∧_∧\―――――――――――
 (ヽ\ ヽ ) ≡=-  / ゲット ( ´Д` ) \今だ!1000ゲットォォォォ!
   し\J   =- / しますた /,  /   \    ∧∧   ) ズザーーーーーッ
  (( ̄(◎) ≡=-/      (ぃ9 |      \⊂(゚Д゚⊂⌒`つ≡≡≡(´ ;;;≡

0982ボラれ王NGNG
>>976
マニュアルは決して初心者に向けたものでは
ありませんネ。
やっぱり苦労して読むべきでしょうか?

>>977
じゃあ明日本屋へ行ってきます!
0983デフォルトの名無しさんNGNG
記念パピ子川-_-川
0984デフォルトの名無しさんNGNG
記念パピ子川-_-川
0985デフォルトの名無しさんNGNG
__stdcall とか _cdecl とか、関数呼び出し規約が一つの規約に統一
されていないのは何故なのでしょうか。逆に言うと、なぜ規約が複数
存在するんでしょうか。
0986デフォルトの名無しさんNGNG
効率とか互換性とかいろいろ。
WINDOWSにおいて__cdeclが標準でないのは、
コードサイズの縮小のため。
わざわざ処理系に__cdeclが用意されているのは、
可変長引数を実現するため。
0987デフォルトの名無しさんNGNG
>>985
_cdecl   可変個の引数を取り、呼び出し側でスタックを回復する。
_stdcall 固定個の引数を取り、呼び出された側でスタックを回復する。

1つの関数が何回も呼び出されるケースでは、_stdcallの方が全体のサイズが
小さくなり、動作も速い(だったはず)。
WindowsのAPIの場合、おおかた_stdcallで wsprintf() などの可変個の引数をとるものだけ、
_cdecl だったはず。
0988デフォルトの名無しさんNGNG
985
>>986-987 さん
可変長引数を実現するのが _cdecl だったんですね。
呼び出し規約がサイズに影響することも知りませんでした。
ご解説ありがとうございました。
0989989NGNG
あと11!!
0990デフォルトの名無しさんNGNG
余裕の990get
0991デフォルトの名無しさんNGNG
埋め立てると見れなくなるのでコソーリ沈ましておこう・・・しばらくは。
0992デフォルトの名無しさんNGNG
ヽ(´ー`)ノ埋め立てないと間違ってこっちに質問する人が居る罠
0993デフォルトの名無しさんNGNG
>>992
つってわざわざアゲて間違えたらどうすんだ、ホゲ
0994デフォルトの名無しさんNGNG
>>993 ヽ(´ー`)ノ言ってる間に埋めろヴォケ
0995__NGNG
 
0996 NGNG
1000
0997 NGNG
100
0998 NGNG
10
0999 NGNG
1
1000デフォルトの名無しさんNGNG
aye
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。