トップページ⇒tech
983コメント325KB

C統合・質問スレッド

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
いろんなスレが乱立していますが、統合的なスレッドがないので立てました。
質問もOK

関連スレ
C#って死滅する理由がないよね! Part4
http://pc2.2ch.net/test/read.cgi/tech/1042464104/
C#最強伝説
http://pc2.2ch.net/test/read.cgi/tech/1061208152/
C#とJava、どっちをおぼえればいいの?
http://pc2.2ch.net/test/read.cgi/tech/1006715468/
C#Builder Professional 質問箱
http://pc2.2ch.net/test/read.cgi/tech/1062433418/

関連リンク
http://dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/
0002デフォルトの名無しさんNGNG
スレタイ間違った。
終了…
0003デフォルトの名無しさんNGNG
頼むからスレ立てフォームに目立つように「タイトルに#を入れるな」と書いてくれ。

0004デフォルトの名無しさんNGNG
どうして#が無視されるんだろう…
0005デフォルトの名無しさんNGNG
クソスレage
0006デフォルトの名無しさんNGNG
C言語スレ無駄に重複させんなヴォケ >>1
0007デフォルトの名無しさんNGNG
>>4
C#厨が嫌われているから
0008デフォルトの名無しさんNGNG
まだC#厨の>>1か。

「C#最強伝説」とか馬鹿な名前のスレたておって「C#最凶伝説」だろヴォケが
0009デフォルトの名無しさんNGNG
みんな悪かった…
半角#が無視されることを知らなかった…
0010デフォルトの名無しさんNGNG
2で終了かよ
0011デフォルトの名無しさんNGNG
>>10
ごめん。本とは♯を入れるべきだったんだが、さすがにこのスレタイでは使えない(誰がどう見てもCのスレに見える)
0012デフォルトの名無しさんNGNG
前の2スレの913に対する指数関数の計算。誰か答えてやれよ!
こういうのをマクローリン展開っていうんだ。覚えておけ



/* poly.c */

#include <stdio.h>

#define N (4)

main()
{
floatt, n, x, y, z;
intfact, i, j;
y=0
fact = 1
t=1
for(j = 0; j <= 7; j=j+1){
t=t*x;
for(i = 1; i<= 8; ++i){
fact = fact * i;
 y=y+ t/fact;
}
}
}
0013デフォルトの名無しさんNGNG
>>12はマルチ
0014デフォルトの名無しさんNGNG
>>12
>intfact, i, j;
しかしこれはさすがに通らない。
0015デフォルトの名無しさんNGNG
>floatt, n, x, y, z;
ついでにこれもな。
0016デフォルトの名無しさんNGNG
tabが落ちただけだろ
0017デフォルトの名無しさんNGNG
>>16
それ以前にここはC#スレ(の残骸)です。
0018デフォルトの名無しさんNGNG
プログラミングが芸術って言うけどソースをAAにするつわものはいないか?
0019デフォルトの名無しさんNGNG
>プログラミングが芸術

その考え、捨てた方が安全。
0020デフォルトの名無しさんNGNG
>>19
そうします・・・
もう少しいい物が作れるようになってから言うようにしますね
0021デフォルトの名無しさんNGNG
>>18
これとか
http://pc2.2ch.net/test/read.cgi/tech/1042802490/21
0022デフォルトの名無しさんNGNG
>>21
ほとんどコメントじゃないですか。
0023デフォルトの名無しさんNGNG
>>21
>>22に同じくほとんどコメントじゃんw

でも何気にワロタ
0024デフォルトの名無しさんNGNG
1は立て逃げ?
削除依頼ださないの?
0025デフォルトの名無しさんNGNG
[287] 名前: 飛べない削除屋 ★ [ sage ] 投稿日:03/10/18 16:30 ID:???
(引用前略)

>>286
スレタイを間違えたという理由では削除できませんです。
また、スレタイの変更はできません。
0026デフォルトの名無しさんNGNG
>>25
マジで?
じゃあ、ほっとこうか…
それとも再利用する?
0027あふNGNG
くだ質でながされてしまいました。
画像や音声ファイルなどを実行ファイルに一まとめにしたいのですが、
どうすれば良いでしょうか?

C言語、gccですが、Makefileなどで何かすればよいのでしょうか?
リンクするとき*.oと一緒にリンクするのですかね?
0028デフォルトの名無しさんNGNG
すいません・・・・もぅ我慢できないっす・・・・















ぬるぽ
0029デフォルトの名無しさんNGNG
>>28
そろそろ八時間経ちますね。
0030デフォルトの名無しさんNGNG
ポインタ不要論
http://member.nifty.ne.jp/yamazaki/doc/without_pointer.html

説明だけ読むとポインタが参照になっただけでなんにも変わってない気がします。
0031デフォルトの名無しさんNGNG
>>30
文字列処理や動的配列なんかの仕方なくポインタを使わざるを得なかった部分で
ポインタを使わなくてすむだけでもだいぶ楽ではあるんだろうけど
0032デフォルトの名無しさんNGNG
C言語統合スレですかここは。
なら質問します。

C言語でお勧めのコンパイラはなんですか?
0033デフォルトの名無しさんNGNG
>>32
GNU C Compiler
0034デフォルトの名無しさんNGNG
>>33
そんなレガシーなモノ!
0035デフォルトの名無しさんNGNG
>>34
何年製のタイムマシンをお使いですか?
0036デフォルトの名無しさんNGNG
gccはGNU Compiler Collectionで、GNU C Compilerだったのは昔の話。
003734NGNG
>>36
でも、GNUなCのコンパイラに関してはGNU C Compilerと言う名が残っているよ。

彼はどこにもgccとは書いてないから耐えがたきを耐えて黙ってたんだ。俺は。


0038デフォルトの名無しさんNGNG
GNU Compiler is not C Compiler
0039デフォルトの名無しさんNGNG
>>38
gccはね。大丈夫か?
0040デフォルトの名無しさんNGNG
Gcc is not C Compilerにすべきだったな
0041デフォルトの名無しさんNGNG
>>40
Collectionはどこに消えたんだ?
0042デフォルトの名無しさんNGNG
>>33
どうもありがとうございます
0043デフォルトの名無しさんNGNG
void*の使い方についてお聞きしたいのですが。
bsearchやqsortなどの関数で探したい値の型は何でも探せる
ようになってますが、その際にサイズとしてsize_t型を引数として
与えていますよね。
で、探したい値や探す配列はvoid*型の引数として
受け取っているので、size_tで受け取った型にキャストしないと使えない
と思うんですよ。
その時size_t型でバイト数はわかるけれども実際にint型なのかlong型
なのかって判らないと思うのですが、どんなふうにしてキャストしてるんでしょうか?
知っている方が居ればご指導下さい。よろしくお願いします。
0044デフォルトの名無しさんNGNG
>>43
自明なので勝手に指定して下さい。
0045デフォルトの名無しさんNGNG
>>43
何書いてあるのかよくわからん。
0046デフォルトの名無しさんNGNG
>>43
bsearchやqsortはポインタの指す中身にはまったく関知しない。
そのために比較関数を渡すようになってる。
0047デフォルトの名無しさんNGNG
ファイルが更新されたというのをCのプログラムへ渡せますか?
ディレクトリ内を延々と読み込んで判定するというようなのではなく、
「更新された」という情報をトリガにして読みにいきたいんです。
0048デフォルトの名無しさんNGNG
>>47
FindFirstChangeNotification
0049デフォルトの名無しさんNGNG
>>48
標準の関数ですか?<FindFirstChangeNotification
0050ただし、Windows 限定だけどな。NGNG
>>49
標準だよ。
0051デフォルトの名無しさんNGNG
Win32標準。
0052デフォルトの名無しさんNGNG
>>51
いいえ、シェル拡張です。
0053デフォルトの名無しさんNGNG
>>52
ふーん、俺の Windows2000 では kernel32.dll にあるみたいなんだけど、君のは違うんだな。
0054デフォルトの名無しさんNGNG
SDKにあるね。FindFirstChangeNotification。
MSDN参照。おしまい。
0055デフォルトの名無しさんNGNG
C++で質問なんですが
2行3列の行列の和を求める関数 int sum(int x[][3],int y[][3],int z[][3])
で仮引数x[][3]をx[][]と出来ないのは何故ですか?

また、この関数だとn行3列の行列の和しか出せないのですが
n行m列の行列の和を出す関数は作れないんでしょうか?
0056デフォルトの名無しさんNGNG
>>55
>で仮引数x[][3]をx[][]と出来ないのは何故ですか?
サイズのわからない型を要素とした配列は定義できないからです。
サイズがわからないと、添え字によるアクセスができないので。

>n行m列の行列の和を出す関数は作れないんでしょうか?
作れます。
005756NGNG
「作れます。」ではあまりに不親切ですね…
一例を書いておきます。
int sum(int *x, const int *y, const int *z, int n, int m)
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            x[i * m + j] = y[i * m + j] + z[i * m + j];
    return 0;
}
0058デフォルトの名無しさんNGNG
>56さんありがとうございます。
これで次章に進めます。
0059デフォルトの名無しさんNGNG
文字列を数値に変換してそれをint型の変数に入れたいのですが
例えば
char buf[] = "23456";
int num;

こんな形だった場合、numに数値の23456を入れるにはどのようにするんでしょうか?
bufに入るのは数字のみです。
よろしくお願いします(´・ω・`)
0060デフォルトの名無しさんNGNG
atoi
006159NGNG
sage忘れ&宿題スレと間違いました。。。すいません
首吊って逝ってきます(´・ω・`)
0062デフォルトの名無しさんNGNG
西成広告
■ ソフトの総合商社 そふとはうす ■
Windows日本語製品版です。Macもあります。 単位はすべて円です
Office 2003 Pro 10,000 
WindowsXP Pro 4,000 
Windows2000 Pro 4,000 
Windows2003 ServerEnterprise 15,000 
FrontPage 2003 4,000 
OneNote 2003 4,000 
Acrobat 6.0 Pro 7,000 
AfterEffects 6.0 Pro 15,000 
CreativeSuite Premium 20,000 
Premiere Pro 10,000 
DreamweaverMX 2004 5,000 
FlashMX 2004 5,000 
FireworksMX 2004 5,000 
StudioMX2004 with FlashPro 10,000 
LightWave3D 7.5 10,000 
Shade6 Pro 10,000 
AutoCAD 2004 20,000 
AutoCAD LT 2004 12,000 
VectorWorks Ver10.5 10,000 
RenderWorks Ver10.5 10,000 
3DStudioMAX 6J 10,000 
NortonSystemWorks 2004 Pro 3,000 
NortonInternetSecurity 2004 Pro 3,000 
Painter8 5,000 
すべてユーザー登録できません。windows日本語製品版です。
ご注文はここ→ [email protected]
0063デフォルトの名無しさんNGNG
デジタルマーズってどうやってつかうのでつか?
コンパイルはできまつたが、リンクでおちまつ。
0064デフォルトの名無しさんNGNG
Lineage2, ResonanceAge等の3Dゲームのマクロ or BOTをCで作りたいのですが知識が無くて製作できません
お勧めの書籍やツール等あったら教えてもらえないでしょうか?
資金はバイトで貯めた5万円です、BOTを作るにあたってアドバイスなど頂けたら嬉しいです
0065デフォルトの名無しさんNGNG
age忘れました
0066デフォルトの名無しさんNGNG
質問でふ。
コンパイルして作られる実行ファイルのアイコンを
Windowsのデフォルトのアイコンでなくて別のビットマップに
したい時はどうしたらよいでしょう?
ググったけどわからなかった・・
0067デフォルトの名無しさんNGNG
Windowsでしたらリソースでググって下さい。
006866NGNG
>>67
なんかわかったっぽいです。
心から礼を言いたい。
0069 NGNG
列挙型で質問なんですが

enum menu{ add, kill };

menu selemenu(void)
{
int a;

return (menu(a));
}

int main(void)
{
menu b;

switch( b = selemenu() )
{
略
}
return 0;
}

私が参考にしている本では上記のように
selemenu関数の返却値a(menu型)をmain関数でb(menu型)に代入しています。
しかし、bがint型でもa(menu型)が代入できてしまいます。

なぜですか?
0070デフォルトの名無しさんNGNG
>>69
互換性があるからです。ポインタと配列のようなものです。
0071デフォルトの名無しさんNGNG
まだポインタまで勉強してないんですが
配列の要素一つ一つに型が設定できるとか言う話と関係するんですか?

レスありがとうございます。
0072デフォルトの名無しさんNGNG
enum型は int の値に名前を付けて、その集合を定義していると考えればいい。
通常は0から順に値が自動的に当てはめられるが、
enum menu{ add = 10, kill = 20 };
みたいに値を指定することもできる。
0073デフォルトの名無しさんNGNG
あまり詳しいことを言うと混乱するかもしれないので言わないが、
列挙体型の値は int 型へ明示的なキャストなしで変換される。
それは仕様。

で、逆に int 値から列挙体型へは明示的にキャストしないといけない。
0074デフォルトの名無しさんNGNG
>>71
> 配列の要素一つ一つに型が設定できるとか言う話と関係するんですか?
意味不明。
0075デフォルトの名無しさんNGNG
C++で質問なんですが
typedefがなんなのかが良くわかりません。
staticやautoは解かるんですが・・・
0076デフォルトの名無しさんNGNG
>>75
ある型に別の名前を付ける予約語です。
Cの時代は構造体のstructが省けなかったのでそれの除去などによく使われていました。
0077デフォルトの名無しさんNGNG
C++だと、名前空間とかクラステンプレートの指定を省略するのによく使われている。
0078デフォルトの名無しさんNGNG
名前空間はエイリアスが作れるが。

namespace A = B::C::D;
0079デフォルトの名無しさんNGNG
>>78
>>77が言っているのは
typedef std::string string;
のような話じゃないか?
クラス内では名前空間に対するusingができないから
有効なこともあるかと。
0080デフォルトの名無しさんNGNG
std::stringの実体ってびろーんと長いテンプレートの具体化なんでしょ?
0081デフォルトの名無しさんNGNG
>>79
なるほど。そういうことか。
0082デフォルトの名無しさんNGNG
ポインタについて質問です

int* a;
a = &b;

この場合aがポインタ?
ポインタだとすると&bの名前は何でしょうか?

それともint* a; a = &b; 二つでポインタ?
0083デフォルトの名無しさんNGNG
>>82
ポインタは「型」について言うときと「変数」について言うときがある。
int* a; /* aは「intへのポインタ」型の変数。単に、aはintへのポインタであるとも言う。 */
a = &b; /* &bは「intへのポインタ」型の式。型が同じなのでaに代入できる。 */
0084デフォルトの名無しさんNGNG
>83
即レスありがとうございます。
0085デフォルトの名無しさんNGNG
>>83
アドレスとポインタは違うものだと思うぞ。
0086デフォルトの名無しさんNGNG
関数へのポインタに関して質問です
double型の引数を受け取って、double型を返却する関数へのポインタfuncを
double (*func)(double x)
と宣言するそうなんですが
int* a = &bとオブジェクトへのポインタを宣言するなら、関数へのポインタの宣言は

double* func(double x)
になるんじゃないでしょうか?

0087デフォルトの名無しさんNGNG
>>86
int ???;
は、"???の型がintである。"と読むといい。
int *a;
なら、*aの型がint、
double (*func)(double);
なら、(*func)(0.0)の型がdouble
double *func(double);
なら、*func(0.0)の型がdouble
0088デフォルトの名無しさんNGNG
>87
int* a = &bとint *a = &bは同じ宣言なんですか?

>double (*func)(double);
なら、(*func)(0.0)の型がdouble
double *func(double);
なら、*func(0.0)の型がdouble

*funcに()のある無しで何か違いはあるんでしょうか?
0089デフォルトの名無しさんNGNG
関数ポインタと普通のをごっちゃにするなよ
0090デフォルトの名無しさんNGNG
ごっちゃにしてたみたいです;

double *func();とするとdouble型へのポインタを返すfunc関数
double (*func)();とすると整数を返す関数へのポインタfunc
ってことでしょうか?

double *func();とするとdouble型へのポインタを返すfunc関数
は番地を受けとってなにか処理をして番地を渡す関数になるんでしょうか?
0091デフォルトの名無しさんNGNG
ごっちゃになってるのは君の頭だ。と言ってみる。

>>87
> int* a = &bとint *a = &bは同じ宣言なんですか?
同じ。

> *funcに()のある無しで何か違いはあるんでしょうか?
ポインタなら変数だから中身を入れ替えられる。
逆に普通の関数は定数だとでも思って。

>>90
> double *func();とするとdouble型へのポインタを返すfunc関数
> double (*func)();とすると整数を返す関数へのポインタfunc
doubleを返す関数へのポインタ、ね。

> double *func();とするとdouble型へのポインタを返すfunc関数
> は番地を受けとってなにか処理をして番地を渡す関数になるんでしょうか?
意味不明。引数にアドレスを取るような宣言には見えない。
番地を渡すというのが返すという意味なら、そこは正しい。
0092デフォルトの名無しさんNGNG
なるほど
レスありがとうございました。
0093デフォルトの名無しさんNGNG
素朴な疑問なんだけどfloorって関数があるじゃない。
実数xに対してxを超えない最大の整数を返すやつ。
例:floor(5.3)=5 floor(-1.5)=-2

で、これってなんで戻り値が実数になってるの?
double floor(double x)
じゃなくて
int floor(double x)
のほうが自然だと思うのだけど。
何か理由があるんですか?
0094デフォルトの名無しさんNGNG
int(double x)
のほうがもっと自然だな
0095デフォルトの名無しさんNGNG
>>93
intの範囲を越えた場合どうしましょう?
0096デフォルトの名無しさんNGNG
>>95
あーなるほど。
どうもありがとん
0097デフォルトの名無しさんNGNG
Web用のCのCGIで、<form>から受け取ったデータの解釈はどうやればいいのでしょうか?
環境変数を得るまではできたのですが・・・
GETとPOST両方教えてください。

Perlはそこそこできますが、Cは初心者です
0098デフォルトの名無しさんNGNG
>>97
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/index.html
0099デフォルトの名無しさんNGNG
>98
既に見ました。
C++じゃなくてCでありませんか?
0100デフォルトの名無しさんNGNG
>>99
お前、全然読んでねーだろ。
0101デフォルトの名無しさんNGNG
>100
読んでもさっぱりです。

そういえばCって仮想配列むりなんですよね
0102デフォルトの名無しさんNGNG
>100
http://www.coins.tsukuba.ac.jp/~yas/classes/syspro-2003/2003-06-09/
ここので一応、取得はできました。
0103プログラムだめぽNGNG
しょぼい質問で悪いのですが(´・ω・`)
下のifとelseifの部分で何も実行しないように
作りたいのですが、エラーがでてしまいます
どうすれば解決します?

void remove_dead_path(struct survival_path *root){
if(root->upper!=NULL)remove_dead_path(root->upper);
if(root->lower!=NULL)remove_dead_path(root->lower);
if(root==leaf[0])              ←ここから
else if(root==leaf[1])
else if(root==leaf[2])
else if(root==leaf[3])           ←ここまでなにも実行したくない
else free(root);
}
0104デフォルトの名無しさんNGNG
>>103
if(root==leaf[0])              ←ここから
    ;
else if(root==leaf[1])
    ;
else if(root==leaf[2])
    ;
else if(root==leaf[3])           ←ここまでなにも実行したくない
    ;
else free(root);
0105プログラムだめぽNGNG
>>104
セミコロンつけるだけでよかったのか
ありがとう〜助かった。・゚・(ノД`)・゚・。
0106デフォルトの名無しさんNGNG
>>25
この削除人て、アホだろ
0107デフォルトの名無しさんNGNG
あほなのはむしろ>>106であるという趣旨の書き込み
0108デフォルトの名無しさんNGNG
むしろくそスレほどageる価値があるという趣旨の書き込み
0109デフォルトの名無しさんNGNG
現在勉強中のC初心者です。
独習Cの次に読むとよさげな本を教えてください。
0110デフォルトの名無しさんNGNG
独習Cが終わっても、まだそんなこと言ってるのか。
0111デフォルトの名無しさんNGNG
>>110
だめですか?
0112デフォルトの名無しさんNGNG
猫でも分かるWindowsプログラミング、でもやってみれば?
0113デフォルトの名無しさんNGNG
あ、Windowsプログラミング、興味ありました!
そうか、そういけばいいのですね。
すみません、ご親切にありがとうございます!!!
0114デフォルトの名無しさんNGNG
独習Cの次は初めてのCだ。
間違いない。
0115陽一NGNG
分からないときは、
作ってわかるCプログラミング。
分かったら、CCレモンを飲む。
間違いない。
0116デフォルトの名無しさんNGNG
質問です。
キーボードの入力をscanfとかじゃなくて押された瞬間処理をする関数ってないですか?
HSPのstick見たいな奴・・・
0117デフォルトの名無しさんNGNG
>>116
<conio.h>があれば、その中のgetche
0118デフォルトの名無しさんNGNG
>117
具体的な使い方がワカリマセン
(´・ω・`)ヘルプで命令が見つからない・・・
0119デフォルトの名無しさんNGNG
        ∧_∧∩   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ´∀`)/  < 先生!やっぱ無限ループですね!
  __ / /   /     \________
  \ ⊂ノ ̄ ̄ ̄ ̄ ̄\
  ||\           \   
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0120デフォルトの名無しさんNGNG
>>116
それは、windowsアプリにしたほうが楽。
0121116NGNG
キーボードが打たれたときだけ反応して
打たれてなかったらそのままプログラムを進める。
打たれたキーによって処理をさせる。(Iが押されたら〜とか)

そのやり方がワカリマセン
getcheだと打たれるまでとまるので・・・
教えてクレクレ厨でスマソ 吊ってきまつΛ||Λ
0122デフォルトの名無しさんNGNG
# include <conio.h>
int c;
if(kbhit()) /* キーが押下されている */
    c = getch();
else
    /* 何か別のことをする */;
0123116NGNG
if(kbhit())のkbhitは何なんでしょうか・・・?
あとiが押されたらiが押されたと分かるようにするにはどうしたら・・・?(´・ω・`)
0124デフォルトの名無しさんNGNG
>>123
kbhitはキーボードのキーが押されているかを判定する関数。
iが押されたらgetch()から'i'が返る。
if(kbhit() && getch() == 'i') /* 今iが押されている */
0125116NGNG
>124
おお とてもわかりやすいです。
アリが�d。ニューソクで47氏逮捕祭りか・・・
0126116NGNG
また迷惑かけに来ました。

if(kbhit()&&getch()=='a'){printf("a");}else if(kbhit()&&getch()=='b'){printf("b");}

上のようにするとキーボードの処理が遅くなります。どうしたら?
0127デフォルトの名無しさんNGNG
kbhitとgetchを複数回使わなければ良いのでは?
0128116NGNG
>127
それ以外のやり方しらないんで・・・
0129デフォルトの名無しさんNGNG
// なにをしたいのか知らないが、これで参考になるだろ。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define END_CODE '\n'
const char *EndCodeName = "Enter";

int dispatch(int event){
  switch(event){
  case END_CODE:
    printf("プログラムを終了します。");
    exit(0);
  default:
    printf("[0x%02x] が押された。\n", event); 
  }
  return 0;
}

main(){
  int prev,cur;
  printf(" ********************\nキーコード表示。\n[%s]で終了します。\n********************\n", EndCodeName); 
  for(;;){
    if(!kbhit()) continue;
    if(prev != (cur = getch())){
      dispatch(cur);
      prev = cur;
    }
  }
}
0130116NGNG
>129

ありがとうございます。
とても参考になりました。
0131デフォルトの名無しさんNGNG
C言語で、JPEG画像ファイルを表示させようとした場合、どんなコントロールがありますか?
VBだったら、ピクチャーボックスなるものがあるけど、Cで扱えるコントロールにはどんなのがありますか。
当然ウィンドウ上で表示させるということです。
0132デフォルトの名無しさんNGNG
すいません、初歩的な質問なのですが

char型の変数って何バイトまで値を格納できますか?

ファイルから読んだ値を格納したいのですが、どの程度の大きさまで可能なのか分かりません
0133デフォルトの名無しさんNGNG
char自身は1バイト。

配列ならば・・・・・・自分で試してみろ。
char 2ch[10000000] // About 10M byte
とか。エラーが出たら駄目ー。出なかったらOK−
0134デフォルトの名無しさんNGNG
エラトステネスの篩を作ろうと思ったんですが、
配列の個数を1000000000000(1兆)個にしようとすると
うまくコンパイルできません。
配列の数をメモリの許す限り使いたい場合はどうしたらよいのですか?
とりあえず、配列の数が1兆個あれば問題ないんです。
0135デフォルトの名無しさんNGNG
>>134
1TByte以上のメモリを積んでください。
1.0005TByteくらいのメモリであれば問題無いと思います。
0136134NGNG
>>135
そんなの無理です。
計算してみたら私の言っていることが
いかに無理難題だったかがわかりました。
配列の数をなるべく多くするにはどうしたらいいのですか?
メモリの許す限り配列を並べる方法はありますか?
0137デフォルトの名無しさんNGNG
mallocとかでは駄目なのかい?
0138デフォルトの名無しさんNGNG
size_tが32bitだと無理
0139デフォルトの名無しさんNGNG
>>136
Windows2000(XP)だったら2GBが限界だよ。64bitのOSに乗り換えて1TB以上の
ディスクアレイを組んでやるしかない。
0140デフォルトの名無しさんNGNG
「配列の個数」ではなく「配列のサイズ」だろ
配列のサイズの上限は言語処理系のマニュアルに書いてあるはず
#メモリ上に乗らないデータを扱うというのは大昔からあるテーマだな
0141136NGNG
[10000][10000]で一億をやってみたいと思います。
[10000]だったら
9592個の素数を入れれましたので
0142デフォルトの名無しさんNGNG
配列じゃなくてリストを使ってみたらどうだろう?
動的にメモリを確保していくので可能な限り最大の値まで求められるし、
非素数と判明したノードはすぐに開放 or 再利用できるから、無駄も少ないだろ。

「エラトステネスのふるい」では無いかもしれないが。
0143デフォルトの名無しさんNGNG
あぁ、そんなことしなくてもいいじゃん。
動的に確保して、配列満杯になったら、全てファイルに書き出し。
んでまたそれ以上の数字について調べる。

これだったら、[10000]くらいでいいじゃん。
ただし処理が多少遅くなる可能性もあるけど。

これだったら、パソコンが扱える最大の数字まで、計算できるじゃん。
0144デフォルトの名無しさんNGNG
ファイルをセーブして、そのファイルに変数を保存しておく方法(int型など)は無いですか?
講座などを見てもchar型くらいしかのってないので。
char型から整数を取り出すしかないですかね?
0145デフォルトの名無しさんNGNG
fread&fwrite
0146デフォルトの名無しさんNGNG
fscanf&fprintfでもいい。
0147144NGNG
う〜ん fprintfとfscanfを使っても保存できるんですが
保存した変数の取り出し方がワカリマセン。ちゃんと保存できているのかも怪しいです。
0148デフォルトの名無しさんNGNG
データ形式は自分で責任持ってください。
0149デフォルトの名無しさんNGNG

ポインタへのポインタはどうやるんですか?
0150デフォルトの名無しさんNGNG
>>149
ポインタへのポインタをつくります。
0151デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=63
にはってある二つのソースは

sosuu[]=2;の配列の中の数字が違うのですが、
sosuu[0]を最初の配列として使用すると
最後に素数を表示するときになって
2番目の素数は1311096です。
と表示されてしまいます。
なぜなんでしょうか?
0152151NGNG
すいません、どなたもいらっしゃらないようなので
あげますね
0153デフォルトの名無しさんNGNG
>>152
sosuu[1]に何も値を代入してないから。
> sosuu[n+1] = sosuukouho;
と
> m += 1;
の間に
printf("n = %d, m = %d, sosuu[%d] = %d\n", n, m, n+1, sosuu[n+1]);
を入れて確認してみ
0154151NGNG
>>153さんわかりました。

if((sosuukouho % sosuu[n] != 0) && (n == m)) の部分の

(n==m)ここが原因だったんですね

(n==m-1)としたら直りました。

ここが影響したので
printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m]); を

printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m-1]);

になおして無事意図したとおりに動くようになりました。
ありがとうございました。

0155デフォルトの名無しさんNGNG
なーんでこのすれは閑古鳥がないてんだよう
0156デフォルトの名無しさんNGNG
>>155
それは、このスレの存在自体が「間違い」だから。
正しくはスレタイをミスっただけなんだが、そのミスが致命的なミスだったわけで・・・。
0157155NGNG
んじゃ、お気に入りから削除しますね
0158149NGNG
二次元配列のポインタの宣言しかたがわかりません

char a[2][2],*ptr,*ptr2

ここから自分なりに考えてもコンパイルエラーになります。
0159デフォルトの名無しさんNGNG
>>158
char (*pa22c)[2][2]; /* 2次元配列へのポインタ */
char *a22pc[2][2]; /* ポインタの2次元配列 */
0160デフォルトの名無しさんNGNG
>>159

�dクス
0161160NGNG
またまたポインタの質問です

*(pointa + (指定一次元添字 * 二次元要素数) + 指定二次元添字) 某C講座から

上の指定一次元添字と二次元要素数というのはどういう意味なんでしょうか?
指定一次元添字が指定する一次元の配列番号なんですか?

日本語おかしいです。スミマセン
0162デフォルトの名無しさんNGNG
type array[N][M];
type *p = array;
array[4][12] = *(p + 4 * N + 12);
0163デフォルトの名無しさんNGNG
>>161

pointa[N * M]; /* pointa[N][M]; みたいに使う */
/* ... */
  a = pointa[i * M + j]; /* a = pointa[i][j]の代わり */

なので、
i : 指定一次元添字
j : 指定二次元添字
M : 二次元要素数
と思われます。
0164160NGNG
M+jとするのはなぜなんでしょうか?
0165デフォルトの名無しさんNGNG
>>164
M + jじゃなくて
(i * M)そこに + j している感じで
0166160NGNG
#include <stdio.h>
#include <conio.h>

int main()
{
int *ptr;
int a[2][2],b;

*ptr = a;

a[1][2]=5;

b=*ptr[1*2+1];

printf("%d",b);
getch();
}
0167160NGNG
アァ・・・
まちがえて送信してしまった・・・
166のソースがコンパイルできません

int ( *)[2]型はint型に変換できない
無効な間接参照

の二つです。
0168デフォルトの名無しさんNGNG
*p: int型
a: int(*)[2]型
b: int型
*p[1*2+1]: int*型
0169デフォルトの名無しさんNGNG
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから、*を適用できない。
無効な間接参照とはこのことだろう。
0170デフォルトの名無しさんNGNG
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから*を適用できない。
無効な間接参照とはこのことだろう。
0171160NGNG
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?


0172160NGNG
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?


0173160NGNG
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?
0174デフォルトの名無しさんNGNG
>>166 のソースを正しくとこうなるんだよね
(便宜上aは初期化させてくれ)
#include <stdio.h>
#include <conio.h>
int main()
{
int (*ptr)[2], a[2][2] = {{0, 1}, {2, 3}},b;

ptr = a;

a[1][2]=5;

b=ptr[1][1];

printf("%d",b);
getch();
}

0175160NGNG
なんか3回も書き込んである・・・orz

>>174
おお ありがとうございます。

(*ptr)[2]は*ptrの変数配列ですか?

ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
0176デフォルトの名無しさんNGNG
>>175
最適化でどっちも同じになるだろ
0177デフォルトの名無しさんNGNG
>>175
>(*ptr)[2]は*ptrの変数配列ですか?
>>159参照。
ptrはint[2]へのポインタ。

>ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
この二つは全く意味が違う。
後者はptr[3]と同じで、型はintの配列。
0178177NGNG
>>160が理解していないと思われることを補足しておく。
必要がなかったらスルーしてくれ。

まず、二次元配列は、配列の配列である。つまり、
int arr[2][3];
という宣言があるとき、arr[0]やarr[1]はintの配列で、要素数は3である。
ここで、配列はその先頭要素へのポインタに変換されることを思い出して欲しい。
だから、arrはarr[0]へのポインタに変換される。arr[0]はintの配列だから、
変換された後のarrはintの配列へのポインタ、つまり型はint (*)[3]である。
int (*)[3]型の変数pを宣言するにはint (*p)[3];と書く。これが、>>174で
ptr = a;
が正しくコンパイルされる理由だ。

次に、配列の要素を指しているポインタに整数nを足すと、
はじめに指していた要素のn個先の要素を指すポインタができる。
これは、その配列が、配列への配列(二次元配列)であっても同じことである。
だから、>>174の例で*(ptr+(1*2)+1)と書くと、ptrの三番目の要素が得られる。
実際にはptrには二つの要素しかないから、この結果は意味を成さない。

最後に、配列はメモリ上で、各要素が隙間なく並べられる。たとえば、
int arr[2][3];
と宣言した場合、arr[0]とarr[1]が隙間なく並べられる。
このとき、arr[0]やarr[1]も配列だから、これらの各要素も隙間なく並べられる。結果的に、
arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2]
と並ぶことになる。
この並びを一次元配列とみなしてアクセスするのが、>>161の方法である。
このとき、一次元配列の各要素はintであることに注意してくれ。
これを実現するには、添え字を一次元配列用に計算してarr[0][0]へのポインタに足せば良い。
arrはarr[0]へのポインタであってarr[0][0]へのポインタではないから、そのままでは使えない。
そこで、素直に&arr[0][0]と書くか、(int *)arrと強引にキャストする。
0179177NGNG
#include <stdio.h>
#include <conio.h>
int main()
{
int *p, a[2][2] = {{0, 1}, {2, 3}},b;

p = &a[0][0]; /* p = (int *)a;と書いても同じ */

a[1][1] = 5; /* a[1][2]は配列の外 */

b = *(p + (1*2+1)); /* b = p[1*2+1]; と書いても同じ */

printf("%d",b);
getch();
}

>>160がやりたかったのはこれかな?
0180160NGNG
>177-179
おお 分かりやすい説明ありがとうございます。
p=&arr[0][0]の方法は2次元以上の配列だと楽ですね。

0181デフォルトの名無しさんNGNG
調べても分からなかったんで教えてください。

イーサネット接続するときに connect()を使うわけですが
これのタイムアウト値を設定したいときどうすればよいのでしょうか。
settimeoutとか見かけたけど使い方が分かりませんでした。
0182デフォルトの名無しさんNGNG
連立方程式を解くプログラムを教えて下さい〜!

ax+by+c=0
dx+ey+f=0

のときx,yをとくような奴です。

C言語でおながいいいい
0183デフォルトの名無しさんNGNG
>>182 代数・幾何学の勉強しなさい。逆行列を作れば簡単に解ける。
理系の大学生なら授業でやると思われ。
0184デフォルトの名無しさんNGNG
初めまして。色々と試しているのですが、プログラムが作れません。
よろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
  変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
  分かるようにすること。また、各チームにはチーム番号をつけよ。

という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきません。よろしければ、ヒント的なものでもかまわないので教えてください。
0185デフォルトの名無しさんNGNG
>>184

ヒント
こちらで聞いたほうがいいでしょう。

ぼるじょあがC/C++の宿題を片づけますYO! 25代目
http://pc5.2ch.net/test/read.cgi/tech/1087929711/l50

書き込む前に
http://pc5.2ch.net/test/read.cgi/tech/1087929711/1
を読むことをお忘れなく。
0186184NGNG
>>185
ありがとうございます。そちらの方で聞いてみます。
0187デフォルトの名無しさんNGNG
質問です.
循環リストの長所と短所と、どのようなアプリケーションに
循環リストは向いているかを教えてください。
0188デフォルトの名無しさんNGNG
すみません。

C言語 dos で
msecの時間を表示したいのですが、
どのようにすればよいでしょうか?

よろしくお願いします。
0189デフォルトの名無しさんNGNG
>>1
> いろんなスレが乱立していますが、
お前が言うことではないな。
0190デフォルトの名無しさんNGNG
C/C++ でフリーのライブラリとかでperl相当の正規表現処理
とかテキスト処理とかしてくれるようなものって存在しませんか?
あるいはperlのスクリプトをそのまま使えるような・・・
フリーで無ければ有料でも構いませんが。
0191190NGNG
age忘れました
0192デフォルトの名無しさんNGNG
>>190
C++ならboostでも使っとけ
0193190NGNG
紹介thx.
0194デフォルトの名無しさんNGNG
LSI C-86 超簡単セットアップの  
Setlsic.batを実行したんですが
LSI C-86試食版をF:\LSIC86にセットアップします。
と表示されてドライブを指定できません。
何ででしょうか?
0195デフォルトの名無しさんNGNG
>>194
そのSetlsic.batとやらを直接書き換えてみたらどうだ?
0196デフォルトの名無しさんNGNG
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?
0197デフォルトの名無しさんNGNG
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?
0198デフォルトの名無しさんNGNG
C++の方のオプションで出来たような希ガス
0199デフォルトの名無しさんNGNG
>>196
今まともに使えるのはないっぽい。
0200196NGNG
>>198
gccのman見たけど見つからなかった。
どのコンパイラで使えるかご存知でしたら教えていただけませんか?

>>199
一部機能が使えない(関数のオーバーロードとか)くらいなら問題ないんですが、
プリプロセスの結果が怪しい、ってことでしょうか?
0201デフォルトの名無しさんNGNG
>>197
>普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?

普通、そういうのは「パーサー」と呼ばず「トランスレータ」と呼ぶ。
後は自分で調べれ。
0202デフォルトの名無しさんNGNG
gccの環境ってどこでDLすればいいんでしょうか?
ググッたけれど見つからないので(´・ω・`)
0203デフォルトの名無しさんNGNG
>>202
Windows?Linux?
0204202NGNG
Windowsです。
そろそろLinuxに移行しようと思ってるのでLinuxも教えていただければ幸いです。
0205デフォルトの名無しさんNGNG
>>204
WindowsならCygwinをインストールするときにgccを指定できるし、
MinGWというフリー環境もある。
Linuxだと大抵のディストリビューションに付属しているので特に問題はないと思う。
debianなどのディストリビューションでは初めから入っているわけではないが、
apt-getなどのツールで一発でインストールできる場合がほとんどなので、
Linuxの場合は開発環境に悩まされる事はほとんどないと思うよ。
0206デフォルトの名無しさんNGNG
>>205
即レスありがとうございます。
Cygwinを入れたときに指定していなかったらしいのでMinGWを使ってみます。
0207デフォルトの名無しさんNGNG
>>206
もう一度Cygwinのセットアッププログラムを実行して、gccを指定すれば
そのままインストールできるけれど。
再インストールではなく追加インストールになる。
0208デフォルトの名無しさんNGNG
>>207
MinWinでどれをDLしてよいかわからなかったのでCygwinのほうでやってみます。
とりあえずパッケージ選択時に全部選択しました。疲れたorz
0209デフォルトの名無しさんNGNG
Cygwinはデフォルトでgcc3.3.3だから、3.4入れたければ設定替えないとね
0210196NGNG
>>201
ありがとうございまつ。

探したけどもう全然ないんですね(´・ω・`)
0211デフォルトの名無しさんNGNG
>>210
Objective-Cならトランスレーターがあるが・・・
0212デフォルトの名無しさんNGNG
プログラマさんからみて、unixのソースコードってどうなんでしょう?
インターフェース関係ぐらいしか読んでないのでわかりませんが、
やっぱりプロはすごい。
0213デフォルトの名無しさんNGNG
#include <stdio.h>

main ()
{
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

if(res == 1)
ans = 'A';
else
ans = 'B';

printf("%cコースを選択しました。\n",res);

return 0;
}


って本に書いてたんでコンパイルしようとしたら
ansに代入した値は使われていない。
と表示されてコンパイルできません。
なんででしょうか?
0214デフォルトの名無しさんNGNG
printf("%cコースを選択しました。\n",res);
 ↓
printf("%cコースを選択しました。\n",ans);
0215213NGNG
>>214
ありがとうございます。
できました。
これで先に進めます。
0216215NGNG
すいません。
次のsampleもできません。
内容は
#include <stdio.h>

main ()
[
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

ans = (res==1) ? 'A' : 'B';

printf("%cコースを選択しました。\n",ans);

return 0;
}

というのものですがどこが変なんでしょうか?
0217デフォルトの名無しさんNGNG
>>216
main()の直後の [ を { へ。
0218216NGNG
>>217
コンパイルできました。
こんな質問にも答えてくれてありがとうございます。
0219デフォルトの名無しさんNGNG
目の前にあるバグが見えるか見えないかは経験の問題だからな
0220196NGNG
>>211
禿しくありがとう!!
試してみまつ。
0221デフォルトの名無しさんNGNG
�@for(i=0;i<5;i++)
�Afor(i=0;<=5;i++)

�@は0,1,2,3,4と5回
�Aは0,1,2,3,4,5と6回繰り返す
という意味合いでいいんですか?
0222デフォルトの名無しさんNGNG
あげさせてもらいますよ
0223デフォルトの名無しさんNGNG
>>222
氏ね
0224デフォルトの名無しさんNGNG
>>221
それであっている。
0225デフォルトの名無しさんNGNG
�Aは違う
0226デフォルトの名無しさんNGNG
いまくだらんプログラム作っていまして、ビルドしたらエラーが12・・・orz
何回も見直したんですが、原因が見いだせなくて・・・
初歩ですが、どうかよろしくお願いいたします。
/*shm.c*/
#include<stdio.h>
#include<conio.h>

int main(void){
int age;
int seito;
printf("▼はENTERを押してください。\nまた、INPUT[というのが出た場合は、整数値を入力してENTERを押してください\n");
printf("A:ちょっと聞きたいことがあるんだよ。いいかな?.....▼\n");
getch();
printf("A:一応、自分刑事で、極秘の捜査中でね。秘密だよ。お願いがあるんだけど年齢教えてくれないかな?▼\n");
getch();
printf("俺の年齢は......INPUT[");
scanf("%d", &age);
printf("俺の年齢は%dです。", age);
printf("A:ありがとう。%d歳なんだね。ところでMONEY IS LIFEという学校をしているかい?捜査中で必要な情報なんでね。知らないか?▼\n",age);
   getch();
printf("自分がその学校の生徒ということを教える.....YES=1 NO=0.....INPUT[");
scanf("%d", &seito);
0227226NGNG
if(age >= 15){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else if(seito == 1){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else{
printf("A:いろいろ教えてくれてありがとう。じゃぁマタね。▼\n");
}
getch();
printf("こういう奴には気をつけよう▼!\n");
  getch();
printf("おわり。▼\n");
return 0;
}
0228221NGNG
ほかのスレで聞いてきます
0229デフォルトの名無しさんNGNG
カワイソウナショウネン…
0230デフォルトの名無しさんNGNG
>>225
違うかのか?
0231デフォルトの名無しさんNGNG
>>230
とりあえずコンパイルできなかった
0232デフォルトの名無しさんNGNG
>>231
すいませんでした。
0233デフォルトの名無しさんNGNG
goto文って飛べるの関数内だけだけでしたっけ?
その場合にかなり深い位置にある関数内からmainのある位置に戻すいい方法ってありますか?
0234デフォルトの名無しさんNGNG
>>233
setjmp,longjmp
0235デフォルトの名無しさんNGNG
>>233
gotoは関数内のみ。 もっと飛ぶならlongjmp。
0236デフォルトの名無しさんNGNG
>>233
setjmp と longjmp でいけます。
0237233NGNG
>>234-236
ありがとうございます
0238デフォルトの名無しさんNGNG
>>226 はスルーなのか・・・
「人工無能」でぐぐってくれ
0239デフォルトの名無しさんNGNG
   getch();
0240デフォルトの名無しさんNGNG
再確認。

  こ こ は ス レ タ イ ト ル を ミ ス っ た C ♯ ス レ で す にょ
0241デフォルトの名無しさんNGNG
0242デフォルトの名無しさんNGNG
UnixとWindows両方で使えるCのZip操作ライブラリが欲しいんですが、どんなのがありますか?
zipという単語が一般的過ぎてぐぐってもノイズばかり…
0243デフォルトの名無しさんNGNG
重複スレ

= = = = = = = = = = = 終 了 = = = = = = = = = = =
0244デフォルトの名無しさんNGNG
じゃあ本スレってどこ?
0245デフォルトの名無しさんNGNG
>>244
http://pc5.2ch.net/test/read.cgi/tech/1104114259/
0246デフォルトの名無しさんNGNG
>>242
zlibでいいんじゃないの? Windows端末でもCygwin使えば使えるし。
0247デフォルトの名無しさんNGNG
とりあえずexeファイル作りたいんですが
どうすればいいんですか。
0248デフォルトの名無しさんNGNG
>247
解決
0249247NGNG
>>248
ありがとうございます。
それを使ってみます。
0250デフォルトの名無しさん05/02/03 00:21:32
マルチメディアタイマを使って、8Hz(125ms周期)にある関数を起動させたいのですが、
方法(できればコード)を教えて下さい。
0251デフォルトの名無しさん05/02/03 00:42:03
while(1){foo();sleep(125);}
0252デフォルトの名無しさん05/02/03 02:59:07
>>251
煽りはいいけど、マルチメディアタイマ使ってないですね。
0253デフォルトの名無しさん05/02/03 03:30:26
>>252
悔しい?w
0254デフォルトの名無しさん05/02/03 06:23:35
1次元配列と2次元配列でたとえば
int a[6],b[2][3]を確保して
a[0]とb[0][0]、a[1]とb[0][1]、a[2]とb[0][2]、
a[3]とb[1][0]、a[4]とb[1][1]、a[5]とb[1][2]が
それぞれ同じアドレスを参照してa[0]を変えたらb[0][0]も一緒に中身が変わるようにしたいんだけど

#include <stdio.h>
void main(void)
{
int *a[2];
int b[6];

a[0]=&b[0];
a[1]=&b[3];
}

って書き方でいいかな?
なんか問題ある気がするんだけど他にいい方法ないかな?
あとポインタにするのは2次元配列のほうにしてほしいのよ
025525405/02/03 06:30:01
ここC#スレだったのか
スレ違いスマソ
他スレ行ってきます
0256デフォルトの名無しさん05/02/03 14:03:04
【質問】 VC++でdouble型の数字を小数点以下を切り捨ててCString型に変換するにはどうすればいいか?

CString strAAA;
double dBBB;

dBBB = (double)50.0;
strAAA.Format(_T("%f"), dBBB);

とすると、strAAAには"50.00000"
という文字列が入りますが、
strAAAには"50"という文字列を入れたいのです。
どうすればいいのでしょうか?
0257デフォルトの名無しさん05/02/03 14:10:26
>>256
%gにしろ
0258デフォルトの名無しさん05/02/03 14:17:48
>>257
サンクス。
MSDNライブラリで
%d や %f
に関する説明ページが見つからなかったもので。
0259デフォルトの名無しさん05/02/03 15:05:03
>>258
探し方が悪い。
CString::Format()の説明からリンクを二回手繰れば書いてある。
0260デフォルトの名無しさん05/02/03 15:19:09
っていうか、それ以前に、幼児期の直感教育がしっかりなされていない。
書式がprintfと同じではないかとどうして想像できなかったんだろう。
想像していたら%gを試していたはずだ。
知らなかったとしてもprintfの書式で調べていたはずだ。
0261デフォルトの名無しさん05/02/03 16:18:18
【追加質問】 double型の数字を7桁にすると ***e+006となってしまうのを、7桁の文字列にしたい。

CString strAAA;
CString strBBB;
double dCCC;
double dDDD;

dCCC = (double)1234567;
dDDD = (double)123456;
strAAA.Format(_T("%g"), dCCC);
strBBB.Format(_T("%g"), dDDD);

とするとstrAAAには"123456"という文字列が入りますが
strBBBには"1.23457e+006"という文字列が入ってしまいます。
strBBBに"1234567"という文字列を入れたい場合はどうすればいいのでしょうか?
最高10桁までちゃんと入るようにしたいんです。
0262デフォルトの名無しさん05/02/03 16:28:41
多倍長浮動小数点演算ライブラリ使えよ
0263デフォルトの名無しさん05/02/03 16:45:28
>>261
%.7g
7の部分は精度。
0264デフォルトの名無しさん05/02/03 16:46:59
10桁までなら%.10g
0265デフォルトの名無しさん05/02/03 16:49:45
>>263
>>264
デキターありがとう!

>>262
よくわかりません。
0266デフォルトの名無しさん05/02/03 16:50:59
>>259
>>260

しんでしまえ
0267デフォルトの名無しさん05/02/03 16:55:03
>>266
>>259=>>260=>>263=>>264なんだがね。
026825905/02/03 19:08:08
違うよ。
0269259=26805/02/03 19:09:08
つーか、260,263,264は私じゃない。
0270デフォルトの名無しさん05/02/03 20:03:35
http://pc5.2ch.net/test/read.cgi/tech/1106490240/247n-

此処で訊いたら、こう言われましたが、何故かC言語の教本のサンプルはは
#include <stdio.h>

main() {
printf("Hello!");
return 0;
}

の様に空白欄が在るのに、自分が書いたのに空白欄を作ると
何故か上記のアドレスに出た、エラーが出てしまいます
調べても、本にも書いていませんでした、ご教授お願い致します。
0271デフォルトの名無しさん05/02/03 20:09:55
あれ・・・?空白欄がない。
メモ帳で見るとあるんです。
0272デフォルトの名無しさん05/02/03 20:28:27
ネタかなあ・・

ヒント:全角スペース
0273デフォルトの名無しさん05/02/03 20:29:44
>>270
もしかすると、君は全角スペースを入れているのでないだろうか。
使っても良いのは半角スペースとアルファベット、半角の記号のみ。
0274デフォルトの名無しさん05/02/03 20:32:56
ま、全角スペースを解釈しないコンパイラが悪いんだな。
うんうん。
0275デフォルトの名無しさん05/02/03 20:33:39
それは言えてる。
0276デフォルトの名無しさん05/02/03 20:34:03
ありがとうございました
要は空欄を空けてもいいけど、半角を使えと言う事でしょうか?
0277デフォルトの名無しさん05/02/03 20:35:38
だめだこいつ
全然わかってない・・
0278デフォルトの名無しさん05/02/03 20:40:51
すみません・・・
簡単に言えば、空欄(スペース)は空けない方がいいですよね?
0279デフォルトの名無しさん05/02/03 20:43:28
ブラウン運動を非整数階微積分するプログラムを作成したのですが、上手く動きません。どこがわるいのでしょうか??
実行結果は数値を出し、エクセルでグラフ化しています。(window.hが使えないため)
#include <stdio.h>  #include <stdlib.h>
#include <time.h>  #include <math.h>
#define KMAX 100  #define XMAX 300
#define PI 3.14159265358979323846
double gar()
{double r = 0.0;
int i;
for(i = 0; i < 10; i++){r += ((double)rand() / RAND_MAX) - 0.5;}
return r;}
int main(void)
{int x, k;     float d; scanf("%f",&d);
double ek = PI * 2.0 * 0.7 / XMAX; double a = 5.0 – 2*d;
double f[XMAX];  double g[KMAX];
srand((unsigned)time(NULL));
for(k = 1; k < KMAX; k++){
g[k]=pow(( ek * rk ),-a/2);}
for(x = 0; x < XMAX; x++){  f[x] = 0.0;
for(k = 1; k < KMAX; k++){  double kx = ek * rk * x;
f[x] = f[x]+g[k]*(gar() * cos(kx) - gai() * sin(kx));}
printf("%g\n",f[x]);}
}
0280デフォルトの名無しさん05/02/03 20:51:47
>>278
先頭に付けてもいいのは半角スペースとTABのみ。
スペースを空けるのは括弧同士の対応や意味的な違いを付けるためで、それをインデント
を付けるといいます。
これをしないとプログラムが見憎くなります。
的確にスペースを空けてください。
0281デフォルトの名無しさん05/02/03 20:54:30
>>280
ありがとうございます!!
とりあえず、半角でスペースを空けたら、何の問題もなく
実行できました。
たぶん、全角だったのでエラー出たみたいでした。
0282ななし05/02/03 22:14:53
どなたかC言語でHTTPリクエストを送信できるようなライブラリを
ご存知のかたいらっしゃいませんか?
ヘッダーを意識しなくてすむような形のもので!
0283デフォルトの名無しさん05/02/04 00:40:29
WinInet
0284デフォルトの名無しさん05/02/06 23:45:27
質問です。
以下の環境で、外部バイナリ(画像)ファイルを実行ファイルにリンクしたいのです。
何かスマートな方法はあるのでしょうか?

開発環境OS : FreeBSD 5.3
コンパイラ : gcc 2.95.4

調べたこと :
binutils の objcopy でオブジェクトファイルに変換n出来るかなと
ドキュメントを流し読みしましたが、出来そうにありません。

以上、よろしくお願いします。
0285デフォルトの名無しさん05/02/09 12:50:59
Labeling.c1: "#include" expect "FILENAME"or<FILENAME>

このエラーを回避する方法わかる方いますか?よろしくお願いします
028628505/02/09 13:00:42
すみません。なんか初歩的入力ミス見たいです
0287デフォルトの名無しさん05/02/09 13:14:18
ウインドウズプログラミングで仮想キーコードを使って
数字を表示したいのですが、0が表示できません。
keybd_event(VK_NUMPAD0,0,0,0);
keybd_event(VK_NUMPAD0, 0, KEYEVENTF_KEYUP, 0);
文法的に誤りがあるのでしょうか?
わかる方いましたら、お願いします。
0288デフォルトの名無しさん05/02/09 13:36:43
誰かFTPサーバのソースプログラム教えてくれない?
今すぐ欲しいから誰かお願いします。Cの初心者なんで、そ
んなの簡単だよって思うかもしれませんが、どうかC言語
できる人よろしくお願いします。
0289デフォルトの名無しさん05/02/09 13:41:16
Linuxのソースがあるべ、バカだな
0290デフォルトの名無しさん05/02/09 13:51:38
おい!そいつは初心者だぞ。Linuxのソースの見れる方法も
ついでに教えてやれ。たぶんわかっとらんと思うぞ。
0291デフォルトの名無しさん05/02/09 13:55:53
おっしゃるとおりです・・・。教えていただけます?
0292デフォルトの名無しさん05/02/09 13:56:22
嫌だね、プ
0293デフォルトの名無しさん05/02/09 14:03:09
RFC FTPでぐぐれば仕様書が出てくるからそれで作るのもいいかも
0294デフォルトの名無しさん05/02/09 14:12:10
>>287
VK_NUMPAD0の代わりに'0'にしてみたらどう?
0295デフォルトの名無しさん05/02/09 14:22:03
あのー・・・いまいちよくわかりません・・・。どなたかサンプルプログラム
書けるひといます?もしよかったらここに表示していただけたらと思い
ます。それをそのまま打ち込んでいくんで・・・。
0296デフォルトの名無しさん05/02/09 14:26:11
ポート20をリッスン、認証できたら、ポート20のコマンドどうりに
ポート21でデータ転送。以上
0297デフォルトの名無しさん05/02/09 15:11:36
私はCommonArchiverProjectのftp.dllを参考にしたことがあるなぁ。
バグがあって笑えたけど。
0298デフォルトの名無しさん05/02/09 15:13:55
わらってはいけない。只で提供してるんだから。
金取ってるやつには罵詈雑言OK
0299デフォルトの名無しさん05/02/09 15:16:10
いやぁ、使ってる人いないんだろうなぁと。<笑えた
尤も、作者に指摘メール送ったが黙殺されたので、本当のところは知らん。
0300デフォルトの名無しさん05/02/09 17:03:27
#include <stdio.h>

void main(void)
{
int i;
char a[5];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%c",&a[i]);
}
printf("%c,%c,%c,%c,%c\n",a[1],a[2],a[3],a[4],a[5]);
}

非常に簡単な質問で申し訳ないのですが…
このプログラムを実行するとforのi=2,i=4のときのscanfが飛ばされてしまいます。
その後の結果表示も何かおかしいのです。

自分なりに調べてはみましたが、一体何が悪いのかがわかりません。
コンパイラはBorland C++ Compiler 5.5を使っています。
0301デフォルトの名無しさん05/02/09 17:06:20
改行コードもsacanfだな
0302デフォルトの名無しさん05/02/09 17:37:54
void main(void)
{
int i;
char a[5]; // ←範囲は、0〜4までで 5個
char b[1024];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%s",&b); // バッファーフォローの危険性があり、実務だと駄目!
a[i] = b[0];
}
printf("%c,%c,%c,%c,%c\n",a[0],a[1],a[2],a[3],a[4]);
}

こんな感じだけど、入力は別関数を作ってね!
0303デフォルトの名無しさん05/02/09 17:48:30
ださ
0304デフォルトの名無しさん05/02/09 18:10:25
>>302
突っ込みどころ満載だな。
・バッファオーバフローの心配するなら指定子で制限しろ。
・配列のアドレスを渡すな。
・バッファーフォローなんて俺語を作るな。
・main()の戻り値を勝手にvoidにするな。
0305デフォルトの名無しさん05/02/09 18:43:32
>>300
最後のprintfところでa[1]~a[5]になってるとこをa[0]~a[4]になおして、
それから一回目の入力で入れたい数字を全部連続でいれてみ?2468って感じで
最後の出力だけはきれいにでるとおもうよw
0306デフォルトの名無しさん05/02/09 21:05:07
>>304
で、模範解答は?
文字列の読み込みって、簡単なようで難しいんだよね。

scanf を使って・・・・
030730005/02/09 21:22:25
300です。
皆さんレスありがとうございます。

あれからも考えてみましたが、やっぱりわかりませんでした。
aの配列というのが不味いのかと思って、a,b,c,d,eと定義してみましたが、これもまた同じ結果になってしまいます。
もうあきらめた方がいいんでしょうか。
バグの原因がわからないと、また再発させそうで非常に気になるんですが…
0308デフォルトの名無しさん05/02/09 22:31:28
scanf使うのが悪い
fgetsしてsscanf使え
0309デフォルトの名無しさん05/02/09 22:35:34
>>300
まず1文字目を入力した後、Enterを打つだろ。
そのEnterもscanfの%cで入力されているのだろう。
と、俺は予想した。
#include <stdio.h>
int main(void)
{
    int i;
    char a[5];
    for (i = 0; i < sizeof a; i++)
        scanf("%c%*[^\n]%*c", &a[i]);
        //%*[^\n]は'\n'が出るまで読み飛ばす指定
        //%*cは1文字読み飛ばし('\n'まで読み飛ばしたので当然'\n'を読み飛ばす事になる)
    printf("%c, %c, %c, %c, %c\n", a[0], a[1], a[2], a[3], a[4]);
    return 0;
}
0310デフォルトの名無しさん05/02/09 22:41:35
>>300
301さんが解答ですよ。

  scanf("%c",&a[i]);

で一文字読み込んだとき、まだ標準入力のバッファには改行文字が残っているのです。
それが自動的に偶数回のscanf(...)の入力となっています。

  scanf("%c",&a[i]);
  fflush(stdin);

として標準入力のバッファをクリアしてあげれば、一文字ずつ入力できます。
0311デフォルトの名無しさん05/02/09 22:47:26
>>310
fflushは出力バッファのフラッシュ用なんで残念!
stdinに対しては未定義り!
0312デフォルトの名無しさん05/02/09 22:49:21
>>301-310
皆さんどうもありがとうございました。
おかげで解決しました。

0313デフォルトの名無しさん05/02/09 22:53:31
#include <stdio.h>
#include <stdlib.h>

int GetStdinToInt()
{
  char buf[256];
  int result;
  char* check;

  while(1){
    fgets(buf, 255, stdin);
    result = (int)strtol(buf, &check, 0);
    if(check != buf) break;
    printf("もう一度入力してください:");
  }

  return result;
}
031431005/02/09 22:55:12
>>311
そのようですね。今調べて認識しました。

http://www9.plala.or.jp/sgwr-t/lib/fflush.html

今回の解答は

http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4

に書いてありました。
031530205/02/09 23:02:16
>scanf("%s",&b);
scanf("%s",b); ←訂正すんまそ

最近、JavaとVBしかやってないから・・・・ (ーー
031631005/02/09 23:08:39
>>300

fflush(stdin)

のかわりに、

fseek(stdin, 0, SEEK_SET);

が動作保証されています。

でも、今回の場合は314で2番目のURLに書いてあることが一番いいかも。
031731005/02/09 23:11:50
失礼
fseek(stdin, 0L, SEEK_SET);
でした。
0318デフォルトの名無しさん05/02/09 23:35:32
simpson法の中で関数を呼び出してその中で積分の計算を行うプログラムを作っています。
しかし、計算速度がものすごく遅いんですがなにかいい方法ありませんか?
0319デフォルトの名無しさん05/02/09 23:37:51
で、今の計算機は?
0320デフォルトの名無しさん05/02/09 23:50:30
>>318
難しいことやってるんだね、学生さん。
おいらにはよく分からないけど...。

http://www.mech.tohoku-gakuin.ac.jp/nken/java/new2/simpson.html
にjavaだけれどコードがのってますよ。
良かったら参考にしてみたら。
0321デフォルトの名無しさん05/02/09 23:57:32
>>320
thx
SSEつかって高速化図ってみます、、
0322デフォルトの名無しさん05/02/11 00:36:27
C言語のバージョン教えてと言われた。
どうやって知ればいいんだろうか。
0323デフォルトの名無しさん05/02/11 00:41:21
sにcharを足すstrcatってないの?
0324デフォルトの名無しさん05/02/11 00:42:42
>>322
http://seclan.dll.jp/c99d/c99d02.htm#dt19990412
の__STDC_VERSION__
0325デフォルトの名無しさん05/02/11 01:14:37
>>323
ありませんよ。

Cで一般的に言われる文字列というものは、最後がヌル文字'\0'で終わることを前提
としています。提供されるシステム関数strcat()などもそうです。
一文字のcharはそういった関数で使用することはできません。

char dest[100];
char src1[] = "abc";
char src2 = 'x';
int len;

len = strlen(strcpy(dest, src1));
dest[len] = src2;
dest[len + 1] = '\0';

こんな感じですかね。もっとアクロバット的な方法もあるんでしょうが...。
0326デフォルトの名無しさん05/02/11 01:49:10
int n = c;
strcat(s, &n);
0327デフォルトの名無しさん05/02/11 02:14:49
>>326
関数内の自動変数の場合、
int n
の場合、cを代入した次のバイトがNULLである保証はありませんよ。
0328デフォルトの名無しさん05/02/11 02:16:47
補足。
CPUのアーキテクチャによって異なります。
言語としてそういったことに依存すべきではないと言いたかったのです。
0329デフォルトの名無しさん05/02/11 02:50:54
>>327
ん? cは1バイトだから他の3バイトは当然0になるでしょう。 しかしこれは
endianによっては右に詰まってだめだと思うので >>328は正しいと
思うけど。

ちなみにこんなのはどう?
sprintf(s, "%s%c", s, c);
0330デフォルトの名無しさん05/02/11 06:51:06
>>329
未定義

>>326
char s2[] = {c, '\0'};
strcat(s, s2);でいいじゃん。

C99ならstrcat(s, (char []){c, '\0'});って書ける筈だけど。
0331デフォルトの名無しさん05/02/11 10:17:54
私はこんな幹事かな。
sprintf(strchr(str, '\0'), "%c", ch);
或いはこう。
char * p = str + strlen(str);
p[0] = ch;
p[1] = '\0';
0332デフォルトの名無しさん05/02/27 16:56:10
すみません、妙な質問で恐縮ですが、どなたか教えてください。

sprintf() の s ってどういう意味ですか?f は format の意味だと思うのですが。
0333デフォルトの名無しさん05/02/27 16:59:08
stringじゃない?
0334デフォルトの名無しさん05/02/27 17:01:38
sはsecond。fはfirst
0335デフォルトの名無しさん05/02/27 18:04:22
string ですか。ありがとうございました。
scond ですか(ry
0336デフォルトの名無しさん05/02/28 12:51:53
>>332
printf()「系」とかssanf()「系」とか言う言葉があるよ。
先頭の's'はstring、'f'は自分でオープンしたファイル、付かないものは対象がstdinか
stdout。結構系統立てられているんですよ。
033733605/02/28 12:53:07
メンゴです。
一行目のssanf()はscanf()でした。
0338デフォルトの名無しさん05/02/28 14:16:48
>>336
さらにva_listを引数に取るvprintf/vscanfも有る。当然fとsも有る。
vscanf系はC99で追加されたものだけど。
0339デフォルトの名無しさん05/02/28 18:51:54
springfというのもある
0340デフォルトの名無しさん05/02/28 22:45:28
さらに最新最強はsnprintf。 渡したchar *のサイズを2つ目の引数で指定でき、
そのサイズを超えて書かないことが保障されているのでやや安全。
0341デフォルトの名無しさん05/03/02 16:40:40
アドレスに関する質問。
型は不明で、要素一つのサイズは分かってる場合。

次の要素にアクセスする方法を教えて下さい。
または次の要素へのアドレスを取得する方法。
034234205/03/02 16:42:50
サイズがBYTEだってことに気づかなかった....。
解決しました。
0343デフォルトの名無しさん05/03/09 14:33:38
POINT point[3] = { {0,0} , {1,0} , {0,1} };
っていう初期化はできるんですが

point[3] = { {0,0} , {1,0} , {0,1} }
という風に値を入れることが出来ません
配列全体に値を入れる方法は無いんですか?
0344デフォルトの名無しさん05/03/09 16:00:29
>>343
配列に代入はできません。
精々コピー用の関数を用意するのが関の山です。
要素数が3で固定ならば、構造体にしてしまえば(直値ではありませんが)代入できなくもありません。
0345デフォルトの名無しさん05/03/09 16:10:27
>344
関数でもつくってそれで入力するようにします
ありがとうございました。
0346デフォルトの名無しさん05/03/10 00:43:33
Cって、こういうとこアフォだよなあ
0347デフォルトの名無しさん05/03/10 19:02:05
やっぱりRubyがいいね
0348デフォルトの名無しさん05/03/13 17:13:30
cでコンパイルする際に

windres: can't open `obj/EK-MAMEko/ui/mame32k.res' No such for directory
make: *** [obj/EK-MAMEko/ui/mame32.res] Error 1

こういうエラーが出て困ってるんだけど
これってどういう意味かわかる?
0349デフォルトの名無しさん05/03/13 17:14:00
age
0350デフォルトの名無しさん05/03/13 18:48:41
>>347
いや、Rubyは問題外。
0351デフォルトの名無しさん05/03/17 00:52:33
変数を入れ替えるときに別の変数を用意せず、

X = X ^ Y, Y = X ^ Y, X = X ^ Y;

とするのがよくないのはなぜ?
0352デフォルトの名無しさん05/03/17 00:56:22
>>351
数値以外には使えない
XとYが同じ変数を指していると上手くいかない
035335105/03/17 01:17:15
>>352
なるほど。
これをプリプロッセスでやって構造体なんかを渡しちゃうとマズーだ。
アリガト。
0354デフォルトの名無しさん2005/03/22(火) 21:55:06
new演算子で作ったオブジェクトをdeleteした後に
デストラクタでdeleteすると何か問題ありますか?
0355デフォルトの名無しさん2005/03/22(火) 23:09:33
mallocで確保した領域をfreeで開放しますが、
システムはどのようにして、はじめに確保した領域を知ることができるのでしょうか。
0356デフォルトの名無しさん2005/03/23(水) 01:23:39
>>354
deleteしたら、0を入れておけば大丈夫。

>>355
malloc()で戻されたポインタの指すメモリの直前辺りに管理情報を埋めておくのが一般的。
0357デフォルトの名無しさん2005/04/03(日) 14:07:55
配列同士の数値の比較をしたいのですが、下記のようだとうまくいきません。
どのようにすればよいのでしょうか?
for(i=0;i<5;i++)
for(j=0; j<5; j++)
if(group[i] == group[j] && i != j) count[i]++;
0358デフォルトの名無しさん2005/04/03(日) 15:10:03
>>357
j = i
0359デフォルトの名無しさん2005/04/03(日) 15:22:36
>>357
配列の同じインデックスを持つ要素同士を比較したいのであれば、単純な(一重の)ループでいい。
つーか、>357では日本語の説明が足りんし、コードがおかしいし、何がしたいのか判らんのだが。
0360デフォルトの名無しさん2005/04/04(月) 00:24:27
すみません。初歩的な質問をさせていただきます。

char *func1(){
 return "a";
}

char *func2(){
 char *s = "a";
 return s;
}

こんな2つの関数があったとして、これらが関数の呼び出し元に返ってきた際に
戻り値のポインタが正しい場所を指し示すことはどこまで(いつまで)保障できるんでしょうか?
func1は保障できる、func2はできる、それとも両方できない/できる、どこまでなのか…等。
また、私の勉強不足のせいで、両者のメモリ上での違いがいまいちはっきりしてません。

一応どちらでも動作するにはするんですが、いつか不正な参照とかで
落ちちゃうんじゃないかと気になって怖くて夜も眠れません。

参考になるサイトを教えていただけるだけでも結構ですのでよろしくお願いします。
0361デフォルトの名無しさん2005/04/04(月) 01:05:29
規格ではどうか忘れたけど、たいがいいけるはず。
どうしても心配ならstatic const char ret_str[] = "a";とかすれば?
あとchar *じゃなくてconst char *を使え。
0362デフォルトの名無しさん2005/04/04(月) 01:08:07
>>360
定数(リテラル)の寿命はプログラムの開始から終了まで。
関数内で宣言されたauto変数の寿命は、関数の開始から終了まで。

char *func1(){
 return "a"; /* "a" を指すポインタを返している */
}
char *func2(){
 char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */
 return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */
}

つまり、どっちも同じ。
リテラルはいつでもどこからでも参照出来るので、戻り値を使ってても大丈夫。
03633602005/04/04(月) 02:05:28
>>361-362
ありがとうございます!だいぶスッキリしました。
リテラルに関しては参照先が不正な値になるんじゃないかとかいう
心配は無用なわけですね。逆の場合(変数、関数のポインタ)は気をつけろと。

すみません。あとここからもう一段階お願いします。
実は言うと今、Unix系ソフトの移植作業をやってまして
こいつらと同等の動作をするものを作りました。

char *dirname(char *path);
char *basename(char *path);

basename()はパス名からディレクトリを除いた部分(ファイル名)を返せばいいので
引数のポインタをそのまま使い回してreturn path+pos;のようにして返してます。

dirname()の方は引数で与えられたパス名からファイル名を除いたものを返すものなので、
関数内でdir[MAX_PATH]のように宣言した配列に、引数の文字列からファイル名部分を
除いたものをstrncpyでコピーなどして、最後にdir(先頭アドレス)を戻り値にしてます。
(ちなみにさっきの質問は"."「カレントディレクトリ」を返す場合でした。)

長すぎるのでまとめると、
・basename()の戻り値は呼び出し先のローカル変数とは無関係である。
・dirname()の戻り値は呼び出し先のローカル変数に依存している。

この場合だと、dirで確保していたアドレスは戻り先で参照しても安全なのでしょうか?
ちゃんと動くし、自分でも大丈夫だと思ってたのに警告が出たので不安になりました。

やたら長くてすみません。何かこれより良い実装方法がもしあればご教授願います。
03643602005/04/04(月) 02:14:47
何度もすみません。つまりさっき私が言ったdirname()の実装は

char *func2(){
 char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */
 return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */
}

この場合と同じと考えていいんでしょうか?ってことですね。
私の目には全く同じものに映るのですが、間違いありませんでしょうか。
0365デフォルトの名無しさん2005/04/04(月) 02:15:23
floatがもてる最大値はどのように調べればよいのでしょうか?
0366デフォルトの名無しさん2005/04/04(月) 02:30:48
>>363-364
const char *func3(void){
const char s[] = "a";
return s; /* ローカルな配列 s へのポインタを返す */
}

const char *p;
p = func(); /* 0, func() の s へのポインタを受け取る */
printf("%p\n", p); /* 1, これは構わない */
printf("%s\n", p); /* 2, これは駄目 */

0 は何ら構わない。戻ってきたアドレスをコピーしているだけ。
1 も何ら構わない。コピーしたアドレスを表示しているだけ。

2 は駄目。アドレスの先を参照してしまっているから。
何故参照してはいけなかというと、アドレスの先にある func3() の s の寿命は、
func3() を抜けた時点で既に尽きてしまっているから。

func2(), func3() は全然違う関数。
0367デフォルトの名無しさん2005/04/04(月) 02:35:17
>>365
float.h にある FLT_MAX マクロで定義されてる。

#include <stdio.h>
#include <float.h>
int main(void)
{
 printf("%f\n", FLT_MAX);
 return 0;
}
0368デフォルトの名無しさん2005/04/04(月) 02:50:42
>364
ダメ。変数の寿命について学んでください。

1.関数の引数を変える。
void dirname(char *dest,int dest_size,const char *path)

2.静的に保持する。使用に若干注意が加わる
static char dir[]

3.動的に確保する。呼び出し側に解放義務が発生する
char *dir = malloc()
0369デフォルトの名無しさん2005/04/04(月) 03:05:49
>>367
thx
limit.hしか知らなかった
03703602005/04/04(月) 03:13:01
そのまま貼っちゃいます。今はこんな状態です。

char* dirname(char* path)
{
  int pos = strlen(path)-1;
  int lastPathSepFoundPos = -1;
  static dir[MAX_PATH]="";
  while(pos >= 0) {
    if (path[pos] == '/' || path[pos] == '\\') {
      lastPathSepFoundPos = pos;
      break;
    }
    else pos--;
  }
  if (lastPathSepFoundPos == -1) return "."; // current dir
  else{
    strncpy(dir,path,lastPathSepFoundPos);
    dir[lastPathSepFoundPos] = 0;
    return dir;
  }
}

static dir[MAX_PATH]="";をchar dir[MAX_PATH]にすると
→警告「ローカル変数またはテンポラリのアドレスを返します」
となってました。今考えてみれば当然ですよね。。

>>368
どうもです。ちょうど昨日、その2を回避策としてやってみてたとこでした。
その注意というのは関数へのアクセスが同時に起こるような場合でしょうか?

条件コンパイル(#ifdef-#endif)等が面倒になりそうですが、
1の方法が一番簡単そうなので、その方向でやってみることにします。
0371デフォルトの名無しさん2005/04/04(月) 03:14:54
↑static char dir[MAX_PATH]="";の間違いです。
0372デフォルトの名無しさん2005/04/04(月) 12:12:39
strrchr 使えば簡単にみえるな・・・
0373デフォルトの名無しさん2005/04/04(月) 16:49:40
すみません最近C++触ったばかしですみませんが

class auのコントラクタ関数
au(string s) : enr(s) {}について
文字列をsに代入し enrを生成する時にsを代入すると読めるのですが
なぜ au(string s) { enr(s); }とできないんですか?

個人的に関数内容 { }内 は動作命令のみの記述と解釈すれば
au(string s) { enr = s; }
はenr = s;という動作命令であるから適応であるが
{ enr(s); }・・・であるから不適と思ってしまうのですが・・

書いててよくわからなくなってきた・・
au (string s) : enr(s) {}について
なぜ : で区切るのかと enr(s)はなぜ{}内に記述してはいけないのかについて詳しくお願いします
0374デフォルトの名無しさん2005/04/04(月) 17:09:15
>>373
:の後は初期化。{}の中だとメンバ変数への代入になってしまう。

例えば、
class foo {
const int bar;
foo() : bar(0) {}
};
とした場合、この例のように初期化はできるが、
class foo {
const int bar;
foo() {bar = 0;}
};
このような代入はできない。
0375デフォルトの名無しさん2005/04/04(月) 17:33:16
>>374
全て解決できました。
どうもありがとです
0376デフォルトの名無しさん2005/04/19(火) 19:50:11
共用体ってどういうときに使うんですか?
また利点とかあるんですか?
0377デフォルトの名無しさん2005/04/20(水) 00:05:37
すみません。教えてください。
下記のようなプログラムを書くと、結果に必ず0.0が混ざってしまい、困っています。
乱数を3つ表示させたいのですが、0.0を含まないようにするにはどうしたらよいのでしょうか?

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define N 3
int main(void)
{ int i,j=0,check;
double data[N],dia[N],tmp;
srand((unsigned)time(NULL));
printf("\n乱数のつもり:\n");
for (i=1; i<=N; i++)
{data[i]=rand()%100+(double)rand()/32768.0;}
/* 並替えの計算 */
for (i = 1; i < N - 1; i++)
for (j = i + 1; j < N; j++)
if (data[j] < data[i]) /* <: 昇順, >: 降順 */
{ tmp = data[i];
data[i] = data[j];
data[j] = tmp;};
for (i = 0; i < N; i++)
printf("%.1f ", data[i]); /*並替えデータの表示*/
}
0378デフォルトの名無しさん2005/04/20(水) 00:47:24
>>376

それくらい調べろよ。
0379デフォルトの名無しさん2005/04/20(水) 01:25:42
>>376
メモリの節約
同じメモリブロックを複数の型として解釈したい時
0380デフォルトの名無しさん2005/04/20(水) 11:52:18
>>377
取り敢えず落ち着け。
深呼吸でもした後、data[] の添え字の範囲が
0〜N-1 だと言うことを思い出せ。
0381デフォルトの名無しさん2005/04/20(水) 13:25:48
>>376
通信などで、整数型や実数型をバイト列と相互変換したい場合、
ポートアクセスなどでビットフィールドとバイト列を相互変換したい場合などに使う。
メリットは、他の方法に較べて簡便に書けること。
デメリットとしてよく言われる非互換性については、元々汎用的でないコードを書く場合には無視できる。
#勿論、それ相応のコメントは必要。
0382デフォルトの名無しさん2005/04/23(土) 00:09:57
C、C++ある程度覚えるまで、どのくらい掛かった?今から、勉強しようと思うのですが、C→C++→C#か、Javaって感じに逝こうかと思うのですが、C++から移行した人、する人は、C#か、Javaどっち盗ります?←煮たスレあるけどノリで…ゴメソ
0383デフォルトの名無しさん2005/04/23(土) 00:19:39
>>382
無意味なアンケートするな。
0384デフォルトの名無しさん2005/04/23(土) 10:31:57
無意味っていいよね。
まぁ答えてやんなよ。発想の無い、IT土方プログラマーの行く末までを……ハァー 
0385デフォルトの名無しさん2005/04/23(土) 12:04:48
なんでこう勉強する前にウダウダ人に聞くやつが多いんだろう
0386デフォルトの名無しさん2005/04/23(土) 12:20:20
>何でこう勉強する前にウダウダ人にきく奴が、多いのだろう 
って、自分も聞いてるじゃんWWW プギャー、と云ってみたくなる。まあ、オイラは聞かなかった、お陰でプログラマーなんかになってしまった訳だが…ハァー
0387デフォルトの名無しさん2005/04/23(土) 12:23:43
ageんなやボケがあああああ、と自分に云ってみるテst
すまんです
0388デフォルトの名無しさん2005/04/26(火) 11:13:11
  ∧_∧
 ( ´∀`) < ぬるぽ
0389デフォルトの名無しさん2005/04/27(水) 10:54:11
1+2+3+・・・+N を計算する関数を作成せよ。
0390デフォルトの名無しさん2005/04/27(水) 11:48:18
>>389
int f(int N){return((1+N)*N/2);}
0391デフォルトの名無しさん2005/04/27(水) 11:57:21
1/2/3/・・・/N を計算する関数を作成せよ。
0392デフォルトの名無しさん2005/04/27(水) 12:05:48
>>391
int f(int N){return0;}
0393デフォルトの名無しさん2005/04/27(水) 12:45:24
>>390
感動した
>>392
ワロタ
0394デフォルトの名無しさん2005/04/28(木) 04:36:53
>>391
double f(int N){double x=1.0;if(N>1)while(N)x*=(double)N--;return 1.0/x;}
03953942005/04/28(木) 04:42:40
あんま変わらんけど、こっちの方が良かったかな…?
double f(int N){double x;for(x=1.0;N>1;N--)x*=(double)N;return 1.0/x;}
0396デフォルトの名無しさん2005/05/04(水) 18:36:51
ttp://ex10.2ch.net/test/read.cgi/news4vip/1115125763/18
↑exitするならfcloseもfreeもしなくていいんだけど
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ってあるんですが、そうなんですか?
ファイルディスクリプタはプログラム終了時に閉じられるとしても
メモリリークっすよねコレ
0397デフォルトの名無しさん2005/05/04(水) 19:00:23
>>28
ガッ
0398デフォルトの名無しさん2005/05/04(水) 19:58:54
>>396
大丈夫。真っ当なOSならアプリケーション終了時にきちんと開放する。
0399デフォルトの名無しさん2005/05/04(水) 20:06:09
>真っ当なOSなら
0400デフォルトの名無しさん2005/05/04(水) 22:08:18
OSが真っ当かどうかに関わらず真っ当な規格合致処理系なら、
exit()を呼んでいなくてもmain()からreturnすればファイルは閉じられる。
main()でのreturnはexit()の呼び出しと等価とも書かれている。(他の関数からmain()を呼んだ場合は別だが)

しかしfree()の方にはそのような記述は見当たらない。
(free()を呼ばないで終了するとどうなるかということは書いていない)
0401デフォルトの名無しさん2005/05/04(水) 22:14:15
>>400
>(free()を呼ばないで終了するとどうなるかということは書いていない)

free() を読んで終了すればどうなるかということも書いていないけどな。
0402デフォルトの名無しさん2005/05/04(水) 22:23:14
またこの話題か
好きにすれ
0403デフォルトの名無しさん2005/05/04(水) 22:31:48
gotoを使うのは不味いのでしょうか?
どなたかおすえてください
0404デフォルトの名無しさん2005/05/04(水) 22:57:09
Cで質問です。
変数nの値が??のとき、filename??という名前のファイルを開きたい
という場合に、fopenの第1引数にはどのように記述すればよいでしょうか?
先にsprintfを使えばできるようですが
直接引数の部分に記述して何とかする方法がないかと思いまして。
0405デフォルトの名無しさん2005/05/04(水) 23:19:00
>>404
char *filename(int n) { static char buf[100]; sprintf(buf, "filename%d", n); return buf; }

fopen(filename(n), ... )

0406デフォルトの名無しさん2005/05/04(水) 23:26:43
>>405
なるほど!その手がありましたか!
おめでとうございます!ありがとうございます!


(ノ´Д`)ノ 彡┻┻
0407デフォルトの名無しさん2005/05/05(木) 19:22:25
次にこんなことをしてハマると見た。
rename( filename(1), filename(2) ); // filename.1 を filename.2 にバックアップ
0408デフォルトの名無しさん2005/05/05(木) 23:19:39
>fopenの第1引数
そもそもパスとか編集しなくていいのか?

素直に
>先にsprintfを使え
0409デフォルトの名無しさん2005/05/05(木) 23:28:04
そこでC++ですよ。
std::string filename(int n) {return "filename" + boost::lexcal_cast<std::string>(n);}
0410デフォルトの名無しさん2005/05/09(月) 09:50:14
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
0411デフォルトの名無しさん2005/05/09(月) 09:51:19
http://p6222ed.kyotac00.ap.so-net.ne.jp/

うはっwwwwwwwwwwwwwww

っうぇwwwwww
っうぇうぇwww
wおkwwwwうはっwww
おkwww

っwwwwww

うぇwww
0412デフォルトの名無しさん2005/05/09(月) 10:07:08
ttp://EAOcf-526p83.ppp15.odn.ne.jp/
おkwwwwwwwwwwwwおkうぇおkwwwwww
うはっwwwwwwwwwwwwwwwwwwwwwwwwwwwww
うはっうはっwwwwwwwwwwwwwww
wwwwwwwwwwwwっっうぇうぇ
うはっ
0413デフォルトの名無しさん2005/05/09(月) 10:14:46
http://pdf791d.tokynt01.ap.so-net.ne.jp/

wwwおkwwwwwwうぇwwwwwwwwwっうぇ
w
おkwwwっうぇうはっwwwwうぇwww

wっうぇうはっwwwwwwwwwwwwwwwwww
0414デフォルトの名無しさん2005/05/10(火) 16:35:01
>>410
ビットシフトしたいときに役に立つ
0415デフォルトの名無しさん2005/05/10(火) 18:01:05
あと、2進数の桁をずらしたいときにも役に立つね。
0416デフォルトの名無しさん2005/05/10(火) 18:29:55
>>410
任意の上位Nビットを取り出したいとかその逆をしたいときとかに。
DWORD dw = 0x12345678;
WORD wHigh = dw >> 16; // 0x1234
WORD wLow = dw & 0xffff // 0x5678
DWORD dw2 = dw << 16 | wLow // 0x12345678
0417デフォルトの名無しさん2005/05/11(水) 18:16:54
<質問>
ピクチャポックに表示した画像をマウスドラッグで範囲選択します。
その選択範囲をマウスのドラッグ中、リアルタイムに枠線で囲みたいのですが
どういう処理が一般的でしょうか?

DrawLineで線を書いたり消したりとかは、おかしいですよね?
0418デフォルトの名無しさん2005/05/11(水) 18:53:11
>>417
>>1-10 を見ろ。
回答が欲しければ Windows 系のスレに行くんだな。
0419デフォルトの名無しさん2005/05/11(水) 20:15:27
XOR
04204172005/05/11(水) 23:15:27
すまそん。
他で聞いてきます・・・。(・・`)
04214172005/05/12(木) 00:23:25
>419
もしかして、私へのヒント?
そうだったら、ありがとうございます。

ビット反転させたらいいのかなー。
とりあえず、C#の過去ログ見てます。
0422デフォルトの名無しさん2005/05/12(木) 10:11:02
int main(void)
{
double i;

for(i=1.0; (int)i<=9; i=i+0.1) {
printf("%d", (int)i);
printf("%lf ", i);
}

return 0;
}
iが5.000000のとき(int)iがなぜ4になるのか分かりません。
小数部を切り捨てて5になると思うのですが。
0423デフォルトの名無しさん2005/05/12(木) 11:35:49
>>422
誤差の累積。誤差について調べられたし。
0424デフォルトの名無しさん2005/05/13(金) 16:14:34
>>417
まさしくそれ向けの関数がMFCにあった気がする。
0425デフォルトの名無しさん2005/05/13(金) 16:21:49
MFCつーか、、、APIであるけど
今はもうXORの時代じゃないのかもなあ
0426デフォルトの名無しさん2005/05/13(金) 16:26:18
いちおー書いておくか
APIなら
DrawForcusRect
MFCだと
CDC::DrawForcusRect

それよりも、CRectTracker クラス使ったほうがいいかも
04274262005/05/13(金) 16:39:17
ってここC#のスレだった・・・
スレタイで半角#使ったのか・・・
0428デフォルトの名無しさん2005/05/14(土) 07:08:29
>>427
気にするな
ごみスレだ
0429デフォルトの名無しさん2005/06/28(火) 09:16:29
LSI C-86でコンパイルしてるんですが
unknown dimensionっていうエラーは
どんな間違いをしてる可能性があるんですか?
0430デフォルトの名無しさん2005/06/28(火) 09:45:41
>>429
>どんな間違いをしてる
コンパイラの選択。

まぁ、恐らくは二重以上の配列で、要素数の指定が漏れているんだろうけど。
int func(int a[][]);
とかね。
0431デフォルトの名無しさん2005/06/28(火) 10:21:35
二次元と表現せずに二重と表現するのが
Cらしいなw
0432デフォルトの名無しさん2005/07/05(火) 16:40:43
クラス継承で教えて
class AandB : public A , public B
{

}
というのを作ろうとしたら
Aのメンバー関数で
A::data()

Bのメンバー変数で
char * B;;data
と名前が衝突していた.

B::dataのみにアクセスするにはどうすればいいの?
0433デフォルトの名無しさん2005/07/05(火) 17:26:48
>>432
B::dataでダメなら、using
0434デフォルトの名無しさん2005/07/05(火) 21:16:22
うまくいった
class AandB : public A , public B
{
AandB(){
this -> B::data
}
}
でアクセスできた

もうひとつ疑問が
class AandB : public A , public B
{
class B *pB;
AandB(): pB(&B)
{
}
}
pBにポインターの値を代入したいんだけどできない
0435デフォルトの名無しさん2005/07/05(火) 22:17:22
>>434
class AandB : public A , public B
{
  class B *pB;
  AandB(): pB(static_cast<B *>(this))
  {
  }
};
キャストは要らないが一応書いておいた。
0436デフォルトの名無しさん2005/07/10(日) 11:50:07
namespace your {
  struct girlfriend {
    void lips();
  };
}

namespace my {
  struct girlfriend {
    static void lips();
  };
  class wife : your::girlfriend {
  public:
    void kiss() { girlfriend::lips(); }
  };
}

さて、wife::kiss() するとgirlfriend::lips()によって
奪われるのは基底クラスの your::girlfriend::lips() か、
はたまた同じnamespaceにある my::girlfriend::lips() なのか?

VC7, gcc3.1 では基底クラス your:girlfriend::lips() で、
BCC564では 名前空間を優先して my::girlfriend::lips() でした。

どっちがせーかいでしょう? 
雰囲気からして基底クラスを採るのがスジっぽいけど。 
0437デフォルトの名無しさん2005/07/10(日) 14:17:24
みなさん、コンパイラなどする時はコマンドプロントからやっていますか?
それとも編集もまとめて出来るフリーツールなど使ってらっしゃいますか?

まだプログラミング始めたばかりなんですが、コマンドプロントの方法もやはり覚えといた方がいいんですかね?
0438デフォルトの名無しさん2005/07/10(日) 14:31:47
プログラムを学習する目的が限定されていて、コマンドプロンプトを使わなくて済むなら、
覚える必要はない。
授業でどうしてもやらなきゃいけないとか。

プログラミング全般に詳しくなりたいなら、覚えておいた方がいい。
0439デフォルトの名無しさん2005/07/10(日) 19:03:07
学習目的でプログラムを組む際、教科書によってはコマンドプロンプトを前提としているものがある。
だから、教科書しだいかな。
個人的には、ツールを組み合わせることが楽なので、覚えるといいとおもう。
0440デフォルトの名無しさん2005/07/10(日) 20:20:05
簡単な、初級プログラムというのはどうしても、コマンドラインを使った処理、
入出力になるからな。憶えるべきというか、憶えないと学習効率が悪いと思うぞ。
世の中に出ている初級者用のC言語情報なんて、ほとんどがコマンドラインを
前提としているからな。
0441デフォルトの名無しさん2005/07/10(日) 22:20:27
やはりそうですか
分かりました、ありがとうございました。
0442デフォルトの名無しさん2005/07/11(月) 23:02:56
IDEかmakeかって話だろ。
そんなの当面どうだっていいだろ。
0443デフォルトの名無しさん2005/07/16(土) 19:15:31
質問
int a = 1;
if ( a == (int)0) {
...
}
のように、キャストした方がいいの?
0444デフォルトの名無しさん2005/07/16(土) 21:53:36
いらない
0445デフォルトの名無しさん2005/07/16(土) 22:06:14
>>443
ただの整数は元からint型。
0446デフォルトの名無しさん2005/07/20(水) 17:02:19
この速度ならぬるぽ
0447デフォルトの名無しさん2005/08/09(火) 01:41:05
Cを使った開発で質問させて頂きたいのですが

ありがちなDBを使った業務システムを開発するときに
MFCと.netフレームワークを比べると
どちらの開発効率が上でしょうか。

漠然とした質問ですが
主観等々で構いませんので、ご意見いただけますでしょうか。
0448デフォルトの名無しさん2005/08/09(火) 01:59:47
MFCも.netもCじゃなくC++だが。
0449デフォルトの名無しさん2005/08/09(火) 02:00:46
ありがちなDBを使った業務システムは開発効率より優先する
ものがあるんでねぇ?
oo4o+vbに1票
0450デフォルトの名無しさん2005/08/09(火) 09:50:43
スレ違いだったらすみません。
自分用にデバグしやすいmalloc/realloc/freeを実装してみようと
思っていますが何を参考にすればいいかわかりません。
シンプルで小さい実装のソースがあったらURLを教えて下さい。
0451デフォルトの名無しさん2005/08/09(火) 11:50:46
void *my_malloc(size_t size) {
  void *p = malloc(size);
  ...hoge
  ...fuga
  return p;
}
みたいのじゃだめなのか。
メモリアロケーションを実装するのは大変だと思うが。
0452デフォルトの名無しさん2005/08/09(火) 13:21:22
#define malloc my_malloc
0453デフォルトの名無しさん2005/08/09(火) 14:20:45
すみません、質問が悪かったですね。
端的に、mmap を実装してみたいんです。
ある組込の環境で、malloc がかなり遅い
環境があるんですが、自分で実装してみたら
それを速くできるのか、それとも自分だともっと
遅くなってしまうのか、興味があったのです。

0454デフォルトの名無しさん2005/08/09(火) 16:08:50
mmapの実装って環境依存じゃないだろうか。ソースならunix系オープンソースosのを
見ればいいだろうけど、参考にはならないような。それはそのままハードorOSの性能
くさいし。欲しいのは多分メモリプールだろうからやるとしてもmallocをラップして
プールするのがいいんじゃないかと。
おもろい文章
http://www-6.ibm.com/jp/developerworks/linux/041217/j_l-memory.html
0455デフォルトの名無しさん2005/08/09(火) 19:51:06
>>453
http://www.uclibc.org/
あたりの実装は参考になるんじゃないかな。 MMUあり、無しの両方に対応する実装がある。
0456デフォルトの名無しさん2005/08/15(月) 12:17:32
あるファイルが存在するかどうかを確認するにはどうしたらよいのでしょうか?
出来るだけ環境に依存しない方法がよいのですが
0457デフォルトの名無しさん2005/08/15(月) 13:06:53
>>456
環境依存しないと言うことなら、存在する≒読めるということで
fopen(targetFile, "r")が成功するかどうかで判断するのが無難。

まぁ、大抵の環境でaccess()かstat()はあると思うがな。
#某環境では、access()がfopen()で実装されているのは内緒。
0458デフォルトの名無しさん2005/08/18(木) 12:41:09
K&Rにmalloc/freeの実装が乗ってる。
0459デフォルトの名無しさん2005/08/19(金) 23:34:15
C言語一通り学んだらDirextXとWINAPIどっちやればいい?
0460デフォルトの名無しさん2005/08/20(土) 00:28:38
>>459
C++
特にDirectXをやるのなら絶対。WinAPIをやるのでもなるべく。
そもそもDirectXはライブラリなどで隠されていない限りある程度WinAPIで下準備が要るから、
結局WinAPIの知識が要る。
0461デフォルトの名無しさん2005/08/31(水) 11:32:56
a, bが変数だとして(…の中で変更される可能性あり)、

(1)
if (a == b) {
 while(a == b) {
  …
 }
 // ★
}
と

(2)
if (a == b) {
 do {
  …
 } while (a == b) ;
 // ★
}

は同じ意味ですか?

今(1)のコードで★部分にコードを追加したいので、
(2)に変えても問題ないか知りたいです。
0462デフォルトの名無しさん2005/08/31(水) 11:34:53
while(a == b) {
 …
}
if (a == b) {
 // ★
}
のほうがまだ読みやすくない・・・?
0463デフォルトの名無しさん2005/08/31(水) 11:39:19
>>461
同じだと思う。

>>462
それは意味が変わってる。
0464デフォルトの名無しさん2005/08/31(水) 12:01:38
>>461
積極的に(2)に変えたい理由は?
別に(1)のままでもいいと思うのだけど。
0465デフォルトの名無しさん2005/08/31(水) 14:03:12
最初に一回無駄な比較が増える
0466デフォルトの名無しさん2005/08/31(水) 14:12:57
>>462
>461 (…の中で変更される可能性あり)
0467 ◆cFJoQcQH2U 2005/08/31(水) 14:16:11
「神戸 330 ふ 1234 この車はどうのこうの(箇条書き)」
sscanfで、上のような文字列を読み取るのに、
"%s %d %s %d %s"を使っているのですが、最後の備考欄に
空白文字が入っているとすべてが読み取れません。
「残りすべての文字列」というマークはありますか?
WinXp,VS.netです。
0468デフォルトの名無しさん2005/08/31(水) 15:15:43
>「残りすべての文字列」というマークはありますか?
そんなものは無い。
fgetsで行末まで読んで、読んだ文字列を変換するのが良い
0469 ◆cFJoQcQH2U 2005/08/31(水) 15:25:43
そうですか・・・ありがとうございます。
fgetsで読んで、4つ目の改行文字以降を読み取ることにします。
0470デフォルトの名無しさん2005/08/31(水) 15:28:51
"%s %d %s %d %[\x01-\xff]"
0471デフォルトの名無しさん2005/08/31(水) 21:45:00
条件演算子の? : は右結合ということですが、
a() { printf("a\n"); return 0; }
b() { printf("b\n"); return 0; }
c() { printf("c\n"); return 0; }
d() { printf("d\n"); return 0; }
e() { printf("e\n"); return 0; }
f() { printf("f\n"); return 0; }
g() { printf("g\n"); return 0; }

main() {
a() ? b() ? c() : d() : e() ? f() : g();
}

とした場合、結果が
a
e
g
となりました。

? : の右結合とは、どの部分に掛かってるんでしょうか?
0472デフォルトの名無しさん2005/08/31(水) 21:46:37
↑結果を見ると左結合に見える、ということです。
0473デフォルトの名無しさん2005/08/31(水) 21:52:57
>461

なぜ(2)の形にしたいのかがわからない。
必ず一回余分な判定が入るのが嫌程度なら(1)の書き方をお勧めする。
上から下への流れで読みやすい。

(2)だとループ条件がループの終わりにならないと分からないので
一部の人間からは嫌われてたりする。

自分は(1)はだね。
0474デフォルトの名無しさん2005/08/31(水) 21:55:04
参考に
void loopfunc(void)
{
clock_t s[2], e[2], t[2];
int i, j;int a, b;
 s[0] = clock();
 for(j=0;j<100000000;j++){
  a = 4568992;
  b = -5621984;
  if(a==b){
   while(a==b){
    a %= b;
    a *= b;
   }
  b %= a;
 }
 e[0] = clock(); t[0] = e[0] - s[0];
 s[1] = clock();
 for(j=0;j<100000000;j++){
  a = 4568992;b = -5621984;
  if(a==b){
   do{
    a %= b;
    a *= b;
   }while(a==b);
  b %= a;
 }
 e[1] = clock(); t[1] = e[1] - s[1];
printf("t[0] = %d\nt[1] = %d\n", t[0], t[1]);
}
0475デフォルトの名無しさん2005/08/31(水) 22:08:54
>>474
if(a==b)の括弧が閉じてないので修正しましたが、
うちの環境では

t[0] = 2593
t[1] = 2384

(2)が速いみたいですね。
0476デフォルトの名無しさん2005/08/31(水) 22:10:32
>>471

C言語の有名なバグです。
条件演算子の仕様的にも左結合で合ってます。
0477デフォルトの名無しさん2005/08/31(水) 22:16:06
>>476
違うよー
1?2?3:4:5
と書けるのは右結合だから。(結果は3)

>>471
結合規則と評価順序は関係ないよ。
0478デフォルトの名無しさん2005/08/31(水) 22:18:25
つまり右結合の掛かる場所は、括弧で括ると
1?(2?3:4):5
こういうことね。
0479デフォルトの名無しさん2005/08/31(水) 22:21:11
>>478
し、知らなかった・・
これでもC言語暦10年なんだが。
0480デフォルトの名無しさん2005/08/31(水) 23:21:11
main(argc, argv)
int argc;
char *argv[];
{

↑↓

main ( int argc, char *argv )
{

どうちがうの??
0481デフォルトの名無しさん2005/08/31(水) 23:35:22
上 K&R
下 ANSI

上は古い書き方で、普通は下の書き方を使う。
意味上の差はない。
0482デフォルトの名無しさん2005/08/31(水) 23:37:48
と思ったが、よく見ると下のargvがchar*になってやがる。

それ以外は同じ。
あと、戻り値の型もちゃんと明示したほうが良い
0483デフォルトの名無しさん2005/08/31(水) 23:51:47
cdeclなら別にどうでもいいよ
0484デフォルトの名無しさん2005/09/01(木) 00:00:31
int func(float a)
{
return sizeof(a);
}
と
int func(a)
float a;
{
return sizeof(a);
}
では違う結果を返すコンパイラもある。
04854802005/09/01(木) 00:37:29
ありがとうございます。

したのargvに[]が無いのは転記漏れでした。申し訳ない。

0486デフォルトの名無しさん2005/09/01(木) 00:38:47
なんで?
ビット長が違う環境とか?
0487デフォルトの名無しさん2005/09/01(木) 00:44:35
>484の後者はfloat aと書いてもdouble aと解釈されるのか。
流石にそこまで古いCは知らないなぁ。
0488デフォルトの名無しさん2005/10/02(日) 20:41:06
以下の問題を配列を必ず使ってプログラミングしてください。

[課題2] 正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。
1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。
<入力例>
Input: 3247

<出力結果>
MMMCCXXXXIIIIIII

お願いします。
0489デフォルトの名無しさん2005/10/02(日) 20:56:21
初めて投稿します。
STLのiostreamヘッダを汎用テキストマッピングとして利用したいのです。
stringはtypedefで、std::basic_string<TCHAR>〜としたのですがが、
iostreamはどうすればいいんでしょ?

なお、MS-Visual C++ ver 6.0で実験しています。

<ソース>
#include <tchar.h>
#include <iostream>

int _tmain(void){

// この coutとwcoutを一つにまとめたい。
std::cout << _T("Hello C++ World!\n") << std::endl;

return 0;
}

識者の皆様、ご教授お願いしたいです。
0490デフォルトの名無しさん 2005/10/02(日) 21:00:07
関数化してください。

http://briefcase.yahoo.co.jp/light_blue_8671
問題はいってます
0491デフォルトの名無しさん2005/10/02(日) 21:43:22
>>489
coutとかは型ではないからtypedefできない。
だからこうするしかないと思う。cinやcerr、clogも同じ。
#ifdef UNICODE
#define tcout std::wcout
#else
#define tcout std::cout
#endif
0492デフォルトの名無しさん2005/10/02(日) 22:22:03
>>491
ご返答ありがとうございます。

なるほど、
cin, cout, cerr, clogはIOストリームオブジェクトなので、
defineで置き換えるしかないですか・・・

ご指摘を参考にしてみます。
0493デフォルトの名無しさん2005/10/02(日) 22:57:40
>>488(前半)

#include "ctype.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"

// 文字
static char code[4][2]={"I","X","C","M"};

int main(void){
int i, j, max, len, dec[4];
char inpbuf[5];// 4桁 + NULL
char outbuf[37];// 9文字 x 4桁 + NULL

// 初期化
memset(outbuf, 0, sizeof(outbuf));
memset(inpbuf, 0, sizeof(outbuf));

// 入力
printf("input:");
scanf("%5s", inpbuf);

0494デフォルトの名無しさん2005/10/02(日) 22:59:11
>>488(中)
// 入力チェック
len=strlen(inpbuf);
for (i=0; i<len; i++){
if (!isdigit(inpbuf[i])){
printf("数値を入力してください\n");
return -1;
}
}
i=atoi(inpbuf);
if (i>9999 || i<0){
printf("数値は0-9999までの範囲で入力してください。\n");
return -1;
}
_itoa(i, inpbuf, 10);
len=strlen(inpbuf);

// バッファを数値に変換して
max=len-1;
for (i=max; i >= 0; i--){
dec[i]=inpbuf[i]-48;
if (dec[i]!=0)
max=len-i-1;
}

0495デフォルトの名無しさん2005/10/02(日) 23:00:56
>>488(後半)
// 文字列作成
for (i=0; i <= max; i++){
for (j=0; j < dec[i]; j++)
strcat(outbuf, &code[max-i][0]);

}

// 出力
printf("%s\n", outbuf);

return 0;
}

くどいので、部分部分は修正してね
0496デフォルトの名無しさん2005/11/01(火) 00:27:12
質問させてもらいます。
SDL_ttfでの表示の際にUnicode文字列が必要なのですが、
S-JISからUnicodeへの変換にはやっぱりICU使うしか無い
でしょうか?

0497デフォルトの名無しさん2005/11/01(火) 00:27:50
質問なのでageさせて貰います。
0498デフォルトの名無しさん2005/11/01(火) 00:55:13
いいえ
0499デフォルトの名無しさん2005/11/01(火) 03:39:10
ぽいんた〜がわかりまっせ〜ん

おしえてくださ〜い
0500ハーピィ2005/11/01(火) 05:56:56
E・∇・ヨノシ <500ゲット♫
05014962005/11/01(火) 10:13:50
変換するのは大げさなのでデータにUTF-8で埋め込むことにしますた。
0502デフォルトの名無しさん2005/11/01(火) 18:29:34
>>496
ちなみにマルチバイト文字(char型)にShift-JISが使われていれば、mbstowcsという標準関数が使えなくもない。
0503デフォルトの名無しさん2006/01/06(金) 16:32:17
文字コードについてなのですが・・

a b c d eなどはASCIIコードって事はわかってるのですが
"あ"とか"い"とかは何コードなのでしょうか

strcpy(str,"あ");

printf("0x%X\n",str[0]);
printf("0x%X\n",str[1]);

とか調べてみたのですが全然判らなくて・・
0504デフォルトの名無しさん2006/01/06(金) 16:48:32
> a b c d eなどはASCIIコードって事はわかってるのですが

ここで既に終わっている
0505デフォルトの名無しさん2006/01/06(金) 16:52:52
ぇー数値ASCIIの数値を当てはめて出力しても期待される文字が出力されましたが
0506デフォルトの名無しさん2006/01/06(金) 16:55:18
>>503
Windows系ならShift-JISでUnix系ならEUC-JP。ほかは知らん。
Cとしては文字コードは一定の基準さえ満たせば何でも良いということになっているから、
特定の文字コードに頼り切ったコードは書くな。
0507デフォルトの名無しさん2006/01/06(金) 16:57:36
>>502
すみませんorz
ありがとうございました
0508デフォルトの名無しさん2006/01/08(日) 18:59:22
演算についてなんですけど
C言語において被除数=0の時の計算っていうのはまずいですよね?

例えば
0/3
0%7
などです。

うちの処理系では例外処理が加えられて0を返すようになってるみたいなんですけど
どうでしょうか
0509デフォルトの名無しさん2006/01/08(日) 19:44:30
んなこたーない。
もし、本当に例外処理が行なわれているとしたら、その処理系は糞未満だ。
0510デフォルトの名無しさん2006/01/08(日) 19:58:49
>>508
0以外を返すのは数学的にもアーキテクチャから見てもおかしい。
0511デフォルトの名無しさん2006/01/08(日) 20:00:12
0 で割る方じゃなくて、0 が割られる方なのな。

>C言語において被除数=0の時の計算っていうのはまずいですよね?
なんでまずいって思ったの?いずれも答え 0 で数学的にも正しい結果でしょ?
どっちかに負数が入る場合は C89 では処理系定義の部分は入るけど、それでも結果自体は
規定されるから例外処理なんてない。
(C99 では 0 方向に丸めるよう規定されてる)

「5.4 整数除算」を参照の事
ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607
0512デフォルトの名無しさん2006/01/08(日) 20:55:50
>>509-511
すいません少しこんがらがってました
0が除数である場合の計算でしたorz
0513デフォルトの名無しさん2006/01/09(月) 21:38:36
>512
手元に C99 の規格書しかないけど、
> 9899:1999 6.5.5/5
>The result of the / operator is the quotient from the division of the first operand by the
>second; the result of the % operator is the remainder. In both operations, if the value of
>the second operand is zero, the behavior is undefined.
ということで未定義動作だから何が起こっても規格準拠だね。
0514デフォルトの名無しさん2006/01/13(金) 09:35:53
こんにちは。質問です。お願いします。
C言語のif文で、条件式の中でfloat型の変数は使えますか?
こういう処理なんですが・・・
float fA,fB;
:
:
if(fA != fB)
{
:
}
例えば、for文の条件式とかで浮動少数型の変数を用いるのが
明らかに変なのは分かります。では、if文は、どうなのですか?
0515デフォルトの名無しさん2006/01/13(金) 09:56:57
>>514
できるけど、やっぱり紙の上での計算と違って誤差が出るから

static float tol = 0.0001f;
float a,b;

if((a-b) < tol) {
/***/
}

とやるべきだろうね。
0516デフォルトの名無しさん2006/01/13(金) 11:05:56
>>515
if ( abs(a-b) < tol ) {
/***/
}
なのでは?tolの値は妥当などうかも疑義がありますが
0517デフォルトの名無しさん2006/01/13(金) 11:24:44
for(double d = 0.0; d < 100.0; d += 0.5)

誤差だけ気にしなければ別に変じゃないな
0518デフォルトの名無しさん2006/01/13(金) 11:40:29
変だよ
0519デフォルトの名無しさん2006/01/13(金) 15:27:00
sin(x)のマクローリン展開から√2の近似を計算するプログラムを作成したいんですが、どなたかご指導ご鞭撻の程お願いします。
sin(π/4)を2倍するところまではわかるんですが、マクローリン展開がどうもよくわからないので
05205142006/01/13(金) 18:21:16
早速の回答を有り難う御座います。
因みに、VC++を使っているのですが、前述の問題に関して
Debugモード、或いはReleaseの最適化を外すと
何ら問題が出ないのです・・・
コンパイラのバグなのか、誤差の問題なのか
悩むところです。。
0521デフォルトの名無しさん2006/01/13(金) 18:41:40
自分のソースが悪い、に一票
0522デフォルトの名無しさん2006/01/13(金) 18:55:29
>>520
浮動小数点数は同じ値でありながらビットイメージが違う場合も存在するから、
>516 の方法で丸めた方がいいよ。
tol の値は #include <float.h> して FLT_EPSILON 使えばいい。
0523デフォルトの名無しさん2006/01/13(金) 20:30:06
見事にC言語のスレになっててワロタw
0524デフォルトの名無しさん2006/01/15(日) 11:10:14
質問です。
#include<stdio.h>
#include<string.h>

#define N 32

void sorting(char*,char*);

main(int argc,char *argv[]){
char read[N*N],Memory[N][N],CASL[N][N][N];
sorting(CASL,read);
}
void sorting(char *CASL,char *read){
int i=0,j=0,k=0,z=0,I,J;
while(1){
I=i*(N*N);J=j*N;
if(*(read+z) == '\0') break;
else if(*(read+z) == ' '){
*(CASL+I+J+k) = '\0';
j++;k=0;
}
else if(*(read+z) == '\n'){
*(CASL+I+J+k) = '\0';
i++;j=0;k=0;
}
else{
*(CASL+I+J+k) = *(read+z);
k++;
}z++;}}
上記のプログラムでコンパイルするとwarning: passing arg 1 of `sorting' from incompatible pointer type
のエラーメッセージがでてしまいます。関数間での受け渡しで発生しているエラーだと思うのですが、どこを直せばいいのでしょうか?教えてください。
0525デフォルトの名無しさん2006/01/15(日) 11:50:26
>>524
マルチうぜえ
0526デフォルトの名無しさん2006/01/15(日) 11:50:43
>>524
CASL の宣言か、sorting() の引数宣言 (プロトタイプ含む)
0527デフォルトの名無しさん2006/01/15(日) 22:23:00
floatが整数かどうかの判定ってどうします?

if(x - (int)x == 0.0f)

で良いの?
キャストに頼るのが変な気がするんですが・・・。
0528デフォルトの名無しさん2006/01/15(日) 23:01:34
> floatが整数かどうかの判定ってどうします?

移植可能な方法で、判定する方法はない。
0529デフォルトの名無しさん2006/01/15(日) 23:09:40
>>528
こら。modfがあるだろ。
ちなみにfloat版はmodff。
0530デフォルトの名無しさん2006/01/15(日) 23:36:58
>>529
modf(...) == 0 とするのか?
>>527 とたいして変わらんぞ、それ。

浮動小数点に対して == 演算子を使う奴は、大抵バカ
であることがまたもや実証されたな...。
0531デフォルトの名無しさん2006/01/17(火) 02:46:27
>527だとintの範囲を超えたときに何が起こるかわからんからmodfの方がまし。
そもそも整数かどうかの判定が必要な値にfloatを使っていることがおかしい気がするが。
0532デフォルトの名無しさん2006/01/17(火) 09:20:37
>>531
整数というか、小数の位が存在するかどうかで処理を変更したかったので。
modfで誤差を考慮しとけば良さそうですね。
0533デフォルトの名無しさん2006/01/17(火) 17:17:00
>>523
スレタイだけで >>1 を読まない間抜けが多いって事です。
0534デフォルトの名無しさん2006/01/24(火) 12:41:38
配列の初期化について質問です。

int test[4] = {10, 100, 50, 1};
などの様に初期化したいのですが、
宣言した後で、このように一気に初期化する方法は無いのでしょうか?

具体的には、配列をクラスのメンバに持っていて、
コンストラクタで初期化したいのですが、
test[0] = 10;
test[1] = 100;
・
・
・
などのように、一つずつ初期化していくしかないのでしょうか?
0535デフォルトの名無しさん2006/01/24(火) 12:52:00
>>534
それしかありません。
05365342006/01/24(火) 14:38:34
コンストラクタでローカル変数
int l_test[4] = {10, 100, 50, 1};
を作って、それをメンバの配列にmemcpyすることで解決しました。

あまりキレイな解決策ではないですが、
実際は2次元配列で要素が多かったので、どうしても一気に初期化したかったのでした。
0537デフォルトの名無しさん2006/01/24(火) 22:06:31
> コンストラクタでローカル変数
> int l_test[4] = {10, 100, 50, 1};
> を作って、

まあ、最近のマシンなら気にすることではないのだろうが、
static const をつけておいた方がちと早くなるかもし
れない。
0538デフォルトの名無しさん2006/01/25(水) 06:19:38
何故vectorかなにかのコンテナを使わないのだろう。
0539デフォルトの名無しさん2006/01/25(水) 07:40:22
>538
それはさすがにスレ違い。
0540デフォルトの名無しさん2006/01/25(水) 17:51:24
このスレで「スレ違い」って言われてもな
0541デフォルトの名無しさん2006/01/27(金) 16:02:03
スレタイに半角の#を入れようとしたのが問題
0542デフォルトの名無しさん2006/01/27(金) 22:59:12
>>541
これってCすれじゃなかったのか!!!!
0543デフォルトの名無しさん2006/01/27(金) 23:08:23
気付いてない子がいたのか・・・
0544デフォルトの名無しさん2006/02/02(木) 23:17:53
for(;;);
for(;;)
といった文を見たんですがこういう文はどういう働きをするんでしょうか?
0545デフォルトの名無しさん2006/02/02(木) 23:27:06
ループ・ザ・インフィニット! ・・・とかって言うとスタンドっぽくね?
0546デフォルトの名無しさん2006/02/02(木) 23:41:02
>>544
forの括弧の中の3つのそれぞれの部分は省略できる。
2つのセミコロンの間の継続条件を省略すると無限ループになる。
0547デフォルトの名無しさん2006/02/03(金) 16:06:33
>>546
すいません、ちょっと言葉足らずでした。

for(初期条件;終了条件;加算);
for(初期条件;終了条件;加算){
文;
}

こんな感じの文だったのですが、
最初のfor文の最後に ; が入った形をみたことがなかったので、
この2個のfor文がどのように動くのかを教えてほしいです。
0548デフォルトの名無しさん2006/02/03(金) 16:16:08
rr
0549デフォルトの名無しさん2006/02/03(金) 16:21:58
>>547
↓こう書いたら解る?
for(初期条件;終了条件;加算)
  ;
0550デフォルトの名無しさん2006/02/03(金) 16:23:07
>>549
何もしないんですね。orz
理解できました。ありがとうございます。
0551デフォルトの名無しさん2006/02/03(金) 21:35:03
#include <stdio.h>
int main(){
int *pa[500],*pb[500],*pc[500],*pd[500],*pe[500],*pf[500];
int i;
for(i-0;i<500;i++){
*pa[i]=5;
*pb[i]=5;
*pc[i]=5;
*pd[i]=5;
*pe[i]=5;
*pf[i]=5;
printf("%d,%d,%d,%d,%d,%d\n",*pa[i],*pb[i],*pc[i],*pd[i],*pe[i],*pf[i]);
}
return 0;
}
このプログラムってかなりやばいよな;
0552デフォルトの名無しさん2006/02/03(金) 21:35:49
>>551
マルチうざい
0553デフォルトの名無しさん2006/02/04(土) 16:45:57
構造体についての質問です。

#include<stdio.h>
struct string{
char *a;};
struct string data[]={
"a","b","c","d",};

int main(){
struct string *p;
char *s;
int i;
scanf("%s",&s);
p=data;
for(i=0;i<=3;i++){
if(s==(p+i)->a){
printf("%s\n",(p+i)->a);}}
return 0;
}
以上をコンパイルして実行した場合、scanfで入力した値がa~dのどれかでも
if(s==(p+i)->a)が真と判断されないのですが、間違いについての教唆をお願いします。
0554デフォルトの名無しさん2006/02/04(土) 16:57:35
>>553
>間違いについての教唆をお願いします。

教え唆すのか?
0555デフォルトの名無しさん2006/02/04(土) 17:13:29
そそのかされてどうする俺…
普通に間違いについて教えてほしいです
0556デフォルトの名無しさん2006/02/04(土) 17:23:21
たとえば、scanf で "abc" という文字列を読み込んで、
それらの文字一つ一つ( 'a' とか 'b' とか 'c' とか '\0' とか・・・)は
メモリの何処に保管されるのさ?

今、値を記憶できる変数の領域は string 構造体のアドレスを保持する p と
char のアドレスを保持する s と
int の値を保持する i しかないぞ?
05575822006/02/04(土) 18:00:29
>>553
よーし、パパそそのかしちゃうぞ。

よくコンパイル通ったな。 構造体のメンバが char へのポインタ1つだけと判っていれば、
構造体配列 = { char*その1, char*その2, ・・・ , char*そのn }
なんて初期化が許されるのか ・・・ 知らなかった (マジ
ここは、
struct string data[]={
{"a"}, {"b"}, {"c"}, {"d"}
};
じゃなきゃ い神埼だと オモテタ。

でも、バグの本質は、>>556 の指摘のとおり。
scanf() で、ポインタ変数にコンソール入力しようとしているが、おまえには特定の
char の場所を示すポインタ ( アドレス ) が判るのか? メモリの中身に詳しいヤツ
だな。
0558デフォルトの名無しさん2006/02/04(土) 18:23:12
本当に唆しているだけだなお前ら。
05595532006/02/04(土) 19:25:32
>>556-557
charで*でなく適当な長さの配列を宣言して
if()で照会するのは2つの配列[0]に格納した値…ってことですね。
どうみても俺の勉強不足です。本当にありがとうございました
0560デフォルトの名無しさん2006/02/13(月) 03:43:09
関数を定義するときに
void xxx(int yyy)
int A;
char B;
{
〜〜〜
}
こんなふうに書かれたものを良く見かけるのですが
このときAとBは何か特別なものなんですか?
0561デフォルトの名無しさん2006/02/13(月) 08:39:53
>>560
void xxx(int yyy)
{
...;
}
ならば、古いスタイルで
void xxx(yyy)
int yyy;
{
...;
}
となるがそのことだろうか。
それならばプロトタイプ宣言のなかった時代の名残だ。
0562デフォルトの名無しさん2006/02/27(月) 10:34:29
Borland C Compilerのエラーメッセージについて詳しく解説している
『bcc32_messages』というファイルがあるのですが(中には数百のHTMLが
入っていて、エラーと警告1つ1つに細かい説明が書かれている)、どなたか
これの英語版がどこにあるかご存じないでしょうか?
0563デフォルトの名無しさん2006/04/21(金) 23:47:15
COMMAND getCommand(char *c)
{
       int i, j, k, l, len;
       char comtmp[128], fileNametmp[128], comExtmp[128];
       COMMAND command;

       len = strlen(c);
       for(i=0; i<len+1; i++){
             if(c[i] == '-'){
                     for(j=0; c[i]!='\0'; j++){
                            i++;
                            if(c[i] == '@'){
                                   comtmp[j] = '\0';
                                   for(k=0; c[i]!='\0'; k++){
                                          i++;
/*printf("\nc[%d] = %c\n", i, c[i]);*/
                                          if(c[i] == '>'){
/*printf("\n>>in\n");*/
                                                 for(l=0; c[i]!='\0'; l++){
                                                        i++;
                                                        comExtmp[l] = c[i];
printf("\nc[%d] = %c\n", i, c[i]);
                                                 }
                                          }
0564デフォルトの名無しさん2006/04/21(金) 23:48:36
                                          if(c[i] == '\0'){
                                                 comExtmp[k] = '\0';
                                                 command.com = malloc(sizeof(char)*(strlen(comtmp)+1));
                                                 command.fileName = malloc(sizeof(char)*(strlen(fileNametmp)+1));
                                                 command.comEx = malloc(sizeof(char)*(strlen(comExtmp)+1));
                                                 strcpy(command.com, comtmp);
                                                 strcpy(command.fileName, fileNametmp);
                                                 strcpy(command.comEx, comExtmp);

                                                 return command;
                                          }
                                          fileNametmp[k] = c[i];
                                   }
                            }else if(c[i]!='\0'){
                                   comtmp[j] = c[i];
                            }
                     }
              }else if(c[i]=='\0'){
                     break;
              }
0565デフォルトの名無しさん2006/04/21(金) 23:52:41
       }

       command.com = NULL;
       command.fileName = NULL;
       command.comEx = NULL;

       return command;
}

質問です。
このプログラム、-xxxxxx@yyyyyy>zzzzzz  (x, y, z は不定)
という文字列から command.com = xxxxxx
            command.fileName = yyyyyy
            command.comEx = zzzzzzz
に文字列を分けて入れるプログラムです。
printfが変なところに3つあるのはデバッグのためなのですが、上から3つ目のprintfをコメントアウトするとバグが起こり、
コメントアウトしないでprintf出力するとバグが起こりません。なぜでしょうか?

[email protected]>rgb と入力した時、fileNameにstrlen()で文字列数を調べたところ、
3番目のprintf()をコメントアウトしなかった場合、7文字と正確に入っていて。
コメントアウトした場合、11文字とでます。
コンパイラーはbccの5.5で、windowsXPを使用しています。

Σ( ゜д゜)うわ
プログラム超見づらい。
すみません;;
05665422006/04/22(土) 00:08:46
ほら、皆間違えるw
0567デフォルトの名無しさん2006/04/22(土) 18:37:12
実行ファイル(***.exe)の作成の仕方がわからないのですが…。
0568デフォルトの名無しさん2006/04/23(日) 15:38:33
>567
一行目に
#!/bin/sh
って書いて
chmod +x
してから、ファイル名に.exeをつけるだけだよ。
0569デフォルトの名無しさん2006/04/27(木) 21:47:48
今日はじめてc言語のテキストを買いました。
初心者です。
コンパイル時?に
インクルードファイル ’stdio.h’をおーぷんできない
とエラーメッセージが出てきました

テキスト読んでもわかりません
解決方法があれば教えてください
0570デフォルトの名無しさん2006/04/27(木) 22:20:47
>>569
きちんとインストールしたか?
特にBorland C++ならbcc32.cfgなど。
0571デフォルトの名無しさん2006/04/27(木) 22:41:25
>>570
どもです
cfgファイルを作ったんですが
コンフィグレーションファイル中の オプションの間違い と
難しいですね
0572デフォルトの名無しさん2006/04/28(金) 07:22:00
コンパイルするとstudio.hが見つからないと出るのですが、バグですか?
0573デフォルトの名無しさん2006/04/28(金) 07:29:26
stdio.hだよ。studioじゃない。
0574デフォルトの名無しさん2006/04/28(金) 11:15:51
stdioがスタンダードI/Oだって知らないのかな
0575デフォルトの名無しさん2006/04/28(金) 17:05:46
Cmachineと言うフリーソフト持っている方いませんか?
公開終了してたので・・・orz
持ってる方うpお願いします…
0576デフォルトの名無しさん2006/04/28(金) 17:08:37
>>575
C のスレと間違うならまだしも、まるっきりスレ違い。
阿呆は帰れ。
05775752006/04/28(金) 17:19:26
>>576
書き忘れましたが、C言語のソフトです・・・
あほですいません・・・orz
0578デフォルトの名無しさん2006/04/28(金) 21:19:52
初心者で本当にすみません
scanf関数を使っていたときに、パラメータに"&"を付け忘れました
俺のPCはあぼーんですか?
0579デフォルトの名無しさん2006/04/28(金) 21:30:13
>>578
心配なら再起動しろ。
05805782006/04/28(金) 23:13:51
>>579
ありがとうございます。
さっき電源落としたんで、後で立ち上げてみます。
授業でscanf習った時に先生に死ぬほど脅されてたんで正直ガクブルです
0581デフォルトの名無しさん2006/04/29(土) 00:34:50
ワロタ
0582デフォルトの名無しさん2006/04/29(土) 01:04:58
-|"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
bcc32.cfg

コンフィグレーションファイル中の オプション間違い:-|"c:\Borland\Bcc55\include"
というエラーが出てしまいます

どうすればいいでしょうか?
教えてください。
0583デフォルトの名無しさん2006/04/29(土) 02:22:18
|とIが区別出来るフォントを使えばいいと思うよ
0584デフォルトの名無しさん2006/04/29(土) 12:16:12
>>583
ホントですか?
半角入力にですか。

テキストでは |とl の区別がなく書いてあるのでわかりずらいです。
0585デフォルトの名無しさん2006/04/29(土) 12:28:03
>>583
ありがとうございました
|とiの違いですね。
0586デフォルトの名無しさん2006/04/29(土) 15:13:16
warota
0587デフォルトの名無しさん2006/05/02(火) 11:27:23
>>580
死ぬほど脅すくらいなら、最初っから教えなきゃいいのになぁ。
0588デフォルトの名無しさん2006/05/08(月) 13:47:17
LSI C-86 Ver.3.30 試食版のことでお尋ねします、OSはWindows2000です
エスケープシーケンスを使いたいと思ってなんとか使えるようにはなりました。
しかし、カーソルを全角用の2文字分の長い方に変えるのはどうやってやったらいいでしょうか
0589デフォルトの名無しさん2006/05/08(月) 15:34:00
↑同じ質問を違うスレでしていますが、いろいろ試行錯誤した結果での話です
決してマルチをしようとしたつもりはございません
何なら無視して頂いてもかまいません
0590デフォルトの名無しさん2006/05/08(月) 16:20:17
それ以前にスレ違いだ。
>>1を読んでいないことがバレバレだぞ。
0591デフォルトの名無しさん2006/05/08(月) 16:23:18
>>1よりもスレタイが重要だと思う。
0592デフォルトの名無しさん2006/05/08(月) 17:36:16
だから間違えたって言ってるだろ
0593デフォルトの名無しさん2006/05/08(月) 20:57:59
ttp://cgi.2chan.net/up2/src/f137696.txt

このコードをCygwinでコンパイルした結果
$ gcc -o client client.c
client.c: In function `main':
client.c:14: error: storage size of `server_adrs' isn't known

とエラー吐かれたのですが、修正方法が分かりません
修正方法教えていただけませんか?
05945932006/05/08(月) 22:09:10
すいません、ソースURL間違えてました
ttp://namihei.zone.ne.jp/upup/up/56166.txt
です、お願いします
0595デフォルトの名無しさん2006/05/09(火) 11:45:14
>>593
だから激しくスレ違いなんだってばさ。
書き込む前に>1を読むとか直前の数レスを眺めるってこともできないのか?
cygwinスレかネットワークスレ辺りで聞いて味噌。
0596デフォルトの名無しさん2006/05/09(火) 20:49:10
スペースで区切られた文字列を分割する関数を作ります。

・連続するスペースはひとつの区切りとしない
・スペースがない場合は全ての文字列を返す
・頭や後ろにつくスペースは無視
・返す文字列がない場合はNULLを返す
・初期値の文字列はNULLを引数に与えている間に変更されないもとする
・#include<string.h>は使わない

ですが、さっぱりわかりません。
どうか教えてください。
05975962006/05/09(火) 20:57:45
引数は( char * , const char * )です。
第1引数は区切られた文字列の格納先
第2引数はスペースで区切られた文字列(次の文字列を探す時はNULLを指定)
です。
0598デフォルトの名無しさん2006/05/09(火) 20:59:26
宿題なら宿題のスレッドへ行くが吉。
0599デフォルトの名無しさん2006/05/10(水) 00:11:15
#include <stdio.h>
main(){
float x=0.0;
double xx=0.0;
long i,n=100000;
for(i=1;i<=n;i++){
x=x+1/(float)(i*i);
xx=xx+1/(double)(i*i);
}
printf("from 1/1^2 to 1/%d^2, x(dbl)=%f, x(flt)=%lf\n",n,xx,x);

x=0.0;
xx=0,0;
for(i=n;i>=1;i--){
x=x+1/(float)(i*i);
xx=xx+1/(double)(i*i);
}
printf("from 1/%d^2 to 1/1^2, x(dbl)=%f, x(flt)=%lf\n",n,xx,x);
}
1/1^2+1/2^2+・・・+1/100000^2を計算するプログラムを作成せよという問題で、1/1から加えたときと1/100000から加えたときとそれぞれフロートとダブル型の4パーターン
比較する課題なんですが、実行するとバグってしまします。このプログラムのどこおかしいですか?コンパイラはborlandgccです



0600デフォルトの名無しさん2006/05/10(水) 00:16:41
>>599
まずおかしいのはスレッドの選び方。ここはC♯のスレッドです。
次におかしいのは日本語。パーターンってなんです?
またおかしいのはコミュニケーション能力。バグってしまうだけでは何も通じません。
更におかしいのはコンパイラ。borlandなのかgccなのかはっきりなさい。
0601デフォルトの名無しさん2006/05/10(水) 00:18:13
>>600
すげー眠いのでもうだめです。今日はねます。すいませんでした
0602デフォルトの名無しさん2006/05/10(水) 00:18:31
>>599
>>595は見えてますか?
0603デフォルトの名無しさん2006/05/10(水) 00:23:46
ここをC言語のスレとして扱っちゃ駄目なのか?
>>599
iが65536以上の時、i*iは32ビットでは表現できないので、オーバーフローしているんだろう。
(double)(i*i)の代わりに(double)i*iとすればいい。
0604デフォルトの名無しさん2006/05/10(水) 00:31:29
>>603
動作するようになりましたが、結果がおかしくなりました
0605デフォルトの名無しさん2006/05/10(水) 00:54:51
>>604
ごめん、括弧が要る。
((double)i*i)
0606デフォルトの名無しさん2006/05/10(水) 00:57:38
>>603
>ここをC言語のスレとして扱っちゃ駄目なのか?
じゃ、重複スレなわけね。
0607デフォルトの名無しさん2006/05/10(水) 01:01:02
そういうことになるな。
0608デフォルトの名無しさん2006/05/10(水) 13:23:27
じゃ削除だね
0609デフォルトの名無しさん2006/05/10(水) 15:33:33
そういえば3月・4月のスレ削除依頼がまだ処理されてないな。
0610デフォルトの名無しさん2006/06/03(土) 01:37:14
f (x) = cos (x) - x2 = 0 の根のうち、0 < x < 1 を満たすものを2分法で求める  
初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力する方法を教えてください。  
0611デフォルトの名無しさん2006/06/03(土) 11:03:53
>>610
細かな調整は勝手にやれ
#include <iostream>
using namespace std;

double f(double x){
double fx;
fx = cos(x) - x*x ;
return fx ;
}

double bisection(double a, double b,double (*)(double),int prc);
int main(){
double a,b;
double k;
cout << " a : " ;
cin >> a ;
cout << " b : " ;
cin >> b ;
k = bisection(a,b, f,100);
cout<<"cos(x) - x^2 := " << f(k) << " at " << k << endl;
return 0;
}
(2分法は次)
0612デフォルトの名無しさん2006/06/03(土) 11:04:35
続き

double bisection(double a, double b, double (*func)(double ),int prc){
if (func(a)*func(b) >= 0) return a; //意味ないし a で十分w
double up, lo , m;
if( func(a) > func(b) ){ up = a; lo = b ;}
else { up = b ; lo = a; }

double workprod;
int workint ;
int counter=0;

while(1){
m= (up + lo)/2;
workprod = func(m);
workint = ((int)(workprod * 1000000)); // /100.0;
if(workint==0){
cout << "counter value = "<< counter <<endl;
return m;
}
if(workint > 0) up=m;
if(workint < 0) lo=m;
counter++;
if (counter > 20000) break;
}
return 0.0;
}

0613デフォルトの名無しさん2006/06/03(土) 19:55:14
>>611-612
1.宿題に答えるのはスレ違い
2.>>1も読めないカスは失せろ
0614デフォルトの名無しさん2006/06/03(土) 23:02:06
>>613
1?
笑わせるなヨ
ここは元々利用価値のないクズスレ
悔しかったら削除依頼出して来いヤw

612も読めねえクズが
0615デフォルトの名無しさん2006/06/03(土) 23:14:16
カススレ晒しage
0616デフォルトの名無しさん2006/06/03(土) 23:20:45
すいません、初心者なのですがdupという関数について教えてください。
openしたファイルポインタAをdupで複製?した場合というのはAをclose
すれば複製したファイルポインタもcloseされるのでしょうか?
dupの認識が違っていたらすいません
0617デフォルトの名無しさん2006/06/04(日) 01:27:25
単利計算と複利計算を行うプログラムについて、質問させてください。
環境はWindowsXP.VS.NET2003。Win32コンソールアプリケーションです。
void main()
{
float a,r,c;/*r:金利c:複利*/
int i,y,method; /*預ける年数*/
printf("いくら預けますか?");
scanf("%lf",&a);
printf("何年間預けますか?");
scanf("%d",&y);
printf("運用方法を設定してください。単利なら0,複利なら1を入力してください。");
scanf("%d",&method);
if(method==0){
printf("金利はいくら(%%)ですか?");
scanf("%f",&r);
for(i=1;i<=y;i++){
a +=a*(r/100);
}
printf("元本は%f円になります\n",a);
}
else if(method==1){
printf("複利はいくら(%%)ですか?");
scanf("%f",&c);
for(i=1;i<=y;i++){
a = a*(1+r/100);
}
printf("元本は%f円になります\n",a);
}
else printf("終了します。\n");
}
ですが、いざ元本を出そうとすると、Stack around the variable 'a' was corrupted.
と表示されてしまいます。お力添えの程出来たらよろしくお願いいたします。
0618デフォルトの名無しさん2006/06/04(日) 10:03:00
>>617
> scanf("%lf",&a);
scanf系において%lfはdobuleを意味する。

floatを使う必要なんてない。全部doubleでいい。
そもそもお金が絡むのに浮動小数点数を使ってよいのかという問題もあるが。
void main()を使う必要もない。int main()でいい。
0619デフォルトの名無しさん2006/06/04(日) 21:18:38
>>618
ありがとうございました。
単利の計算が間違っていた(複利と一緒だったorz)。
ので直しましたが、それ以外はうまくいきました。

小数点以下は二桁まで取ることにしました。
ありがとうございました。
0620デフォルトの名無しさん2006/06/29(木) 09:02:45
scanf("%d",&r);
scanf("%d",&h);
A=ff (r,h);
ff=f2;
V=ff (r,h);
printf ("表面積=%f 体積=%f",A,V);
return 0;
}(後は省略)

この問題でhとrをよみこみたいんですけど
こういうふうに書くとどんな数字を読み込んでも答えが0になって
しまうんですけどどこが間違ってますかね・
ちなみにscanfのかわりにh=1とかって定義すればしっかり値はでます。
0621デフォルトの名無しさん2006/06/29(木) 09:03:58
すいません途中しかコピペしてませんでした。こんな感じです
#include <stdio.h>
#define PAI 3.14159
double a,b,r,h,A,V;
double f1 (double r2,double h2);
double f2 (double r2,double h2);
main(void)
{

double (*ff)(double r2,double h2);


ff=f1;
scanf("%d",&r);
scanf("%d",&h);
A=ff (r,h);
ff=f2;
V=ff (r,h);
printf ("表面積=%f 体積=%f",A,V);
return 0;
}
0622デフォルトの名無しさん2006/06/29(木) 09:14:35
うはぁ、突込みどころが満載だ。
・doubleで計算したいならPAIは精度が足りない。
・そもそもPAIってなんだよw
・変数は極力グローバルに置かない方がいい。
・f1()とf2()が外部にあるなら、宣言はインクルードファイルで行なう方がいい。
・関数名は特別な理由でもない限り、中身が判る名前にしよう。
・main()の戻り値型は書くべき。
・実験的にやってみたいだけなら止めないが、関数ポインタを使う必然性がない。
・scanf()で型指定子を%dにするならint *を渡す必要がある。
・逆に、double *を渡したいなら型指定子は%lfだ。
・そもそもここはC♯の立て損なったネタスレだ。
0623デフォルトの名無しさん2006/06/29(木) 09:19:13
ほんと、ごめんなさい
でも解決しました><
0624デフォルトの名無しさん2006/07/02(日) 00:23:44
愚かな俺に教えて下さいまし、みなさま・・・

BYTE byData = 0x0f;
byData = byData << 4;
  (VC .net SP 適用なし)

これ実行すると byData が 0 になる。
3 ビットシフトだとちゃんと 0x78 になるのに・・・。

なぜだぁぁぁぁぁ!!
0625デフォルトの名無しさん2006/07/02(日) 00:47:36
>>624
自己解決

VC .net のシンボルウォッチのバグですた・・・
おぃおぃ、VC6 から劣化してどーすんのよ MSさん〜〜orz
0626デフォルトの名無しさん 2006/07/19(水) 05:49:05
2つ整数を入力して商と剰余を求めるんですが・・・
20-6=14 14-6=8 8-6=2 3回引いたので商が3、剰余は2、というふうに求めろ、という問題です。
商は4、剰余4と出てしまいます。
#include <stdio.h>
void main(void)
{
int a,b,c,d,e,f;
printf("2個の正の整数を入力\n");
scanf("%d %d",&a,&b);
if (b>=a)
{
c=b;
b=a;
a=c;
}

d=a-b;
e=1;
while (d>=0)
{
d=d-b;
e=e+1;
}
printf("商%d 剰余%d",e,d);
}
0627デフォルトの名無しさん 2006/07/19(水) 07:17:44
d>=0だったら一回余分に計算しちまいますね・・・
自己解決しました。スレ汚しすんません。
0628デフォルトの名無しさん2006/08/15(火) 08:13:19
巨大な乱数ファイルの後ろから1文字ずつ消していき、
ファイルサイズを2GByteにすることってできますか?
ファイルサイズを取得するまではいけたのですが、
1文字ずつ消す方法がわかりません。
消す方法はありませんか?
0629デフォルトの名無しさん2006/08/15(火) 11:09:04
>>628
一文字ずつじゃなきゃいけないの?
ファイルサイズを単純に切り詰めるだけでいいならbsd/POSIX系関数で
truncate()/ftruncate()なんてのがあるけど。
0630デフォルトの名無しさん2006/08/15(火) 11:14:03
#include <stdio.h>
void mystrcpy(char *strA, char *strB);

int main(void)
{
char str1[11], str2[11];

puts("Input str1[11]");
fgets(str1, 10, stdin);

mystrcpy(str1, str2);
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);

return 0;
}
void mystrcpy(char *strA, char *strB)
{
int i;
for(i=0; *(strA+i); i++){
*(strB+i) = *(strA+i);
}
}
strcpy関数を自分なりにつくっていたところ、上のようなものができました。
ですがコンパイルして実行すると文字列のコピーはうまくいっているものの、
変な文字列(文字化けした文字)も出力されてしまいます。
どこらへんがおかしいのでしょうか?
(環境はWinXPHome、コンパイラがBorland C++ 5.1.1です)

また、先週からC言語を勉強し始めたのですが、
ポインタを引数にしたり戻り値として利用するところが自分には少々難しいと感じています。
何かわかりやすい本やウェブサイトがあったら紹介していただけないでしょうか。
0631デフォルトの名無しさん2006/08/15(火) 11:19:39
>>630
文字列の終端の'\0'をコピーしていない。
06326302006/08/15(火) 11:31:59
おお、まさにその通りです。
助かりました。

while(*(strB++) = *(strA++));

として解決しました。
0633デフォルトの名無しさん2006/08/15(火) 13:35:40
>>629
一文字ずつじゃなくてもいいのですが、
ケツから2MByteくらいを消したいんです。
学校の課題なんで、切り詰めるだけでもばれないとは思いますが・・・。

#もし乱数データじゃなかったらばれるか。
#でもメモリ足りなくて開けないし・・・。
0634デフォルトの名無しさん2006/10/08(日) 11:48:34
ここってC#スレ?
0635デフォルトの名無しさん2006/10/15(日) 08:22:41
CとC#を一緒にすんなヴォケ
0636タイトルのシャープが剥がされることも知らないのだろうか2006/10/15(日) 10:39:11
>>635
>1
0637デフォルトの名無しさん2006/10/15(日) 10:46:47
立てた奴の意図などどうでも良い。
0638デフォルトの名無しさん2006/10/16(月) 14:28:51
>>633
き ゃ ぴりん ☆ き っく ! でググれ
0639デフォルトの名無しさん2006/11/10(金) 13:56:33
質問です。
const int getHoge(){ return m_nData;}

というように、返り値にconstをつける意味はなにかあるのでしょうか?
ポインタなどを渡している場合ならわかるのですが、intやshortの場合の必要性がわかりません。
0640デフォルトの名無しさん2006/11/10(金) 16:38:07
>>639
製作者がconstなんだと叫びたいとき。
というのは冗談だが、Cではともかく、C++では違いが全然ないわけではない。
int foo();
const int bar();

template<typename T>
void hoge(T& x);

void f()
{
    hoge(foo()); //エラー:xはint&になるが、非constな参照型のインスタンスは右辺値で初期化できない。
    hoge(bar()); //xはconst int&になり、constな参照型のインスタンスは右辺値で初期化できるのでエラーにならない。
}
まあ普通はこんなことを気にする必要はない。
0641デフォルトの名無しさん2006/11/10(金) 17:04:47
>>640
ありがとうございます。
微妙な違いですね。

別のことを試してみたところ、const int getHogeは、
int n = getHoge()
とできてしまいました。全然constじゃないじゃん!
「エラー値とかだから計算する必要ないでしょ!だからconst!」って使い方をしようかと思ったのですが…。

素直にエラーはenumで型つけてやるほうがよさそうです。
ありがとうございました。
0642デフォルトの名無しさん2006/11/10(金) 18:50:47
>>641
そりゃぁ代入しちゃえばconst性は失われますがな。
でないと、int foo = 100;すらできなくなってしまう。
0643デフォルトの名無しさん2006/11/16(木) 10:06:58
/libpathの指定でProgram Filesみたいな空白のある場合ってどうすればいいのでしょうか?

#pragma comment (linker, "/libpath:\"/Program Files/XXX/lib\" ")
としてみましたがうまく動いていないみたいです

includepathの指定も#pragma でできないのでしょうか?
0644デフォルトの名無しさん2006/12/07(木) 21:14:26
DrawStringでタブ"\t"を表現する方法を教えていただけないでしょうか
検索しようにも上記単語だと難しいので困ってます
0645デフォルトの名無しさん2006/12/08(金) 11:40:13
方法 : 描画されたテキストにタブ ストップを設定する
http://msdn2.microsoft.com/ja-jp/library/2c6tzes6(VS.80).aspx
0646デフォルトの名無しさん2006/12/08(金) 12:51:09
>>645 ありがとうございます
そちらの参照先のように、決められた形(というのでしょうか)で表現したいのではなく
1 \t 222 \t 333
44444 \t 555
と表示する場合に3と5の表示開始位置が揃うようにしたいのですが
方法はないでしょうか
0647デフォルトの名無しさん2007/01/07(日) 17:26:01
学校の課題で使うのですが、ガウスの消去法で4行4列の式を解くプログラム乗ってるサイトありますか?
サイトから引っ張ってきていいと言われたので・・・
探したんですけどいっぱいあってどれが正しいのかわかんなくて
0648デフォルトの名無しさん2007/01/16(火) 20:37:54
結果が正しければどれでもいいのでは
06491312007/01/25(木) 21:12:22
すみません、誰か分かる人はいませんか?
どうしてもC言語でJPEG画像を表示したいんです。
おねがいします。
0650デフォルトの名無しさん2007/01/25(木) 21:22:39
適当に解凍してただのビットマップを取り出せばいい。
0651デフォルトの名無しさん2007/01/25(木) 21:47:22
jpeglibとかあるだろ
0652デフォルトの名無しさん2007/01/25(木) 22:01:39
次に131がレスするのは2010年頃と予想
0653デフォルトの名無しさん2007/02/15(木) 23:14:58
質問です!動的メモリ確保をつかったクラスみたいなものを作りたいんですが、
malloc() とfree()を使う方法では一つの関数内で完結させれば上手くいくのですが、
複数の関数でそれをやると上手く行きません。例えば↓では、関数b()で
エラーとなってしまいます。何故でしょうか?もう弱り果てています…

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

void a(int*, int); //メモリ確保
void b(int*, int); //メモリ開放

main(int argc, char* argv)
{
int size;
int* array1;
int* array2;
size=10;

//うまくいく
array1 = (int*)malloc(sizeof(int)*size);
free(array1);

//うまくいかない!(bのところでメモリ領域破壊が…orz)
a(array2,size);
b(array2,size);
}

void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); }
void b(int* array, int size){ free(array); }
0654デフォルトの名無しさん2007/02/16(金) 00:24:48
> void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); }
arrayはarray2のコピーであり、それを書き換えたところでarray2にmallocの戻り値は代入されない。
したがって未初期化のarray2をbに渡し、それをfreeしようとしてお亡くなりになる。
やるならvoid a(int** array, int size) { *array = (int*)malloc(sizeof(int)*size); }
0655デフォルトの名無しさん2007/02/16(金) 00:40:54
>>653
関数a()に渡したarray2は、array2自体が何ら設定されていないのだがあんたの使うコンパイラは警告してくれないのか?
オプションで警告レベルを調整できるのなら引き上げておくことを進めておく。

で、件の目的なら>654でもいいがint * a(int size) {return malloc(sizeof(int) * size);}でもいいね。
0656デフォルトの名無しさん2007/02/16(金) 01:07:52
#include <stdio.h>
void f(int i) {i = 42;}
void g(int* p) {*p = 42;}
int main(void)
{
int x = 7;
f(x);
printf("%d\n", x);
g(&x);
printf("%d\n", x);
return 0;
}
上と同じ理屈。短絡的に言えば引数経由で値を返したいときには*の数を1個増やすということになる。
#include<stdio.h>
#include<stdlib.h>
void MyAlloc(int**, int);
void MyFree(int*, int);
int main(void)
{
int size = 10;
int* array2;
MyAlloc(&array2, size);
MyFree(array2, size);
return 0;
}
void MyAlloc(int** array, int size) {*array = (int*)malloc(sizeof(int) * size);}
void MyFree(int* array, int size) {free(array);}
0657デフォルトの名無しさん2007/02/17(土) 19:47:47
共有メモリ上にポインタを利用した連結リスト作成したいけど
どうやって作ればいいのですか?
0658デフォルトの名無しさん2007/02/18(日) 14:52:37
>654-656
有難う御座いました!なぜダメなのかも解りました。
これで課題の〆切に間に合いそうです.。。
0659デフォルトの名無しさん2007/03/02(金) 19:45:06
Windowsでマイクロ秒まで測る方法を教えてください
環境は、WindowsXP+bcc32です。
0660デフォルトの名無しさん2007/03/03(土) 17:46:55
>>659
どんなアプリ作ろうとしてんの?
そもそもXPはRTOSじゃねーからマイクロ秒でなんらか
の値がとれたとしても精度はないよ?
0661デフォルトの名無しさん2007/03/10(土) 13:47:24
Cを勉強したいんですが
まず最初に読んだらいい本ってありますか?
種類が多すぎてどれがいいか分からないんですけど
0662デフォルトの名無しさん2007/03/10(土) 22:36:29
起動されているスレッドを順番に停止する関数を作りたいんですが、
何の関数を使えばいいんですかね?
pthread_join()は起動しているスレッドが自分で終了するまで待ってる関数だから
無限ループしているスレッドを終了できなし。
pthred_exit()はpthread_join()の戻り値を引数に使うからpthread_join()使わないと無理だし。

誰かお願いします。教えてください。
0663デフォルトの名無しさん2007/03/29(木) 14:09:47
>>661
ナカーマ
しかし俺はさっきコンパイルという言葉を知ったモロ初心者><
0664デフォルトの名無しさん2007/04/03(火) 16:42:11
推薦図書/必読書のためのスレッド PART34
http://pc11.2ch.net/test/read.cgi/tech/1173930196/l50
0665デフォルトの名無しさん2007/04/17(火) 12:59:56
#include <windows.h>
#include <stdio.h>


void main()
{
 double a;

 a = 2/6;
 printf("%f\n", a);
}

VC6にて上のように単純に2÷6を計算したら0が出力されます。
0.33333・・・を出したいのですがどうすればいいのでしょうか?
0666デフォルトの名無しさん2007/04/17(火) 13:08:06
↑
解決済みです
0667デフォルトの名無しさん2007/05/14(月) 22:11:03
windowsXP上でcのプログラミングをしたいのですが
フリーのものでコンパイラ、エディタなどでお勧めのものを教えてください

なるべく日本語のもので見易さ、編集しやすさ最優先で、
linux上でも動かしやすいものであれば嬉しいです(←これはついでなのでそこまで重要でもない)
0668デフォルトの名無しさん2007/05/14(月) 23:51:43
残念ながらcは英語をベースにした言語なので、「日本語のc」はありません。
0669デフォルトの名無しさん2007/05/15(火) 01:39:33
下らないレスするくらいなら相手するなよ…
>>667
好きなの選べ
ttp://homepage3.nifty.com/mmgames/c_guide/p_compiler.html
0670デフォルトの名無しさん2007/05/15(火) 01:49:55
>>667
Linuxなら、どのディストリにもgccが入っているだろうし、vi(vim)かそれが嫌ならemacsがあるだろ。
それを踏まえて、WinXPでもcygwin入れてgccを使えばいいし、取り敢えずvimでいいだろ。
0671下らなさの2乗2007/05/15(火) 10:15:29
>>668
「c」などという言語はありません。
0672デフォルトの名無しさん2007/05/20(日) 03:27:08
OS:VineLinux
コンパイラ:gcc

こんばんは、ppm形式(フルカラーraw形式)の画像のピクセルごとの,R,G,Bの色のデータを
メモリを動的に確保して1次元の配列にぶち込みました。
これを任意の角度回転しようと考えているのですが、
どうも1次元の配列ですと直交座標で扱いにくく困っています。
そこで新たに二次元配列を動的に確保して・・・とも考えたのですが
元画像、出力画像のデータを取り込んでいるので、得策でもないような気がします。
なんとか直交座標系として扱いつつ、元画像を回転させて出力画像を作る方法ありませんでしょうか?
ソースがあるだとかよい案があればよろしくお願い致します。
0673デフォルトの名無しさん2007/05/20(日) 03:50:33
>>672
座標計算する関数を作ってしまうとか。
http://pc11.2ch.net/test/read.cgi/tech/1179301993/99
0674デフォルトの名無しさん2007/05/20(日) 06:03:17
printfの書式で14.850000や2.00や5.012000の様に小数点以下で最後に0が続く場合、
その0を省略する方法を教えて下さい。
0675側近中の側近 ◆0351148456 2007/05/20(日) 08:16:09
>>674
(っ´▽`)っ
printf("%.0f\n", d);;
0676デフォルトの名無しさん2007/05/20(日) 08:19:40
’0’、’1’、’2’、’3’を’-1’、’0’’、’1’、’2’に置き換えるためにhand=C-’0’-1とするのですが、この式の間の『’0’』の存在意義がよくわからないです。
0677側近中の側近 ◆0351148456 2007/05/20(日) 08:29:08
>>676
(っ´▽`)っ
>hand=C-’0’-1
このCには文字が入っているんじゃないかな?
このhandには数値が入っているんじゃないかな?
Cに'3'が入っている時を例に挙げよう。
'0' = 0x30 = 48
'3' = 0x33 = 51
hand = 51 - 48 - 1 = 2
つまり、文字を数値に変換するために'0'の値を引いているの。
'0'(文字の0)と0(数値のゼロ)は違うのはわかるよね。
メモリに格納される時のビット列が違うの。
2進法で考えると
'0'は00110000、0は00000000で格納されるよ
0678デフォルトの名無しさん2007/05/20(日) 08:32:40
>>674-675
それよりも%gだろ
0679側近中の側近 ◆0351148456 2007/05/20(日) 08:34:52
>>674
>>678
(っ´▽`)っ
そうだった!
%.0fだと小数点以下が全く出なくなっちゃうね☆
0680デフォルトの名無しさん2007/05/20(日) 08:38:50
あっ、はい。文字としての扱いのままでatoiとかはしてありませんでした。
大変ありがとうございます。ところで、、'0' = 0x30 = 48
'3' = 0x33 = 51
とゆう式の流れはまだ学習していません。できれば教えて下さい。
0681側近中の側近 ◆0351148456 2007/05/20(日) 09:01:43
>>680
(っ´▽`)っ
文字コードだよ。
ISOとかそういう偉いところが0x30は'0'を表すって決めたんだよ。
ところで、0x30は「16進法で30」っていう意味だよ。
0xがつくと16進法
0がつくと8進法
ちなみに'\n'は0x0a、'\0'は0x00だよ。
0682側近中の側近 ◆0351148456 2007/05/20(日) 09:06:10
(っ´▽`)っ
最も基本的な文字コード、ASCII
ttp://ja.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange

他の文字コードはASCIIを踏襲しているよ。
シフトJISとかunicodeとかもASCIIの文字コードを含んでいるよ。
06836722007/05/20(日) 09:21:35
>>673
ありがとうございます。
座標の計算関数はできてはいるんですが、力及ばず入出力を二次元配列でしか設計できませんでした
ということでそっちに行ってきます
0684デフォルトの名無しさん2007/05/20(日) 09:23:06
大変ありがとうございます。やっと理解できました。
0685デフォルトの名無しさん2007/05/20(日) 10:11:40
やっぱわかんないちす。51と48は何を表してるんすか?てか16進法わからないです。
0686デフォルトの名無しさん2007/05/20(日) 10:19:34
やっぱわかりました。十進法ですね。
0687デフォルトの名無しさん2007/06/05(火) 02:44:30
文字コードの話題がちょうどでてるので、タイムリーに質問。

cygwinでgccでコンパイルするときって、shift-jis以外は使えないんでしょうか?
ちなみに、OSはwin-xp proです。

「表」の字がコンパイルしたら、エラーがでました。
んで、色々しらべて、shift-jisがまずくて、他にもエラーがでる文字があるってことまではわかったんですが、
解決法がいまいちわかりませんでしたorz

もちろん、ソースの文字コードを色々と丸々かえて、再コンパイルしてみましたが、
完全に文字化けしてしまいました。
解決法とかはありますか?
また、もし、他の文字コードを使えるのでしたら、オススメの文字コードとかありますか?
0688デフォルトの名無しさん2007/06/05(火) 04:18:32
>>687
つ input-charset
いろいろどころか全然調べてないだろ
0689デフォルトの名無しさん2007/06/05(火) 04:31:44
ついでにexec-charsetも
0690デフォルトの名無しさん2007/06/05(火) 05:00:00
んじゃ更に、
input-charset=euc-jp exec-charset=cp932
とか書いてみる。
0691デフォルトの名無しさん2007/06/06(水) 03:06:28
>>688-690
勉強になりました。
�dです。
0692デフォルトの名無しさん2007/06/13(水) 13:28:58
グローバルで宣言してた変数などを
ポインタ等使ってローカルでの宣言で実装すると
常時使ってるメモリは少なくなると思うんですけど
速度的にはグローバルで宣言したほうが良いんですか?
0693デフォルトの名無しさん2007/06/13(水) 15:33:33
>グローバルで宣言してた変数などを
>ポインタ等使ってローカルでの宣言で実装すると
>常時使ってるメモリは少なくなると思うんですけど
>速度的にはグローバルで宣言したほうが良いんですか?

グローバルかローカルかと言う議論にポインタは関係ない。
使用メモリを云々するほど広大なメモリを取り扱う話ならヒープを使うべきだ。
速度に関しては、実測が基本。
0694デフォルトの名無しさん2007/06/13(水) 16:57:01
これの話にポインタは関係ないですけど、
複数の関数で共通した変数使う場合に
普通はグローバルで宣言してしまいますけど
ポインタなど使えばローカルの宣言でもイケるけどどっちが速いのか
って事を聞きたかったんです。
けど、実測しかないですか。
メモリも抑えなきゃいけないんだけど速度を最重視して作らないいけなくてorz
0695デフォルトの名無しさん2007/06/13(水) 17:27:44
>>694
>複数の関数で共通した変数使う
ために
>ポインタなど使えばローカルの宣言でもイケる
というのはつまり、malloc() 等でヒープを確保するんだろ?
>普通はグローバルで宣言
した場合は static なデータとしてロード時に確保されるわけだが
使用するメモリ量にはまったく差がないし、速度にも有意な差があるとも思えん。
よって益々、>>693 の結論通り。
0696デフォルトの名無しさん2007/06/13(水) 17:53:55
速度は変わらないんですね。
それだけ教えていただいて感謝してます。
ありがとうございました。
ただ、メモリ量は差はあると思われます。
0697デフォルトの名無しさん2007/06/13(水) 18:12:45
スタックとヒープの区別もつかないやつが、「差はあると思われます」と言ってもなあ・・・
0698デフォルトの名無しさん2007/06/13(水) 18:30:47
メモリ使用の差の話は、静的確保だとプログラムの実行期間中ずっと
確保されたままなのに対して、動的確保だとそうではない、ということだろ。

>常時使ってるメモリは少なくなると思うんですけど
0699デフォルトの名無しさん2007/06/16(土) 01:11:57
寒いなスレ開いちまった。。
間違った事言ったなら質問者と回答者の立場はどうあれ一言くらい・・・
0700デフォルトの名無しさん2007/06/28(木) 08:34:31
初心者とか中級者とか上級者の堺はどのあたりだと思いますか?
0701デフォルトの名無しさん2007/06/28(木) 10:01:11
大阪のあたりじゃね?
0702デフォルトの名無しさん2007/06/30(土) 06:08:03
境でした。。すみません
0703デフォルトの名無しさん2007/06/30(土) 10:14:38
鳥取のあたりじゃね?
0704デフォルトの名無しさん2007/06/30(土) 11:21:39
東京にも武蔵野市に境がある
0705デフォルトの名無しさん2007/06/30(土) 11:25:12
住所にはないのに、町田市の駅にも境がある。
0706デフォルトの名無しさん2007/06/30(土) 17:27:24
私はあなたたちを少しかいかぶっていたみたいです
こんなにイライラするレスを返されたのは初めてではありませんが
それでもかなり上位に来るうざさだと思います
日本語が通じてるのにわざと他の意味を探す病気がPGには流行っているみたいですね
私の知り合いもそういうビョーキにかかっている時期がありました
本人はただふざけているだけのようなのですが
周りからしてみればはたはた迷惑です
面白くもなんともないのに本人は延々とボケを続けるんですからね
あなた方もそれと同じ事やっているんですけどどうですかわかりませんか
全然面白くないですよ少しはバラエティ番組でも見たらどうでしょうか
バラエティ番組見たからってあなたたちが面白い事を言えるとは思いませんが?
冷めるネタくらいは学習できると思いますちょっとあまりにもこれは酷い流れだと思います
更新されてないスレッドでもお気に入り登録にして毎日巡回でもしているんでしょうかね
質問スレで質問する人回答する人、スレは違っても同じだったりすることがよくあるんじゃないでしょうかね
けれど同じスレで違うことを聞かばスレ違いと言い別のスレで同じ人が答えたり?面白いですねそういうの
このスレの人達は凄くつまらないです一ミリたりとも笑える要素がないと思います
笑えるスレにしてくださいとは言いませんがこういう流れを作るんだったら
もう少しひねるとかしてくださいねってくださいね
0707デフォルトの名無しさん2007/06/30(土) 17:30:45
もう少しひねるとかしてくださいねってくださいねってくださいねってくださいねってくださいねってくださいね

いかん、流石に飽きた。
0708デフォルトの名無しさん2007/06/30(土) 17:39:03
>>706
初級とか中級とかワケ解らん質問したのお前なのか?
くだらん質問をしたのを反省しろよ
0709デフォルトの名無しさん2007/06/30(土) 22:56:03
>>706
人の振り見て輪が振りなおせ。そのレスもおもしろくないぞ。
おもしろくしたいと思うなら、まず自分からおもしろいレスというものを見せてほしい。

まあでも、この板にいるような人間なんて、それが本業ではないのだから、
おもしろさを期待するほうが間違っている。

と、やっぱりおもしろくないマジレスを返してみる。
0710デフォルトの名無しさん2007/07/01(日) 04:32:22
>>706
で、君は誰なの?
0711デフォルトの名無しさん2007/07/01(日) 21:21:08
数式Parserのライブラリってご存知ないでしょうか?
複素数計算機能を付加したいんですが、
bcに丸投げというのも力づくすぎるような気がしてまして・・・・
0712デフォルトの名無しさん2007/07/01(日) 22:46:54
初歩的な質問で申し訳ないです
文字エンコードについての質問ですが、
HPから特定の文字列を検索して取得するプログラムを作ってたんですが、
対象のサイトの文字コードがEUCの場合、一旦JISに変換して文字列比較をしないといけないですよね?

文字エンコード変換の、簡単なソースを知ってたら教えていただけないでしょうか?
0713デフォルトの名無しさん2007/07/01(日) 22:49:08
>>712
EUC⇔SJIS⇔iso2022の変換は難しくないが、どうせUTFとの変換で悩む羽目になるから
iconvか何かのライブラリを使っとけ。
0714デフォルトの名無しさん2007/07/01(日) 22:53:46
>>713 
返信ありがとうございます。

勘違いしてました。
オープン・ソース使ってうまくいかないと思ってたら
EUC -> SJIS しなくてはいけないのに
SJIS -> EUC としてました。
お手数かけましたm(_ _)m
0715デフォルトの名無しさん2007/07/02(月) 00:15:07
初歩的な質問ですがよろしくお願いします。

とある関数内で、malloc()でヒープ領域を確保して
得たポインタを別のタスクに投げ渡すという処理をしています。

他のタスクに投げ渡したら領域を確保した関数は、終了します。

malloc()で作った領域は、free()を行うまで領域の確保されているんですよね?
逆にmalloc()のヒープ領域で無く関数内で定義した変数のポインタだと
どうなってしまうんでしょうか?

関数終了しても変数のポインタさえ分かればどこからでも
値は取り出せそうなのですが・・・・・。

聞きたいこととしては、
・malloc()で得た領域は、関数が終了しても参照できますか?
・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?

です。よろしくおねがいます。
0716デフォルトの名無しさん2007/07/02(月) 08:42:36
>・malloc()で得た領域は、関数が終了しても参照できますか?
yes

>・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
int *f(void)
{
  int local;
  return &local;
}
みたいなの?
それなら、関数終了時点でポインタは無効になる。
0717デフォルトの名無しさん2007/07/03(火) 01:18:45
>>716
レスありがとうございます。

>・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
の質問に対する例題としては、似たような感じです。
下のようにローカルなスコープで定義した変数を
他タスクに渡して処理を終えた時にもint localのポインタは有効であるか?
と言う事が気になってたのです。
丁寧な説明ありがとうございました。

int f( void ){
int local;

test(&local);   /* 他タスクへイベント要求 */
}
0718デフォルトの名無しさん2007/07/03(火) 11:19:17
無効
0719デフォルトの名無しさん2007/07/03(火) 15:27:36
>>717
それだったら test() を終了後も local は使えるよ。
int local は f() からリターンするまで有効。
0720デフォルトの名無しさん2007/07/03(火) 17:49:59
>>719
質問を読み違えてないか?
タスク云々といってるんだから、testが引数をなんらかの形で保存していて、
それがfが終わった後も有効かという話だろ。
0721デフォルトの名無しさん2007/07/03(火) 17:53:52
testがポインタをグローバルな変数に入れたり、longjmpしたりするんかいな
0722デフォルトの名無しさん2007/07/03(火) 17:58:31
>他タスクに渡して処理を終えた時
これがどういう・・
0723デフォルトの名無しさん2007/07/03(火) 18:05:43
別スレッドに渡したり。
0724デフォルトの名無しさん2007/07/03(火) 23:36:06
ただでcをやりたいんですが、なんてソフトをDLするといいですか?
0725デフォルトの名無しさん2007/07/04(水) 00:42:18
環境は?
0726デフォルトの名無しさん2007/07/04(水) 00:44:16
まあwindowsならBCC(Borland C++Compiler)で間違いないと思うよ。
CもC++もいける。
けどサイトが長い間落ちてるっぽいね
よくわからんけど
0727デフォルトの名無しさん2007/07/04(水) 00:54:28
>>726さん
虫けらLevelの質問ですみません。
今日書店でC++ Buiider 6.0というのを見たんですが、
Buider 6.0ってなんなんですか?
後、聞きたいんですが、
トロイの木馬やキーロガー、白木葉子はどの言語で作れるのでしょうか?
0728デフォルトの名無しさん2007/07/04(水) 00:57:01
そんなものが作りたいなら自力で全部やれ
そうでない限り作れん
0729デフォルトの名無しさん2007/07/04(水) 01:04:35
>>728
自力……かぁ(´・ω・`)
まぁ…確かになぁー…
甘えてられないか
0730デフォルトの名無しさん2007/07/04(水) 09:03:54
くだすれC++Builder(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1171219191/
綴りが違う上に同じレス内でも違うのはどうかと
0731デフォルトの名無しさん2007/07/04(水) 09:14:02
そういうのは”ログが残らない場所”で聞け
てかいろんな意味で貴殿はC/C++やられるのが良いと思う
俺は作った事無いから、作った事ある奴じゃないとわかんないと思うけどな
0732デフォルトの名無しさん2007/07/04(水) 09:20:18
bccぐらい凡人でも猿でも軽々入手できるもんなんだから
そんなところで2chの質問スレに頼ってるようじゃ
何も書けんぞマジで
本当にやる気あるのか
0733デフォルトの名無しさん2007/07/04(水) 10:57:33
いやいや、凡人や猿は何も考えずにVS買うよ
買ってくれておおいに結構
0734デフォルトの名無しさん2007/07/04(水) 12:21:42
>>731
本買おうと思う。
開発環境は…どうなのかな家のPCネット繋がってないから
ネットカフェとかしかないんだ
0735デフォルトの名無しさん2007/07/04(水) 16:33:15
>>724
KNOPPIX, Debian GNU/Linux, Fedora 7, Vine, Plamo, ...
0736デフォルトの名無しさん2007/07/04(水) 16:35:05
…マイクロソフトのVisual C++ 6.0(開発ツール)って高いんですか?
0737デフォルトの名無しさん2007/07/04(水) 16:38:48
いまさらそんなバージョン買うなよ
0738デフォルトの名無しさん2007/07/04(水) 16:49:00
どうしよう
0739デフォルトの名無しさん2007/07/04(水) 17:02:53
>>737
今はどんなバージョンがあるんですか?
後…高い?
0740デフォルトの名無しさん2007/07/04(水) 17:04:54
VC++6.0 → 2002 → 2003 → 2005
今は2005だな、EEなら無料。
MFCとリソースエディタが無いけどな。
0741デフォルトの名無しさん2007/07/04(水) 17:23:23
>>739
Visual C++ 2005 Express Edition 無料
Visual Studio 2005 Standard Edition 3万円弱
Visual Studio 2005 Professional Edition 11万前後
0742デフォルトの名無しさん2007/07/04(水) 17:26:00
>>740さん
2005って高いんですか?
0743デフォルトの名無しさん2007/07/04(水) 17:31:38
>>742
2005のEE=Express Editionは無料

今からプログラミング始めるの?
ググる事くらい覚えないと習得できないよ
0744デフォルトの名無しさん2007/07/04(水) 18:06:14
>>741
Academic (中身はStandard) 4,800円もあるだろ。
0745デフォルトの名無しさん2007/07/04(水) 18:06:19
>>743さん
ググれますが、携帯からしかネットできないんです
んでもって俺プログラミング初めてなんです。
FLASHLITE
XHTML
PHP
かじった程度の人間ですから。
>>741さんは何を使ってるんですか?
0746デフォルトの名無しさん2007/07/04(水) 18:13:09
>>745
自分はProfessional版使ってるよ
これから勉強を始めるならExpress版でも十分できる
物足りなくなってから上位のバージョンを買えばいいと思うよ
或いはその頃には次期バージョンが出てるかもしれないし
じゃあまずPCでネットする環境を整える事から始めよう
0747デフォルトの名無しさん2007/07/04(水) 18:15:35
>>746さん
優しいですね(´・ω・`)
ありがとう
0748デフォルトの名無しさん2007/07/05(木) 11:44:35
私のコーディングスタイルは、
グローバル変数 int ThisIsIntExtern  //単語の先頭を大文字
ローカル変数  int thisIsIntLocal   //単語の先頭を大文字(ただし最初の文字は小文字)
関数 void this_is_function(){ }  //全部小文字で、下線でつなぐ
#define THIS_IS_MACRO //全部大文字で、下線でつなぐ
なんですけれど、変でしょうか?
07497312007/07/05(木) 13:56:16
>>734
初心者なら本買ったほうが良いね

Visual Studio買う以外の手段には
ネットカフェでbcc落としてメモリに入れて持ち帰るって事も出来るんだが手こずるかも
付属のCD-ROMとかにコンパイラが入ってる本を買う手もある
けどね、分からない所はすぐぐぐれないとやってらんなくなるかな
0750デフォルトの名無しさん2007/07/05(木) 23:01:16
>>748
別に統一されてりゃいいんじゃね?
Cのみだけど、俺の場合は
グローバル int g_iValue;
ローカル int iValue;
関数 int GetValue( void )
定数 #define VALUE_MAX
基本的に定数以外で"_"を使わない。
0751デフォルトの名無しさん2007/07/06(金) 02:32:34
よい子がC言語の勉強実況してるからみてやろうぜ
WMPのファイル→URLを開く→http://matoinu.orz.hm:30000をコピペ→OK

実況スレ
何でも実況V なんでも実況フリーダム
http://live24.2ch.net/test/read.cgi/livevenus/1183654888/

面白いぜwwwwww
0752デフォルトの名無しさん2007/07/08(日) 11:29:59
大学の講義などでC言語を教える立場に立つ為にはどれほどの勉強が必要なのでしょうか
ちなみに私は今までさまざまなプログラムを作成してきていてそれなりにCを使えるようになったと思うのですが
その先はどうやって勉強すればいいのか?

というのは将来、教授になりたいのですが
近い将来に助手になったときにプログラミングを学生に教える立場になるわけです
Webサイトで先生方の講義資料などを拝見してみますと、自分の知識力の低さを痛感するばかりです
とはいっても詳細な入門書レベルの内容なら全て空で説明するくらいはできるのですが
問題はその先なのです
0753デフォルトの名無しさん2007/07/08(日) 12:55:24
>>752
入門書なんていう役に立たないものを基準にしている辺りでダメ過ぎ。
0754デフォルトの名無しさん2007/07/08(日) 13:30:11
>>753
プログラミングの講義はプログラミング言語の使い方を教える講義です
役に立つか立たないかという有用性は、工学的には非常に重要な要素ですが
それはプログラムを作る者それぞれの価値基準に基づくものであり
教える人間が考える有用性を基準に講義すべきでは無いと思います
0755デフォルトの名無しさん2007/07/08(日) 13:41:22
>>752
講義資料を見て自分はまだ知らないと気づいた事って何?
0756デフォルトの名無しさん2007/07/08(日) 14:14:29
最初から本買わせればいいじゃん
あなたは本に書いてあること繰り返し説明する手間も省けるし
学生も本読めば済む気だるい講義を飛ばしてさっさと応用を学べる、万々歳
0757デフォルトの名無しさん2007/07/08(日) 16:26:13
講師なら言語の歴史や規格についても詳しくないとやだな。
環境依存のコードをさも標準かのように教えられたらたまったもんじゃない。

Cだけじゃなくアセンブラとかにもある程度精通してて欲しい。
少なくとも、例えばswitchとif-elseの羅列が最適化で大抵マシン語レベルで同じになるとか位は。

あとは、同じことを100回聞かれても折れない心と、mainが1000行あっても
解読できる根性があればいいんじゃね?
0758デフォルトの名無しさん2007/07/08(日) 22:25:40
ちゃんと教えないと自分が凄く読みずらいコードを数十人分解読する羽目になるわけか
考えただけでおそろしくなた
0759デフォルトの名無しさん2007/07/08(日) 22:44:38
×読みずらい
△読みづらい
○読み難い
0760デフォルトの名無しさん2007/07/08(日) 22:55:09
× △読みづらい
○ ○読みづらい
0761デフォルトの名無しさん2007/07/09(月) 06:20:06
やんでるか?お前ら
神経質なのはプログラミングだけで良いんだぞ
0762デフォルトの名無しさん2007/07/09(月) 14:35:10
×やんでるか?
○やんでるのか?
0763デフォルトの名無しさん2007/07/09(月) 14:38:28
やってるか?
0764デフォルトの名無しさん2007/07/09(月) 14:42:29
あめならやんでるよ。
0765デフォルトの名無しさん2007/07/12(木) 13:22:48
C言語をはじめようと、近所の図書館で「C言語を256倍使うための本」
なる本を借りてきたのですが、最初の数ページ目にCをやる前に、
パスカルとアセンブラをやれ、とあったのですが俺はどうすれば?
0766デフォルトの名無しさん2007/07/12(木) 14:04:33
そんなクソ本やらずにサイトでも見てやれ
Programing PlaceとかWisdomsoftとか
0767デフォルトの名無しさん2007/07/12(木) 20:41:57
Wisdomの人って若いよなー。
1981年って事は、今25〜26歳か。

自分の努力不足が身に沁みる。
0768デフォルトの名無しさん2007/07/12(木) 21:52:00
256倍使うための本シリーズは全部糞本だから^^;
くだらねー本量産してんじゃねーと思う^^;
0769デフォルトの名無しさん2007/07/12(木) 22:51:25
>>765
その本はあれだ、当時のマニア本だから。今勉強するために読む本じゃない。
07707652007/07/23(月) 22:10:38
レスをくれた人たちへ。

とりあえずアセンブリをやろうとMIPSの教本を同じ図書館で入手。
最初の数ページ目にC言語を先に理解しておく必要があるとあり、
無限回廊に突入。
0771デフォルトの名無しさん2007/07/24(火) 00:18:50
>>770
>769
0772デフォルトの名無しさん2007/07/25(水) 18:15:09
型の一時的な変換に関しての質問です。
もともと整数型,char型のデータをある関数内では実数型として扱わなければならないので
下のコメントのように別の配列を用意しました。
代入する際にキャスト変換(double)を使って型を合わせようとしたのですが
'double **' 型は 'int **' 型に変換できない(関数 main(int,char * *) )
2 番目のパラメータは int ** 型として定義されているので double ** 型は渡せない(関数 main(int,char * *) )
というように実数型に変換したつもりなのに整数型のままだったりするようです。
どうすれば正しく型変換できるでしょうか

#include<stdio.h>

int main(int argc, char **argv) {
unsigned char *data={1,0,1,1};
int **P={{1,0},
       {0,1}}; //この2つが本来のデータ型

double a;
int i,j;
double *data2, **P2; //コピー。ある関数function内でdouble型で扱う必要がある

for (i=0;i<2;i++) {
   for (j=0;j<2;j++) {
P2[i][j] = (double) P[i][j]; //型を合わせるために(double)でキャスト変換
   }
}

for (i=0;i<4;i++) data2[i] = (double) data[i];

function(a,P2,data2);
}

void function (double x, double **y, double *z) //ある型変数の型定義
0773デフォルトの名無しさん2007/07/25(水) 18:17:39
まてまて、配列でも構造体でもないものを{ }で初期化できないだろ。
0774デフォルトの名無しさん2007/07/26(木) 07:27:42
ポインタだけ宣言して領域の確保がされてないし
いきなり2次元配列でコピーしてるし
2次元配列のポインタだけ渡しても大丈夫な関数なのか
0775デフォルトの名無しさん2007/07/26(木) 10:07:59
上から下まで勘違いでできているな
0776デフォルトの名無しさん2007/07/27(金) 05:01:05
でも文字列だけ定数置けるのって理論的におかしいよな。
0777デフォルトの名無しさん2007/07/27(金) 07:36:20
別に
0778デフォルトの名無しさん2007/07/27(金) 07:36:39
>>776
const int という意味ではないんだよね
0779デフォルトの名無しさん2007/07/30(月) 10:22:05
http://tonosiki.mbnsk.net/uploader/src/up1495.jpg​;
この問題の(3)と(4)が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。
0780デフォルトの名無しさん2007/07/31(火) 10:35:21
Object not found!
0781デフォルトの名無しさん2007/07/31(火) 10:54:58
>>779
http://pc11.2ch.net/test/read.cgi/tech/1180856695/469
0782デフォルトの名無しさん2007/08/02(木) 20:15:17
蔵書整理してたら秘伝C言語問答ポインタ編が
amazonのユーズド価格がクソ高くなってるの発見したんだがなんなの?
0783デフォルトの名無しさん2007/08/04(土) 18:28:16
とりあえず出してるだけだろ
自由に設定できるんだし
0784デフォルトの名無しさん2007/08/05(日) 18:07:47
あ、値段設定って自由なんだ。
絶版本て高く売れるのかな。
0785デフォルトの名無しさん2007/08/21(火) 03:18:00
本にもよると思う
なんか絶版になった参考書は高く売れたりするとか
前アマゾンで本を売りまくってる人の番組中にやってたよ
0786デフォルトの名無しさん2007/08/25(土) 02:31:50
質問させてください。

以下のエラーメッセージが表示されてリンクに失敗しています。
考えられる原因があったら教えてください。

undefined reference to `__stdoutp'
0787デフォルトの名無しさん2007/08/25(土) 03:02:32
回答させてもらいます。

以上の情報では詳細の回答ができません。
より詳細な回答が必要なら情報をください。

__stdoutpが見つからない。
0788デフォルトの名無しさん2007/09/05(水) 18:03:01
何をどうしたら出たのか
0789デフォルトの名無しさん2007/09/09(日) 12:45:04
質問です。
外部から提供されているヘッダーファイルにエクスポート用の関数が記述されており、
ヘッダーに手を加えずにこの関数に処理を追加したいと考えています。
そこで、#define で関数名の変更を試みたのですが、
 error C2084: 関数は既に本体を持っています。
となってしまいました。
ヘッダーは今後も修正が入りそうなので、手を加えるのは回避したいのですが、
何か良い方法はあるでしょうか。

--test.h--(外部提供のヘッダーの例)
extern "C" void __stdcall test(int a, int b)
{
printf("%d + %d = %d\n", a, b, a+b);
}

--test_ex.h--(関数名を置き換えて、代わりにエクスポートさせたい関巣をを記述)
#define _test(a,b) test(a,b)
#include "test.h"
#undef _test

extern "C" void __stdcall test(int a, int b)
{
printf("合計出力\n");
_test(a, b);
}
0790デフォルトの名無しさん2007/09/09(日) 13:20:43
>>789
#define test(a,b) _test(a,b)
#include "test.h"
#undef test
じゃないか?
0791デフォルトの名無しさん2007/09/09(日) 15:04:35
>>790
あ、あれ。オオボケしてました。
意図した通りになりました。ありがとうございます。
0792デフォルトの名無しさん2007/10/21(日) 23:30:44
VC++ Express 2005 の C/CLI で質問良いですか?

関数に System::String ^XX を引数渡しして関数内でXXに値をセット
させようとしてるんですけど、これってひょっとして無理ですか?
String のメンバ関数って新規にインスタンスを作る関数はあるんですけど、
既存コントラスタの内容を「変更する」メンバ関数が無いんですけど・・・。
WCHAR やら char を素直に引数に使った方が良いんでしょうか・・・

VC Express 2005 + WindowsSDK で
Get/WriteProvateProfileString のラッパークラスをマネージドで作ってるんですけど、
これってひょっとしてかなり無謀ですか?API呼び出しはさすがにアンマネージドですが・・・


そもそも、VCのマネージドコードってひょっとして誰も使ってない?
.Net勉強するなら素直にC#でしょうか?
VCで.Netの勉強がてらマネージドでガリガリ書いてるんですけど、
まさか全然イミネェータイムしてます?
0793デフォルトの名無しさん2007/10/22(月) 00:52:02
System::Stringは書換不能な文字列。
どうするかというと、例えばSystem::String^% XXにするという手がある。
http://msdn2.microsoft.com/ja-jp/library/h9t2463y(VS.80).aspx
ネイティブで言えば、これでは呼出元に反映されないから、
void f(char const* p) {
p = "hoge";
}
こうするというのと同じこと。
void f(char const*& p) {
p = "hoge";
}
.NETの勉強についてだが、<C++を十分に理解しているのなら>、
C++/CLIでも構わないと俺は思う。逆にC++をよくわかっていないのなら、
素直に.NETに関してはC#で勉強すべき。
0794デフォルトの名無しさん2007/10/22(月) 00:59:14
ステレオで広がる初音ミク音源検索
http://youtv.atspace.com/?rSTV=STEREO+%E5%88%9D%E9%9F%B3%E3%83%9F%E3%82%AF
0795デフォルトの名無しさん2007/10/23(火) 09:31:07
>>793
動きました、ありがとうございます!
基本的な事なんでしょうが、個人レベルで言語理解は難しいですね・・・。
クラス自体を static ref に出来なかったりと色々苦労してます(汗
C++は「わかってるつもり」ですが、<static_cast>やら<reinterpret_cast>やらで
また勉強し直す必要がありそうです。

C#はwiki見た感じだと文法が凄く変わってるので一度じっくり
勉強しないと駄目ですね・・・
まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗
APIが恐ろしいほど使いにくいC#に需要があるとは・・・
0796デフォルトの名無しさん2007/10/23(火) 11:14:49
>まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗
席捲だろ。とてもそうは見えないが。
0797デフォルトの名無しさん2007/10/23(火) 23:46:00
質問なのですが、表示される文字の大きさを変えるにはどうすればいいのでしょうか?
0798デフォルトの名無しさん2007/10/23(火) 23:55:43
モニターを買い換える。
0799デフォルトの名無しさん2007/10/24(水) 00:06:56
>>797
それは「文字のサイズを変える」プログラムはどうすればいいか?ってことだよな?
0800デフォルトの名無しさん2007/10/26(金) 14:12:47
アセンブラって何?
0801デフォルトの名無しさん2007/10/26(金) 14:19:17
アセンブリ言語のプログラムを機械語のプログラムに変換するプログラム
0802デフォルトの名無しさん2007/10/31(水) 11:38:23
C++を学習するのに適切な書籍、WEBを紹介してください。

機械語、Cなどの言語は習得済です。
0803デフォルトの名無しさん2007/11/01(木) 23:23:45
質問です。
バイナリファイルを開いて、ファイルの先頭から順番に0、1を判別していきたいのですがどうすればいいでしょうか?
rbでファイルを開いてから後がどうしていいのかさっぱりわかりません。
0804デフォルトの名無しさん2007/11/01(木) 23:41:13
getc(fp) でファイルの先頭から順番に 1 バイトずつ読み込める
0805デフォルトの名無しさん2007/11/25(日) 19:54:45
mmapとSystem Vの共有メモリって、
どちらにどういう長所短所があるんでしょうか。
0806デフォルトの名無しさん2007/12/08(土) 04:59:38
bcc5.5って実行が長いプログラムだと途中で止まるとか仕様ある?
0807デフォルトの名無しさん2007/12/08(土) 05:28:15
ないだろ
0808デフォルトの名無しさん2007/12/08(土) 06:11:57
だよな。同じプログラムを100回動かそうと思ってやってんだけど90回はできて100回はできない・・・
0809デフォルトの名無しさん2007/12/08(土) 13:23:24
http://pink.gazo-ch.net/bbs/27/img/200512/550933.jpg
0810デフォルトの名無しさん2007/12/09(日) 00:33:09
>>808

そりゃどっかにバグがあんだよ。
勘だけど、メモリがらみと見た。
0811デフォルトの名無しさん2008/01/02(水) 01:14:10
int型のiを文字列に直す方法はありますか?
コンパイラはgcc, 言語はC言語です。
あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?
0812デフォルトの名無しさん2008/01/02(水) 01:24:10
> int型のiを文字列に直す方法はありますか?
sprintf,snprintf

> あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?
三つ目に何渡す気だ
0813デフォルトの名無しさん2008/01/02(水) 01:35:00
いや
"a" + i + "b"
のようなことがしたいので、
strcat("a", i, "b");
と出来たらなと。
0814デフォルトの名無しさん2008/01/03(木) 00:08:17
C++をやりましょう。
簡単にできますから。
0815デフォルトの名無しさん2008/01/03(木) 12:01:51
>>814
サーセン本線はRubyでして。
0816デフォルトの名無しさん2008/01/03(木) 15:24:37
sprintf()でなにが不足なんだ?
sprintf(buf, "%s%d%s", "a", 3, b);
0817デフォルトの名無しさん2008/01/15(火) 13:06:42
教えてください。union ビットフィールド型を引数としてわたしたいのですが、
それは可能なのでしょうか?
0818デフォルトの名無しさん2008/01/15(火) 19:25:45
>>817
なんでできないと思ったの?
08198172008/01/15(火) 20:56:24
>>818
union { /* WCER */
unsigned char BYTE; /* Byte Access */
struct { /* Bit Access */
unsigned char B7:1; /* Bit 7 */
unsigned char B6:1; /* Bit 6 */
unsigned char B5:1; /* Bit 5 */
unsigned char B4:1; /* Bit 4 */
unsigned char B3:1; /* Bit 3 */
unsigned char B2:1; /* Bit 2 */
unsigned char B1:1; /* Bit 1 */
unsigned char B0:1; /* Bit 0 */
} BIT; /* */
} WCER; /* */

このような定義がある場合に関数funk()の引数にWCER.BIT.B1を渡し、
関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、
引数や変数にはビット情報を保持できないと思っています。
その操作が必要なアドレスやビット位置を引数として渡して操作することは可能と思うのですが
処理速度を求めるためにビット直接操作したいのです。
0820デフォルトの名無しさん2008/01/15(火) 20:58:41
WCERごと渡せばいいんでないの?
0821デフォルトの名無しさん2008/01/15(火) 23:08:10
速度が欲しくて1ビット単位の書き換えとか頭おかしいんじゃね?
08228172008/01/15(火) 23:53:14
>>820
ありがとうございます。
WCERではなく、結合先によってビット位置が異なっています。
>>821
マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。
0823デフォルトの名無しさん2008/01/16(水) 00:00:24
ビットフィールド使うのをやめるといいと思うんだ
0824デフォルトの名無しさん2008/01/16(水) 01:15:46
>このような定義がある場合に関数funk()の引数にWCER.BIT.B1を渡し、
>関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、
>引数や変数にはビット情報を保持できないと思っています。
いいえ。ビットフィールドは渡せませんが、ビット情報は渡せます。

>処理速度を求めるためにビット直接操作したいのです。
いいえ。ビットフィールドを直接扱うことが最速とは限りません。

>WCERではなく、結合先によってビット位置が異なっています。
「結合先」ってなんですか? 自分語りをされても困りますが。

>マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。
いいえ。そんなのんびりした処理をするのなら多少重くてもなんら影響しません。
そもそも、ビット位置の計算は決して重い処理じゃありません。

結論。
>823
0825デフォルトの名無しさん2008/01/21(月) 20:09:47
Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。
プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
 本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
 今になって分かりました。
彼らもまた、理解できていなかったのです。
 プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
 私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
 興味がある方はどうか、下のサイトをみてみてください。
http://mori.eco.to/
0826デフォルトの名無しさん2008/01/22(火) 10:31:13
よし、NG追加
0827デフォルトの名無しさん2008/01/30(水) 20:22:40
すいません、c言語初心者なのですが以下のプログラムがうまくいかないのですがなんででしょうか?
修正点教えてもらえませんか?

#include<stdio.h>
#include <string.h>
#define STR_SIZE 256
int main(int argc, char *argv[])
{
int cnt;
int pri_cnt;
int n;
int k;
int sort_cnt1;
int sort_cnt2;
char temp[1];
if(argc < 3)
{
printf("\nUsage : %s STRING1 STRING2 [STRING3 ...\n\n",argv[0]);
return 1;
}

printf("\n** String data **");
for(cnt = 1 ; cnt < argc ; cnt++)
{
printf("\n%s",argv[cnt]);
}

printf("\n** Changed string **");
0828デフォルトの名無しさん2008/01/30(水) 20:23:32
for(cnt = 1; cnt < argc ; ++cnt)
{
k = strlen(argv[cnt]);
for(n = 0; n < k ; ++n)
{
argv[cnt][n] = argv[cnt][n] - 0x20;
}
}

for(sort_cnt1 = 1 ; sort_cnt1 < argc ; sort_cnt1++)
{
for(sort_cnt2 = sort_cnt1+1 ; sort_cnt2 < argc ; sort_cnt2++)
{
if(argv[sort_cnt1] > argv[sort_cnt2])
{
temp = argv[sort_cnt2];
argv[sort_cnt2] = argv[sort_cnt1];
argv[sort_cnt1] = temp;
}
}

}

for(pri_cnt = 0 ; pri_cnt < cnt ; pri_cnt++)
{
printf("\n%s",argv[pri_cnt]);
}
return 0;
}
0829デフォルトの名無しさん2008/01/30(水) 20:26:33
#include <iostream>
#include <string.h>
using namespace std;

int main()
{
char str[256] = "<a href=\"http://localhost\">link</a>"
"<a href=\"http://localhost\">link2</a>";
char *ptr;
int i = 0;
ptr = str;

while(1)
{
ptr = strstr(ptr,"http://");
if(!ptr)
break;

ptr += 7;
i++;
}

printf("http://の出現数は%dです。\n",i);

return 0;
}
http://の出現回数を数えているのですが、
悪い点、改善点等のご指摘を下さい。
0830デフォルトの名無しさん2008/01/31(木) 13:08:31
>>827
そのプログラムの目的と、どううまくいかないのかくらい書け。
>>829
お前もだ。
取り敢えず、C++ならstring.hではなくcstringをインクルードしとけ。
strの文字数は、その場合は自分で256に決めずにコンパイラに任せておけ。
流れを説明し易いように、iなんて変数名でカウントするのはやめておけ。
ptrを初期化しないで後から代入しているが、宣言時に初期化してしまえ。
0831デフォルトの名無しさん2008/01/31(木) 18:51:15
「g++43でコンパイルできないんだけど、どう修正したら
いいの?」とかいう質問はここでいいんでしょうか?
0832デフォルトの名無しさん2008/01/31(木) 19:16:36
いいよ
もしソースが長いなら直接貼らずにどっかうpれ
0833デフォルトの名無しさん2008/01/31(木) 19:19:07
>>831
他のコンパイラでコンパイルできると言うのなら、g++の問題だろうからgccスレがいいんじゃね?
そうじゃなくて、たまたま使ったのがg++だと言うのなら、ここでもいいと思うけど。
0834デフォルトの名無しさん2008/01/31(木) 19:39:27
>>833
「他のコンパイラ」のほうの問題かもしれないだろ
C++だとそういうケースがよくある
0835デフォルトの名無しさん2008/01/31(木) 20:01:39
upstreamの開発者の人にも一応pingは
したのですが、

具体的には
http://downloads.sourceforge.net/mecab/mecab-0.96.tar.gz
をg++43でコンパイルしようとすると
param.h:34: error: explicit template specialization cannot have a storage class
というエラーが出てコンパイル出来ない、という問題です。
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=461727
(私自身はdebianのmecabのメンテナではありません)
0836デフォルトの名無しさん2008/01/31(木) 20:03:21
因みにg++41では問題ないです。
0837デフォルトの名無しさん2008/01/31(木) 21:04:50
http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01075.html
g++の変更の論拠がここに書いてあるな。標準の7.1.1-1を見ると確かにエラーが正しいように見える
回避策は、

1. 単に32行目のstaticを削除する
これでg++-4.3ではちゃんとstatic扱いになるはずだけど、g++-4.2だとそうならないので複数定義エラーになる

2. lexical_cast自体を非staticにする
別にこれをstaticにする理由はないと思うので、20行目と32行目のstaticを削る
この場合、特殊化をヘッダに置いたままにしておくと複数定義になってまずいので、
ヘッダには宣言だけにして定義をparam.cppに移すか、あるいは単にinlineを付けるのでもいい

3. lexical_castを削除する
grepしてみたら使われてないようなので
0838デフォルトの名無しさん2008/01/31(木) 21:35:02
>>837
何だか32行目のstaticを外す方向がいい気がするけど
(何で lexical_castがstatic扱いなのか今のところ良く分からない
 ので)
そうすると確かにg++43ではコンパイルが通りますがg++41では
多重定義だといってはねられますね...

lexical_cast自体はparam.hの後の方で使われているっぽいです。
1.か2,かの方向で検討してみます。有難うございました。
0839デフォルトの名無しさん2008/01/31(木) 21:45:36
>>838
>lexical_cast自体はparam.hの後の方で使われているっぽいです。
見逃がしてた、ありがとう

でも非staticテンプレートからstatic関数を参照するのはODR違反のような気がする
lexical_castを非staticにするのが良いかと思う
0840デフォルトの名無しさん2008/02/05(火) 01:51:25
char *p[10];
みたいなことをしたいのですが
どうすればいいでしょうか?
0841デフォルトの名無しさん2008/02/05(火) 07:35:55
>>840
それで正しい宣言になってる(pはchar *の配列)けど、何をしたいんだ?
08428402008/02/05(火) 11:02:37
>>841
ありがとうございます。
windowsプログラミングでエディットボックスの中身を
複数保存できるようにしたかったのでこのようなことが
できるかわからなかったので質問させていただきました。
0843デフォルトの名無しさん2008/02/15(金) 17:21:49
メモリを確保し、
char *buf = (char *)calloc((int)dwSize+1,sizeof(char));
そこに、abcdefという文字列を入れます。
cの部分のみを読み取り、それがcであるか否かの判定をしたいのですが、
どうすれば出来ますでしょうか?
0844デフォルトの名無しさん2008/02/15(金) 17:24:34
if(buf[2] == 'c') ...
こういうこと?
0845デフォルトの名無しさん2008/02/15(金) 17:28:45
for(int i=0; i<=100; i++)
と
for(int i=0; i<=100; ++i)
の結果が違わないのは何故でしょうか

0846デフォルトの名無しさん2008/02/15(金) 17:37:15
>>845
i++と++iは同じ副作用を持つから。
この二つの式は違う値をもつ(前者ならインクリメント前のもの、後者は後のもの)けど、
for文の三番目の式は、副作用だけ利用されて値は捨てられるから、この違いが現れない
0847デフォルトの名無しさん2008/02/15(金) 18:41:19
ありがとうございます。
>>843です。
abcdefからbcを見つけ出しeまで抽出したいのですが、
どうすれば出来ますでしょうか?
0848デフォルトの名無しさん2008/02/15(金) 18:49:22
>>847
char * pbc = strstr(buf, "bc");
if (pbc == NULL) ...; // not found.
char * pe = strchr(pbc, 'e');
if (pe == NULL) ...; // not found.
char newBuf[pe - pbc + 1 + 1];
sprintf(newBuf, "%.*s", pe - pbc + 1, pbc);
0849デフォルトの名無しさん2008/02/15(金) 20:11:42
>>846
なるほど
後者は0に+1されてからiが代入されて
1からループが始まるのかと思ってました
ありがとうございました
0850デフォルトの名無しさん2008/02/16(土) 00:29:08
本当にありがとうございます。
解決しました。
buf[2]のみをダイアログ上のエディットコントロールに対し、
SendDlgItemMessageを使い書き込みたいのですが
出来ません。
どうすれば出来ますでしょうか?
0851デフォルトの名無しさん2008/02/16(土) 02:11:10
>>850
「ありがとう」と言われても、あんたが何者なのか誰も知らんから誰にも伝わらんぞ。
で、3行目以降についてもいきなり書かれても何のことやら判らん。
状況説明もできないのなら、なにもできるわけないだろ。
0852デフォルトの名無しさん2008/02/16(土) 02:24:07
状況説明
SendDlgItemMessageでエディットコントロールにbuf[2]を送ったが
エディットコントロールに文字列が追加されない。
0853デフォルトの名無しさん2008/02/16(土) 03:16:18
・環境は?
・buf[2]ってなに?
・SendDlgItemMessageをどう使って送ったの?
・あんた馬鹿?
0854デフォルトの名無しさん2008/02/16(土) 03:59:08
>>853
WindowsXP
bufについて>>843
0855デフォルトの名無しさん2008/02/16(土) 14:30:26
実際のコードを貼らない質問者なんてスルーでいいべさ。
0856デフォルトの名無しさん2008/02/16(土) 15:17:30
わかりました。
簡略化したコード
char *buf = (char *)calloc((int)dwSize,sizeof(char));
↓
ReadFile(hFile,buf,dwSize,&numOFRead,0);//ファイル内容abcde
↓
SendDlgItemMessage(hWndDlg,IDEDIT, EM_REPLACESEL,0,(LPARAM)((LPSTR)buf[2]));
0857デフォルトの名無しさん2008/02/16(土) 15:27:01
>>856
buf[2]は'c'という文字であって"c"という文字列じゃないから、それは動かない
まず"c"という文字列を用意して、それを渡す
char content[2];
content[0] = buf[2];
content[1] = '\0';
SendDlgItemMessage(hWndDlg, IDEDIT, EM_REPLACESEL, 0, (LPARAM)content);
0858デフォルトの名無しさん2008/02/16(土) 15:29:42
SendDlgItemMessageAを使った方が、って書こうと思ったけど、
comctl32.dllバージョン6だと、それはそれで面倒なことになる気がするから、書かないでおく。
0859デフォルトの名無しさん2008/02/16(土) 16:26:08
皆様へ
ありがとうございます!!
0860デフォルトの名無しさん2008/02/16(土) 16:31:38
csvファイルを読み込んで任意の値で描画する方法を教えてください。

CSVは x,y,value\nで数百行。
二次元配列 M[50][50] ///max
二次元配列 M[X][Y] にcsvのxをX,yをYでセット
二次元配列 M[x][y] にvalueを代入
※x,yはint valueはstr6バイト

forループでM[X][Y]を0,0から49,49までvalueを表示させる。
※空値の場合はカンマをセット

イメージ
aaaba,,,bbbb,,,,,,,,,asdass,,,,・・・
cccdse,,,,,,,,,,,,,,,,,,,,,,,,,,,bnvmde,,・・・
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bredkgalkser,・・・
,・・・

�@ファイル読み込み
�Ax,y,valueセット
�B描画
↑
�Bの描画でvalueが�Aで最後にセットされた値しか出てきません。

どなたか教えてください。
0861デフォルトの名無しさん2008/02/16(土) 16:36:29
>>860
丸投げしたいなら宿題スレへ、ヒントが欲しいなら質問箇所を絞って、エスパー希望なら鼬害。
>860=>859なら死ね。
0862デフォルトの名無しさん2008/02/16(土) 22:35:00
>>861
死ねよ低モラル野郎
0863デフォルトの名無しさん2008/02/22(金) 22:31:23
C99のinlineがc++のinlineと違うのでむかついた
0864デフォルトの名無しさん2008/02/22(金) 23:46:04
>>863
どこがどう違うの?
0865デフォルトの名無しさん2008/02/23(土) 11:59:46
int array[3] = { 0, 1, 2 };
この配列の
array[3]の中身がNULLというのは保証されていますか?

違いましたらforeachって、どういう中身になっているのか教えてください
0866デフォルトの名無しさん2008/02/23(土) 12:15:10
array[3]は存在しません
アドレスは取れますが、参照しようとしたり代入しようとすると未定義動作
foreachって何の言語よ?
0867デフォルトの名無しさん2008/02/23(土) 12:18:25
何の言語でも、array[3]へのアクセスができない言語なら
配列の要素数が3であるということを把握してループしているだろうということは容易に想像できる。
0868デフォルトの名無しさん2008/02/23(土) 12:23:44
C#じゃねーの?
0869デフォルトの名無しさん2008/02/23(土) 12:33:19
>>865
C#なら配列の長さを調べることができるから
for (int i = 0; i < array.Length; i++) {
  〜
}
ってやればいいんじゃね
0870デフォルトの名無しさん2008/02/23(土) 13:07:04
そもそもarray[3]はポインタじゃないのに何でNULLになるんだよ…
0871デフォルトの名無しさん2008/02/23(土) 13:10:44
たぶんあちこちでNULL文字とかNULL終端といった言葉が使われてるせいかと
0872デフォルトの名無しさん2008/02/23(土) 14:55:05
糞入門書の弊害か…
ASCIIの0の略語はNULLじゃなくてNULだな。
http://ja.wikipedia.org/wiki/ASCII#ASCII.E5.88.B6.E5.BE.A1.E6.96.87.E5.AD.97
混乱起こすから「ヌル文字」とか区別して書くべき。
08738652008/02/23(土) 16:21:31
>>867
3個である事を前提にループさせるんですね
発想が悪かったみたいです。。。
終端ばっかり調べようとしてました
配列のサイズ取得して割ったら出来ました
ありがとうございます
0874デフォルトの名無しさん2008/03/06(木) 22:24:02
サイトからダウンロードしたMicrosoft Windows SDKのIMGファイルが1.32GBもあって大きすぎてCDに入らないんですけどどうやってインストールするんですか??
0875デフォルトの名無しさん2008/03/06(木) 23:26:53
300行で1つの関数と、それと同等の処理を30行の関数が100個で構成するのとでは何が違うのでしょうか?
スタックがどうのこうのとブツブツ上司が呟いたのだが、なにが問題なのでしょうか
0876デフォルトの名無しさん2008/03/06(木) 23:48:44
>>874
Daemon ToolsでマウントするとかDVDに焼くとか。
0877デフォルトの名無しさん2008/03/06(木) 23:52:01
>>874
CDじゃなくてDVD用でしょそれ
0878300 * 1 < 30 * 1002008/03/07(金) 01:04:42
>>875
プログラムの規模が違う。
0879デフォルトの名無しさん2008/03/07(金) 22:49:11
その関数が呼び出されてスタックに詰まれる量が違う

300行分のコードが詰まれるのと
30行分のコードが詰まれるかの違い

けど、其れだけでブツブツ言うとも考えにくいので
他の問題があったのではと予想
明日聞くんだな
0880デフォルトの名無しさん2008/03/08(土) 00:48:30
>300行分のコードが詰まれるのと
>30行分のコードが詰まれるかの違い
はぁ? コードが詰まれる? どこの実装ですか?
おたくさまの脳内?
0881デフォルトの名無しさん2008/03/08(土) 20:35:29
int *ptr;
int array[10];
for(ptr=array; ptr<array+10; ptr++)
{
*ptr = 0;
}
array+10は何を表しているのですか?
0882デフォルトの名無しさん2008/03/08(土) 20:39:22
arrayの終端。
0883デフォルトの名無しさん2008/03/09(日) 15:23:37
>>880
そんな質問の仕方じゃ答えてあげないよ
とりあえず関数作って自動変数のメモリを表示させて確認する作業に戻るんだ
0884デフォルトの名無しさん2008/03/09(日) 15:39:23
そりゃ自動変数は積まれるだろうよ
コードが積まれるってのは訳分からん
0885デフォルトの名無しさん2008/03/09(日) 16:11:31
なんだ、>879の阿呆は未だ自分の間違いに気付いていなかったのか。
とっくに尻尾を丸めて引き篭もっているのかと思った。
0886デフォルトの名無しさん2008/03/09(日) 17:15:35
コードを詰む=スタックに実行アドレス(IP)を詰む

という意味なら通じるが、普通コードを詰むとは表現しないな
0887デフォルトの名無しさん2008/03/10(月) 14:28:02
>>886
詰むなよ。ゲームオーバーじゃねぇか。
0888デフォルトの名無しさん2008/03/11(火) 01:58:55
んあ?
よくわからない

コードをじゃなくて
「実行アドレスを積む」なら俺リアルで恥かかない・・・?

コードって全体をさしてるものと思ってたんだけど。
処理のみの部分をいうのかな
0889デフォルトの名無しさん2008/03/11(火) 02:26:33
実際に実行命令をスタックに積んでるわけじゃないから
0890デフォルトの名無しさん2008/03/12(水) 08:05:39
ほんとはよく知らないんですよ
誰も質問答えないのに見かねてしまった
ごめんね、適当答えて。


まとめると

関数に入ったら
 変数はスタックに詰まれる
 処理はスタックに詰まれない

てことですね ( 信じるかどうかは貴方次第!

掘り返し875の違いを、ソースを見ずに言える事は、
やはり上司に聞けとしか、言えないですね
0891デフォルトの名無しさん2008/03/12(水) 08:08:55
>>890
>878は読めないんですか?
特に名前の辺りは。
0892デフォルトの名無しさん2008/03/12(水) 08:13:17
例えばgooなどでああいう回答してもポイント貰えませんよ
自分はそんな目的ではありませんけども
0893デフォルトの名無しさん2008/03/12(水) 08:20:49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0894デフォルトの名無しさん2008/03/12(水) 08:22:47
でもコード量が十倍も違うなら、それが一番重要な差異だろ
0895デフォルトの名無しさん2008/03/29(土) 08:59:59
>>893
可能です。
以上。
↓次どうぞ
0896デフォルトの名無しさん2008/03/30(日) 18:20:29
VC++.NET の質問良いでしょうか?

1.UAC ダイアログを「インストール」ボタン押下時にのみ出したい
  1つの EXE でWindowsサービスのインストール、アンインストール、
  Windowsサービスの実行の機能を入れたんですが、
  VISTA のユーザーアカウント制御機能(UAC)のせいで、
  「管理者で実行」でプログラムを立ち上げないと上手く動きません。

  フォームの「インストール」ボタンをクリックした時だけ
  ユーザーアカウント制御のダイアログを出すように出来ませんか?

  常時Admin権限で動作ってのも都合悪いのですが・・・
  ユーザーに Admin 権限を持つのユーザー名、パスワードを入れて下さい、
  なんて画面を作った所で「???」だろうし
   ( VISTA インストール時に Admin パスワード入力しませんものねぇ。)

2.Windows サービスの設定ファイル、XXX.ini
  ってどこに置けばいいんですか?
  VISTA だと users 以下に入っちゃう空気ですが、exe と
  同じ位置だとNG?
  PC汚染を覚悟の上で windows 以下に入れるのが良い??

教えて君ですがよろしくお願いします。
UAC の情報ねーんですよぉぉぉ!!(絶叫
0897デフォルトの名無しさん2008/03/30(日) 21:40:07
>>896
1
任意のタイミングで昇格は不可能ではないが、面倒そうなんで、
管理者権限が必要な部分だけ別プロセスにすることを勧める。

2
複数ユーザが同時ログオンしたら破綻するという点で、
Windowsフォルダもアウト、常考。
0898デフォルトの名無しさん2008/06/15(日) 12:50:03
スタックに関してよくみかける記述について1つ疑問。

1)スタックはLIFO(Last In First Out)方式であり
 後に入れたデータから先に読みだされる
2)関数の引数及びローカル変数はスタックに積まれる

さて、問題。

int add(int a, int b)
{
int c;

c = b;
c = a+c;
return c;
}

という関数があった場合、スタックにはこのように
データが積まれると考えられる。

変数 c (ローカル変数)
変数 a
変数 b (最後の引数から積まれる)
(スタック領域の先頭アドレス)

1)に従えば、データはc->a->bの順番でしか取り出せない
はずだが、プログラムでは明らかにaより先にbの値を参照
して値を読みだしている。これはスタックのルールに
反するのではないか?

あなたはこの疑問を明確に説明できますか?
0899デフォルトの名無しさん2008/06/15(日) 13:33:21
>>898
int add(int a,int b);
では、内部的に
struct {
int a,b;
int c;//ローカル変数用
}add_param;
を積んでるんだと考える。
スタックに一度に積めるデータの単位は別に固定じゃない
スタックは抽象概念だからね。
09008982008/06/15(日) 13:52:30
899さんの考えではint型変数a,b,cを含んだ構造体を一度に
PUSHしたから、取り出すのも同時にPOPできる・・・だから
変数を使用する順番は関係ないのだ、とこういう理屈でしょうか?
そうだとしたら何かおかしくありませんか?

ヒントですが898の日本語の文章はわざと誤解を生じるような
表現が使われています。スタックの本質は、PUSHにしろPOPに
しろ、それは必ずスタックポインタの遷移を伴う操作でなければ
ならないということです。POPするということはスタックから
データを取り除く、つまり”そのデータはもう使わないよ”
という意味ですよね? さて、898で私が書いた"値を参照"
する行為は果たしてPOPでしょうか?
ここをじっくり考えると何が問題だったか見えてくると
思いますよ。






0901デフォルトの名無しさん2008/06/15(日) 14:04:38
何かおかしくありませんか?と書いてどこがおかしいのか指摘しないのはどうよwww

ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで
0902デフォルトの名無しさん2008/06/15(日) 14:06:55
寧ろ、struct {int a, b;}をスタックから取り出していると捉えてもいいかもしれない。
その後の仮引き数やローカル変数がスタックに積まれるかどうかは実装依存だし。
0903デフォルトの名無しさん2008/06/15(日) 14:20:03
スタックといっても色々あって、pushされたら、popするまで
一切アクセスすることが出来ないものもあれば、アクセスでき
るものもある。
Cの関数の引き数用のスタックは、当然アクセスできるタイプが
使われる。問題はスタックポインタをどうやって関数は知らされたか
だが、まぁ隠しグローバル変数(register属性)とでも思って桶
09048982008/06/15(日) 14:34:42
>>ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで

こういう中途半端な理屈で自分を納得させて学習を止めてしまうのが
一番良くありません。疑問があれば納得するまで調査するべきです。

私はCを勉強したての頃に前述の疑問を持ちその理由がよく説明
できませんでした。そこで自分なりに調べた結果、出した結論が
以下の答えです。

1)スタックはLIFO(Last In First Out)方式であり
 後に入れたデータから先に読みだされる
という記述の”読みだされる”というのがあたかもPOP
をしたかのように誤解を与える記述ですが、実際は内部の
動作としては”値を読みだす(参照する)行為”は”POP操作”
ではありません。スタックポインタが移動してないからです。

(続く)
09058982008/06/15(日) 14:35:26
898のスタック構造は若干、はしょった部分があり正確には
関数add()内部でのスタック構造はこんな感じになります。

ebpレジスタ
変数 c (ローカル変数)
関数の戻り先アドレス
変数 a
変数 b (最後の引数から積まれる)
(スタック領域の先頭アドレス)

そして関数内部ではesp(スタックポインタ)を一旦ebpレジスタ
に格納したうえで(アセンブラではmov (ebp,esp) )、変数a,変数b
への参照を以下のように行っています。
変数a dword ptr[ebp+12]
変数b dword ptr[ebp+16]
変数c dword ptr[ebp+4]
add()関数内部の処理はこれらをアキュムレータで演算しているに
過ぎません。

(続く)
09068982008/06/15(日) 14:37:19
関数を抜けるときに初めてPOPが行われます。
1)変数cをPOP
2)POPで呼び出し元に復帰
3)変数aをPOP
4)変数bをPOP
※実際にはPOPを行わずにスタックポインタの値を進める事で
 代用する場合が多いです。

結局、関数の中でスタックに積まれた引数やローカル変数の値
を使用することはスタックからそのデータを取り出した(POPした)
わけではないのだから、スタックの定義と全く矛盾しませんよ
ということを言うためにこんなまわりくどい説明をしました。

でも、案外誤解している人って多いかもしれないと思います。
なお、これらは日経BP社の「プログラムはなぜ動くのか」という
本の第10章「アセンブリ言語からプログラムの本当の姿を知る」
を読めば完全に理解できると思います。

(終)
09078982008/06/15(日) 14:58:50
>>903
ここはCに関するスレッドなので、スタックの概念や実装についても
Cの範疇でのみ回答しております。
0908デフォルトの名無しさん2008/06/15(日) 15:00:23
>>904-906
だから、その話を踏まえて「似ているが別のもの」って言ったんだよ
Cの普通の実装で使われる呼び出しスタックは、配列上に構築したスタックと同じで、
スタックポインタからのオフセットを指定することで任意の要素のO(1)読み書きができるけど、
これは「スタック」というデータ構造が元々持ってる機能ではないってこと

基本的な意味でのスタックでは、値を取り出すにはpopするしかない
そこを混同してると>>898みたいな疑問が生まれる
09098982008/06/15(日) 15:12:50
あらま、詳しいお方でしたのね。失礼。
0910ebpなんて、極一部のCPUにしかないレジスタ持ち出すなよpgr2008/06/15(日) 15:19:18
つーか、Cの仕様レベルでの話に実装を持ち出す>905はいかがなものかと。
09118982008/06/15(日) 15:55:18
>>910
正論だ。まったくもって正論だ。
「プログラムはなぜ動くのか」の本にもPentiumなどのx86系
マイクロプロセッサ用アセンブリ言語を対象として解説する
って書いてあった。どんなレジスタが使われるかはコンパイラ
依存だとも・・・。説明不足でした。まあ実装はちょっと置いといた
としても、なぜに「スタック」という名前なのに下のデータにアクセス
できてしまうのかという疑問については解決ってことで...(苦しい)
0912デフォルトの名無しさん2008/06/15(日) 20:44:45
ポーランド記法で計算を行う為のアルゴリズムを教えてください。
0913デフォルトの名無しさん2008/06/16(月) 08:28:06
CPUのスタックはスタックポインタいじればどこでもアクセスできるだろ
引数の渡し方も呼び出し規約で変わる
fastcallだとレジスタ渡しだし
0914デフォルトの名無しさん2008/06/16(月) 17:48:41
C#での質問です。

string[] str = new string[10];
char[,] moji = new char[10,30];

このstrにファイルを読み込んで文字列として格納したものを、
mojiにコピーするにはどうしたら良いのでしょうか?

ToCharArray()を使おうと思ったのですが上手くいかずに困っています。

どなたかご鞭撻の程宜しくお願いします。
0915デフォルトの名無しさん2008/06/16(月) 22:15:25
ここがC#のスレッドに見えたんだろうか。
0916デフォルトの名無しさん2008/06/16(月) 23:37:02
>>915
>>1を見ればC#スレにしか見えないだろ。

>>914
ジャグ配列で良ければ、ToCharArrayが使える。
矩形のchar[,]でないといけないなら、自分でループ回す方法しか俺には思い浮かばない。
char[][] moji = new char[str.Length][]; //別にnew char[10][]でも
for (int i = 0; i < str.Length; i++)
{
  moji[i] = str[i].ToCharArray();
}
09179142008/06/17(火) 09:18:37
>>916さん

わざわざお答え頂きありがとうございます。

なるほど、出来なかった理由は宣言の時点での間違えだったのですね。

大変助かりました。
09189142008/06/17(火) 17:11:58
連投してすみません;

914の者ですが
配列mojiにstring型の文字列を格納することは出来たのですが、
もう一つmojiと同じ方の多次元配列を用意して、
それにmojiをコピーしたいのですが上手くいきません;

Array.Copyなどを使えば動作はするのですが、配列の中身が変わっておらず
どうすればいいのか分かりません。

度々すみませんが、宜しくお願いします。
0919デフォルトの名無しさん2008/06/17(火) 22:45:18
>>917
いいえ、「間違え」ではありません、「間違い」です。
0920914と9182008/06/18(水) 16:53:48
918のものですが自己解決しました。

お騒がせしてしまい、すみません;

>>919
おぉ、確かに間違えてる;
ご指摘どうも。
0921デフォルトの名無しさん2008/06/19(木) 22:55:36
すみません初心者です。
ポインタと配列のところで参ってしまってるんですが・・・

本に拠ると int test[5]; で、test = &test[0]; というのはなんとなく理解できたんですが、
仮に ans = avg(test); のtestを参照渡ししたとして、渡されたパラメーターがdouble avg(int t[]){の様に、
int型の配列に参照渡しされているんですが・・・

test = &test[0]; というのはアドレスにも関わらず、
int型の配列に参照渡しが可能な理由というのはなんなのでしょうか?

配列にはアドレスを参照渡しできると考えていいんでしょうか?

返信宜しくお願いします。
0922デフォルトの名無しさん2008/06/19(木) 23:02:19
>>921
int t[] の側が int* t の意味に近い。
細かいところで微妙に挙動が違うんだけども。
09239212008/06/19(木) 23:15:16
>>922
レスありがとうございます。
パラメータを int* t とする様なサンプルは、
本の次のページにもろに載っているんです。
だから、違いが分からなくて・・・
int* t ならば理解できるんですが、もう少し御説明できませんか?
0924デフォルトの名無しさん2008/06/19(木) 23:21:38
>>923
C言語は元々ポインタと配列の区別があいまい。
int t[] は配列として使ってるということを明示してるだけと思ってもそれほど間違いじゃない。

int t[] と int* t の細かい違いは↓でも見て。
http://ufcpp.net/study/miscprog/training/bug/10array.c
09259212008/06/19(木) 23:26:45
>>924
じっくり読んでみます。ありがとうございました。
0926デフォルトの名無しさん2008/06/19(木) 23:37:37
%dや%fなどのような書式指定子で、絶対値にする書式指定子ってありますか?
0927デフォルトの名無しさん2008/06/20(金) 13:00:44
>>923
関数の引数に限って言えば *testもtest[ ] もまったく同じ
0928デフォルトの名無しさん2008/06/20(金) 13:02:39
>>926
ないから自分で絶対値にしてから渡せ
0929デフォルトの名無しさん2008/06/20(金) 14:53:13
>>926
ライブラリ関数に値を絶対値にして返す奴があるから
それ使って絶対値に直すといい
0930デフォルトの名無しさん2008/06/20(金) 15:00:08
たまにはabs()の事も思い出して上げてください
0931デフォルトの名無しさん2008/06/21(土) 02:02:42
すみません。いくつか質問があります。
#include <stdio.h>
#include <stdlib.h>
int main (void){
char *str;
int num,i;
printf("何文字のaを用意しますか?\n");
scanf("%d",&num);
str = (char *) malloc (sizeof(char) * (num + 1));
if(! str){
printf("メモリが確保できませんでした。\n");
return 1;
}
for(i=0;i<num;i++)
*(str + i) = 'a';
*(str + num) = '\0';
printf("%sを用意しました。\n",str);
free(str);
return 0;
}
1:str = (char *) malloc (sizeof(char) * (num + 1));の所なんですが、
 (char *) はmallocをキャストしているということなんでしょうか?
2: (sizeof(char) * (num + 1)); の*は、(num + 1)のポインタなのでしょうか?
3:本に *(str + i) = 'a'; はポインタを使って配列に格納すると書いてあるのですが、
どういうことなのでしょうか?
       宜しくお願いします。
09329312008/06/21(土) 02:21:37
(sizeof(char) * (num + 1)); の*ってもしかして掛け算!?
0933デフォルトの名無しさん2008/06/21(土) 03:40:53
>>932
正解。
(char型のサイズ)x(num+1)分の領域を確保しようとしてる
0934デフォルトの名無しさん2008/06/21(土) 07:32:05
>>931
1. mallocの戻り値は void* 型なので str の型である char* 型にキャストしている
Cでは void* 型からのキャストは自動的に行われるのでキャストしなくてもエラーにはならない。
C++ではないとエラーになるがC++では new を使うのが一般的。
2. >>932の通り
3.式の先頭にある * はポインタ。式の途中にある * は乗算の演算子。
配列への格納は str[ i ] = 'a' のようにするがこれをポインタを使って*(str + i) = 'a' と書くことも出来る。
09359312008/06/21(土) 12:56:54
>>933
>>934
ありがとうございます。書かれたレス本にメモってがんばります。
0936デフォルトの名無しさん2008/06/26(木) 07:23:59
int main(int argc,char **argv)
ってmain関数があるんですが、これは標準入力で入れられた配列の文字列の個数(int argc)とその配列の先頭のアドレス(**argv)が引数ってことですか?
**argvと*argv[]は同じことなんでしょうか
0937デフォルトの名無しさん2008/06/26(木) 07:41:34
>>936
標準入力で入れられた配列じゃなくて、起動時に与えられたコマンドライン引数の配列の
要素数(argc)と先頭要素へのポインタ(argv)

>**argvと*argv[]は同じことなんでしょうか
int main(int argc, char **argv) {...
と
int main(int argc, char *argv[]) {...
が同じかという質問なら、同じ
関数引数の宣言では、配列を宣言してもポインタを宣言したのと同じことになる
0938デフォルトの名無しさん2008/06/26(木) 07:44:09
>>937
ありがとうございます
0939デフォルトの名無しさん2008/07/05(土) 12:33:27
構造体の初期化についてなんですが

struct papa{
int number; int mama_number;
}

struct papa menber[5000];

for(i=0;i<5000;i++){
menber[i]={i,i};
}
とはできないんですか?
0940デフォルトの名無しさん2008/07/05(土) 15:20:55
C99ならできた気もするけど、C89ではできない
初期化と代入は別のもの
0941デフォルトの名無しさん2008/07/06(日) 09:28:45
ありがとうございます。
ということは一個ずつ代入を書いていくしかないんですか?
0942デフォルトの名無しさん2008/07/06(日) 10:39:51
そういうこと
もちろん、こういう代入が複数箇所で必要なら関数にまとめることはできる
0943デフォルトの名無しさん2008/07/07(月) 14:41:05
>>939
C++なら(構文は違うけど)できるよ。
09449392008/07/07(月) 22:36:47
ありがとうございました。
C++スレで聞きます。
0945デフォルトの名無しさん2008/07/08(火) 23:03:53
↓こんなプログラムを作りたいのですがどうやってつくったらいいのでしょうか?

挿入元文字列 : パソコン
挿入文字列 : デスクトップ  ←scanfで任意に入力
       ̄ ̄ ̄ ̄ ̄ ̄ ̄
挿入位置 : 2 ←scanfで任意に入力
 ̄
挿入結果 : パソデスクトップコン

配列を駆使して作りたいです、教えてください

たぶん多重ループを用いると思うんですが
0946デフォルトの名無しさん2008/07/08(火) 23:23:58
そこまでロジックを書き出せてるなら、もうその通りに書くだけだよがんばれ
0947デフォルトの名無しさん2008/07/08(火) 23:23:58
もっと文字列処理が簡単な言語を使うのがいいと思うよ。
0948質問です。(1/2)2008/07/10(木) 10:37:06
質問です。標準入力からgzipにデータを渡し、標準出力から圧縮/解凍データを得ようと思っていますが、
パイプ通信が上手く行きません。一体どうやったら上手く行くでしょうか?環境はLinux+gccです。

int pid;
int pipe_pc[2];
int pipe_cp[2];
int size;

pipe(pipe_pc);
pipe(pipe_cp);

pid = fork();
if(pid > 0)
{
close(pipe_pc[0]);
close(pipe_cp[1]);

size = write(pipe_pc[1],src,src_size);
*p_comp_size = read(pipe_cp[0],comp,100);

fprintf(stderr,"[%d / %d]\n",*p_comp_size,src_size);

sleep(10);
exit(1);
}
0949質問です。(2/2)ソース続き2008/07/10(木) 10:39:15
else
{
close(pipe_pc[1]);
close(pipe_cp[0]);
dup2(pipe_pc[0],0);
dup2(pipe_cp[1],1);
close(pipe_pc[0]);
close(pipe_cp[1]);

execl("gzip","gzip","-f",NULL);

sleep(10);
exit(1);
}

なお、参考にしたページは以下の通りです。御指導宜しくお願いします
http://www.ncad.co.jp/~komata/c-kouza3.htm
http://www.linux.or.jp/JM/html/GNU_gzip/man1/gzip.1.html
0950質問です。2008/07/10(木) 11:05:08
>>949の
execl("gzip","gzip","-f",NULL);
は
execl("/bin/gzip","gzip","-f",NULL);
と絶対パスでないと実行されないことが分かりましたが、
それでも標準入力(read関数で送ったもの)が読み込まれていない様子です。
何が悪いんでしょうか??
0951質問です。2008/07/10(木) 11:24:13
>>950
訂正:read関数で送ったもの→write関数で送ったもの
0952デフォルトの名無しさん2008/07/10(木) 12:12:59
>>951
なんでいきなりgzipなんて難しいものに挑戦するかな。
取り敢えず、cat -nかteeでも動かしてみればいいじゃん。
後者なら、標準入力を標準出力に流すときにファイルにも落としてくれるからデバッグが楽になるよ。
0953質問です。2008/07/10(木) 13:09:35
>>952
本来の目的はバッファデータを圧縮・解凍して、バッファに受け取ることです。
ただし即時性が求められるのでファイルに一度書き出さずに行いたいのです。
アーカイバの標準入力へ渡し、標準出力で受け取ることがしたいのですが、
どうしても上手く行きません。。。
どなたか似たようなことをやったことのある人いないでしょうか?
0954デフォルトの名無しさん2008/07/10(木) 13:54:35
>>952
あのさぁ、いきなりgzipで本番プログラムを作らなければいけないって掟でもあるの?
まずはcat -nかteeで実験してみて巧くいったらgzipを試せばいいじゃん。

それはさておき、圧縮に即時性を云々する段階で何かおかしいと気づくべきだって気もするが。
なんでzlib使わないんだろ。
0955質問です。2008/07/10(木) 20:55:48
解答どうもありがとうございます,zlibなんていう便利なものがあったのですね.
簡単にできてしまいました;^^)
どうもあろがとうございました
0956デフォルトの名無しさん2008/07/11(金) 08:12:42
配列に関数の戻り値を入れようとして

hairetu[2]={f(5),f(3)};
とやってもコンパイルできません。
なにかいい方法はありますか?
09579562008/07/11(金) 08:26:09
すいません。
グローバルで初期化していたためできないだけでしTA
0958デフォルトの名無しさん2008/07/11(金) 12:36:18
>>956
最近のCはこんなことも出来るのか
0959デフォルトの名無しさん2008/07/18(金) 13:07:58
質問です。

typedef struct{
int year;
int month;
int day;
}Tdate;

int check(Tdate *);



下のint check(Tdate *); は関数のプロトタイプ宣言なんですが、これは何を引数にしているんですか?
Tdate構造体タグのポインタを引数にしているのでしょうか?
0960デフォルトの名無しさん2008/07/18(金) 13:28:44
Tdateへのポインタを引数にしている
Tdateはタグの無い構造体ね
0961デフォルトの名無しさん2008/07/18(金) 14:17:35
では、関数を呼び出す時は
check(&Tdate)
としてTdateのアドレスを渡せばいいんですか?
0962デフォルトの名無しさん2008/07/18(金) 14:23:48
Tdateは値じゃなくて型だからポインタは取れない
例えばTdate型の変数xがあるなら、
check(&x)
みたいに呼び出す
0963デフォルトの名無しさん2008/07/18(金) 14:26:06
int check(Tdate *); 

このプロトタイプ宣言は、いつからOKになったの?
C99?
0964デフォルトの名無しさん2008/07/18(金) 14:28:02
C89だろ
09659632008/07/18(金) 14:42:13
typedefを見落としてた・・・orz
ワスレテクレ
0966デフォルトの名無しさん2008/07/18(金) 14:45:13
>>962
ありがとうございます
0967デフォルトの名無しさん2008/08/04(月) 22:55:00
質問です

int型(void型以外)の関数がreturn無しで抜けた場合に、スタック領域をぶっ壊す可能性は有るのでしょうか?

こんな関数
int hoge()
{
:
略
:
}
return無しで呼び出し元に戻る

0968デフォルトの名無しさん2008/08/04(月) 23:19:41
通常、壊れません。
0969デフォルトの名無しさん2008/08/05(火) 11:59:19
だからと言って、やっていいわけではない。
0970デフォルトの名無しさん2008/08/05(火) 22:30:31
ソースファイルhoge1.c内でグローバル変数 char g_hoge[64]を定義、
ソースファイルhoge2.c内でグローバル変数 char g_hoge[128]を定義、
hoge1.cには関数 int hoge1()が、hoge2.cには関数int hoge2()が定義されていて
それぞれの関数内で各変数のサイズ分フルにデータをぶち込んでいるとした上で

meinからhoge1()、hoge2()の順に呼び出した場合のグローバル変数g_hogeの扱い(アドレス管理等)って
どうなっているのでしょうか?

今確認出来ている事象としてhoge2()内でmemsetでゼロクリアすると落ちたり、
hoge1、hoge2を抜けたあとで関係の無い関数を呼び出した瞬間に落ちたりしています。
gdbでそれぞれの関数内でg_hogeのアドレスを見ると同じアドレスを指しています


頭の悪そうなコーディングと御思いでしょうが、4,5年商用で稼動しているモノだけにヘタに対処できないんですorz
関数3つ程追加した途端に時限爆弾が作動したみたいです
0971デフォルトの名無しさん2008/08/06(水) 01:04:06
hoge
0972デフォルトの名無しさん2008/08/06(水) 01:47:55
今日、この関数がエントリポイントになってて、
呼び出し側は複数のモジュールのエントリポイントのリストを見に行って
勝手に呼び出すようになっているという説明を受けた。

こういうプログラム書いたことある人いますか?
もっともエントリポイントも初めて聞く言葉だったんで
よくわかってないですが。
0973デフォルトの名無しさん2008/08/06(水) 02:03:59
>>972
特定のI/Fを持った関数を、ある関数群のエントリポイントと呼ぶ。
その関数を呼び出し元が適宜呼ぶから、その先は勝手に作れって話じゃないかと。
0974デフォルトの名無しさん2008/08/06(水) 02:14:55
言い方を変えると関数のポインタを使って云々ってこと?
0975デフォルトの名無しさん2008/08/06(水) 03:49:30
>>973 、4
レスありがと。

関数ポインタは使ってなかったね。
モジュール名とIDがかかれてたが、具体的にどう実装されているのか
Cをシンプルにしか使ってこなかったオレにはさっぱりでした。

win プログラミングでdll 作るときなどでエントリーポイントつくるようで
調べてみたけど同じようなものなのかなぁ。
もっと深いところを追わないとダメだということだけはわかったけど。
0976デフォルトの名無しさん2008/08/07(木) 09:07:49
>>970
>ソースファイルhoge1.c内でグローバル変数 char g_hoge[64]を定義、
>ソースファイルhoge2.c内でグローバル変数 char g_hoge[128]を定義、
言語仕様所上はこの時点で挙動が未定義

gccだとエラーにしないで同じオブジェクトを参照させるみたいだな
そのオブジェクトがchar[64]なのかchar[128]なのかは
リンク後のファイルにobjdump -tすれば分かるはず
0977デフォルトの名無しさん2008/08/07(木) 19:44:31
3次元空間上にある2つの単位ベクトルAとBがあります.
BはZ軸方向単位ベクトルです.

B→AまたはA→Bに回転して一致する回転角度を求めたいのですが
この際にX軸方向,Y軸方向,Z軸方向回転角度として求めたいです.

atan2を使うと,ある軸成分が0の場合には発散したり,回転してないことになってしまいます.
これを回避して組むにはどうすれば良いでしょうか?
0978デフォルトの名無しさん2008/08/07(木) 21:31:18
>>977
ややスレチな気がするがAベクトルをBベクトルに一致させる回転行列がほしいって事か?
0979デフォルトの名無しさん2008/08/07(木) 21:59:03
>>978
すれ違いな気もしますがそのとおりです.

オイラー角だとAとBが一致している場合挫折しちゃったので・・・・
数学板にいくと実装の話しまで行かないし・・・
0980デフォルトの名無しさん2008/08/07(木) 22:04:34
まあ、オイラー角使うなってこった。

回転軸のベクトルと回転角(か、クオータニオン)で指定する方が無難。
0981デフォルトの名無しさん2008/08/08(金) 09:55:51
AとBの外積を求める(→回転軸)
↓
AとBの内積から角度を求める(→回転角度)
↓
回転軸まわりに回転角度だけ回転



回転軸まわりに回転角度だけ回転するような変換行列があればそれだけのことなんでしょうか?
0982デフォルトの名無しさん2008/08/08(金) 18:15:49
0983デフォルトの名無しさん2008/08/08(金) 23:53:13
>>981
そう。
ただ、そのやり方でも A == B の時は結果狂う。
A == B の時は条件分岐で単位行列にしとけ。

回転軸を (x, y, z)、回転角を a として、
(cos a, x sin a, y sin a, z sin a) の形でデータを持つのがクオータニオン。
レス数が950を超えています。1000を超えると書き込みができなくなります。