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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)d●v(^o^i)d●v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

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

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 93
http://pc5.2ch.net/test/read.cgi/tech/1098007606/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

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

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0003デフォルトの名無しさんNGNG
【FAQ】
プログラム終了時にはfree()をちゃんとすること。
0004デフォルトの名無しさんNGNG
新スレ乙
0005デフォルトの名無しさんNGNG
>>3
そんなネタはいらないんだよ
0006デフォルトの名無しさんNGNG
続きをやるぞ。age!
0007大原ゆきNGNG
うんざりなんだけど
0008デフォルトの名無しさんNGNG
OSとかで解放してくれない時は自分でfreeしてください。
0009デフォルトの名無しさんNGNG
続きは俺俺でやってください。
0010大原ゆきNGNG
そうだ、俺俺があったんだ…
すっかり忘れてた
0011デフォルトの名無しさんNGNG
とりあえず、freeがいらないといっている奴は、
C言語の規格書からプログラム終了時にOS依存ではなく、
C言語として必ずメモリが解放されると記述している場所を示せ。
0012大原ゆきNGNG
下らない論争はここでやってください

C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0013デフォルトの名無しさんNGNG
HP-●Xが昔
void free(void *ptr) { return; }
だったという話を風の噂に聞いたことある。真偽のほどは確かめていない。
0014デフォルトの名無しさんNGNG
とりあえず、freeがいるといっている奴は、
OSの規格書からプログラム終了時にプログラム依存ではなく、
OSとして必ずメモリが解放されるとは限らないと記述している場所を示せ。
0015大原ゆきNGNG
>>14
もうこないでよ、あっちいってよ
斯く言う私はfree必要派
0016デフォルトの名無しさんNGNG
OSの規格書があるなんて初耳だなw
0017デフォルトの名無しさんNGNG
>>16
開発元が作ってればあるんじゃない?w
手に入るかは別として
0018デフォルトの名無しさんNGNG
>>13
そんな莫迦な話が本当だとするなら、HP-UX (下らない伏字に何の意味が?) では
「終了しないプログラムで malloc してはいけない」という事になりますね。
0019デフォルトの名無しさんNGNG
> >>968
> 意味なくない。常に free() を行うのが正統な C だ。
> まともなプログラマなら誰だって同意するだろう。

おまえぼけ。たとえばUnixのソースをみても終了時のfreeはしないのがあたりまえ。
伝統的にも正統かどうかをみても「しない」のが常識。
0020デフォルトの名無しさんNGNG
> > しっかりfreeしたつもりでも
> > 当のfreeが void free(void *ptr) { return; }
> > と定義されてるのもあるという話、聞いたことアルヨ。
> >>993
> 標準Cの話してるのに、なんでそんな話になるんだ?

標準の話だというなら、それこそ「終了時もfreeしないといけない」環境なんてのを
もちだすのがぼけ
0021デフォルトの名無しさんNGNG
いちおうCの規格ではfreeしろ。絶対しろよな。とは
規定してないみたいだよ。
ttp://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA03.html#Q2
0022デフォルトの名無しさんNGNG
だから、終了前に絶対freeしろも、freeするなも極端すぎなんだって。
いいじゃん、別にどっちでも。
まともじゃないOSを相手にする時だけに気をつければ。

free不要論みたいなバカ論ならともかく、議論する内情じゃないよ。
0023デフォルトの名無しさんNGNG
変な家庭だな。
0024デフォルトの名無しさんNGNG
×内情
○内容
0025デフォルトの名無しさんNGNG
必要なfree()はしたほうがジェントルメンだと思うけど。。。
その程度のことなんじゃないのか?
シルバーシートで席譲るみたいな、マナーっつうか。
0026デフォルトの名無しさんNGNG
下らない論争はここでやってください

C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0027デフォルトの名無しさんNGNG
>>18
終了しないプログラムでmallocしなければ
メモリリークしない、ということは少なくとも真理です。
0028デフォルトの名無しさんNGNG
>>21
つまり、プログラムの終了時にメモリが必ず解放されるとは
書いていないということですね。
0029デフォルトの名無しさんNGNG
mallocして独自メモリ確保ルーチンを呼べばいいじゃない
0030デフォルトの名無しさんNGNG
書いていない=未定義。
未定義なのだからより安全なほうを選ぶのが
常識でありマナーというものでしょう。
0031デフォルトの名無しさんNGNG
> 極端すぎなんだって。
> いいじゃん、別にどっちでも。

あ、つごう悪くなってきたのでごまかしモードだな? ;-)
0032デフォルトの名無しさんNGNG
> つまり、プログラムの終了時にメモリが必ず解放されるとは
> 書いていないということですね。

そもそもmallocしたらメモリーがかならず確保されるとも書いてないぞ?
0033デフォルトの名無しさんNGNG
> 必要なfree()はしたほうがジェントルメンだと思うけど

じゃあ終了時はしないのね。
0034デフォルトの名無しさんNGNG
Ctrl-Cシグナル等を受けたときでも行儀よくfreeしないといけないの?
0035デフォルトの名無しさんNGNG
このスレ暫く封印…と。〆(。。
0036デフォルトの名無しさんNGNG
>>34
CTRL-Cシグナルなんてものは、そもそもC言語の範囲外です。
C言語の範囲外は範囲外。C言語の範囲内はC言語でやりましょう。
もちろんmalloc、freeはC言語の範囲内なのでC言語でね。
0037デフォルトの名無しさんNGNG
>>34
どうせ他のリソースも解放しないといけないんだから、ついでにfreeしとけ。
0038デフォルトの名無しさんNGNG
>>33
大抵しないけど、自己満足的にするときもある。
気分によりけり。
0039デフォルトの名無しさんNGNG
カーニハンやリッチーはどこまでfreeしてたんだろうね?
歴史学的見地をしりたいな。
0040デフォルトの名無しさんNGNG
こういうコードはしばしば書いた。
FooStruct * initFoo(void)
{
static FooStruct * sFoo;
if (sFoo == NULL) {
sFoo = malloc(sizeof(FooStruct));
}
setSomeFoo(sFoo);
return sFoo;
}
当然、free()してない。
或いはこういうコードも。
FooStruct * allocFoo(unsigned cnt)
{
static FooStruct * sFoo;
if (sFoo) {
free(sFoo);
}
sFoo = malloc(sizeof(FooStruct) * cnt);
setSomeFoos(sFoo, cnt);
return sFoo;
}
やはり、最後はfree()してない。
0041デフォルトの名無しさんNGNG
Cで書くときはあまり真面目にfreeして終了しないが
VBで書くときはかなり几帳面にset obj = nothingして終了している。
そんな自分がよく分からない。。。
0042デフォルトの名無しさんNGNG
>>40
私ならsFooを関数外に出して、if (sFoo) free(sFoo)する関数をinitFoo()でatexit()に登録するなぁ。
0043デフォルトの名無しさんNGNG
なんでネタスレになってるんだ?
ここは初心者の集まりかよ。
0044デフォルトの名無しさんNGNG
一般的な OS ならプロセスごと消滅するわけで
free() する必要などこれっぽっちもない。
そもそも、標準 C の範疇を越えている以上、スレ違い。
0045デフォルトの名無しさんNGNG
>>43
変なのが前スレから粘着しているんだ。
スルーお願いします。
0046デフォルトの名無しさんNGNG
>>43
もともとCについてぐだぐだ語るスレだ。
気にするな。
0047デフォルトの名無しさんNGNG
voidなのかvoid信者なのかしらんが、
あんなプログラマとして終わっちゃった人の相手してどうすんのよ。
おれの中では石田晴久並に過去の人。
0048デフォルトの名無しさんNGNG
石田晴久はプログラマですらない
0049デフォルトの名無しさんNGNG
> CTRL-Cシグナルなんてものは、そもそもC言語の範囲外です。

じゃあその場合はメモリーリークしちゃってもいいと?
0050デフォルトの名無しさんNGNG
> カーニハンやリッチーはどこまでfreeしてたんだろうね

リッチーもトンプソンも終了時にはfreeしてない。Unixのソースみてみろ ぼけ
0051デフォルトの名無しさんNGNG
> おれの中では石田晴久並に過去の人。

っていうか石田晴久がCの本訳すより前からめだってただろ彼
0052デフォルトの名無しさんNGNG
なんでここでvoidがでてくるんだ?

かれの本にはfreeするなとでも書いてあるのか?
0053デフォルトの名無しさんNGNG
いえ、main関数はintです。
0054デフォルトの名無しさんNGNG
Unixが終了する時はfreeいらないと思うけど、アプリが終了する時にはどうなん?
0055デフォルトの名無しさんNGNG
逆に
オレはいかなる時でもfree書いているぜ
という人はいるのか?
0056デフォルトの名無しさんNGNG
free(>>55);
0057デフォルトの名無しさんNGNG
>>51
べつにー、過去にどうだったか関係なく、過去の人。
0058デフォルトの名無しさんNGNG
> Unixが終了する時はfreeいらないと思うけど、アプリが終了する時にはどうなん?

だーかーらー Unixの/binや/usr/bin の下にあるこまんとも彼らがかいたのは多いのよ?
0059デフォルトの名無しさんNGNG
>>55
http://pc5.2ch.net/test/read.cgi/tech/1090652323
0060デフォルトの名無しさんNGNG
「過去にしたい」人なのね。
0061デフォルトの名無しさんNGNG
↑過去のひとだと思いたい!
0062デフォルトの名無しさんNGNG
>>58
自分達でカーネルソースまで管理できるシステムだからこそできることだね。
0063デフォルトの名無しさんNGNG
っていうか、自分たちでCの文法まできめたんだろうが...
0064デフォルトの名無しさんNGNG
>>60
気にするなよ
0065デフォルトの名無しさんNGNG
なんでおまえらそんなにvoidをこわがるんだよ!
こわくねーだろ?
0066デフォルトの名無しさんNGNG
free()してる最中にシグナル届いてハンドラに飛ばされるとどうなるんだろうね?
興味深い。
0067デフォルトの名無しさんNGNG
だからfreeするな
0068rubykitch!!!!!!!NGNG




おなじみ、エキサイトhttp://www.excite.co.jp/world/english/で
「shit」と入力し和訳にかけてみてください。恐らく予想通りの結果が得られます。
それでは次に「shit!」とエクスクラメーションマークを一つ足してください。
予想もしなかった大変な事態になるはずです。
が、それは気にせずにエクスクラメーションマークを足していきましょう。
4つ目で少し不思議なことになりますが。
無事5つ目までつけ終えれば今回の実験は終了です。


.
0069デフォルトの名無しさんNGNG
>だからfreeするな
だよね。
0070デフォルトの名無しさんNGNG
>>54
>>44
0071初心者NGNG
質問です。たとえばボタンを押せば強弱によって表示される文字が
変わるものを作りたいのですが、下の条件で
引数1で、弱く押せば a 強く押せば b を表示させたい時にはどうしたらいいんですか?

(1) void DisplayLetter(int LetterNum)
機能: 指定された文字を表示する(注、ここでは a=10 b=20ということにしてください)
(4) int SensePressure(int ButtonNum)
機能: 指定された番号のボタンに関して、押されたときの強さを調べる。
引数: 0 〜 12の整数が許される。番号に対応したボタンの状況を調べる。番号とボタンの関係は表3の通りである。
戻り値:弱く押されたときはWEAK(1)、強く押されたときはSTRONG(2)、指定されたボタンが押されていないときはERROR(0)。
     数に範囲外の値が指定された場合にも、ERROR(0)。
0072デフォルトの名無しさんNGNG
>>65
何で気にするの?
0073デフォルトの名無しさんNGNG
>>71
宿題かなあ。問題がごちゃごちゃしててよくわからんよ。
とりあえず、DisplayLetterとSensePressureが与えられてて、
それを使ったコードを書けということかな。

こんな感じかな。

void foo(int ButtonNum)
{
  int pressure = SensePressure(ButtonNum);
  
  switch (pressure) {
  WEAK:
    DisplayLetter(10);
    break;
  STRONG:
    DisplayLetter(20);
    break;
  default:
    /* なにもしない */
    break;
  }
}

でもなんか問題の解釈を間違ってるような気がする…
0074初心者NGNG
>>73
参考になりましたありがとうございます。
ちなみにこれ今やってる大学入試問題です。携帯電話の英文入力インターフェースを作ってるんですが
理解に苦しんです。カンニングにならないのか?という意見もでそうですが
情報収集能力もテストのいっかんですので大丈夫ぽいです。
0075デフォルトの名無しさんNGNG
マルチすんなボケ
0076デフォルトの名無しさんNGNG
すみません。初めてこの掲示板を利用させていただくものですが、
質問させて頂いてよろしいでしょうか。
#include <stdio.h>

void main()
{
int A=1,B=2,C=3;int big1=0,big2=0;
if(A>big1>big2){big1=A;}//1>0>0
if(B>big1>big2){big1=B;}//2>1>0
if(C>big1>big2){big1=C;}//3>2>0
//big1=3 big2=0
if(big1>A>big2){big2=A;}//3>1>0 big2=1
if(big1>B>big2){big2=B;}//3>2>1 big2=2
if(big1>C>big2){big2=C;}//3>3>2 big2=2
printf("一番大きい数:%d 二番目に大きい数:%d",big1,big2);
}

この文はA、B、Cの内から一番大きい数と二番目に大きい数をプログラムが
判断して結果を出力するというプログラムです。
本来なら実行結果は(一番大きい数:3 二番目に大きい数:2)となるはずなのに
borlandやvisualC++コンパイラでは(一番大きい数:3 二番目に大きい数:1)と
出力します。これは私の書いたプログラムが悪いのでしょうか。
それとももしかして考えたくはありませんがCのバグなのでしょうか。
真剣に悩んでます。ご指南よろしくお願い致します。
0077デフォルトの名無しさんNGNG
>>76
お前が悪い
コンパイラのせいにするな
0078デフォルトの名無しさんNGNG
条件式の書き方の問題
A > big1 > big2 とは書けない
A > big1 && big1 > big2 と書かないといけない
以下同
0079デフォルトの名無しさんNGNG
>>77やっぱりそうでしたか。ありがとうございます。
>>78あ、そうだったんですか。今まで知りませんでした。
こんなくだらない質問にお答えくださって本当に感謝します。
ありがとうございました。
0080デフォルトの名無しさんNGNG
特定の文字を区切り文字として、for文で順番に文字列が取り出せる
ように分割してくれる関数は、どんなものがありますか?
0081デフォルトの名無しさんNGNG
strtok
0082デフォルトの名無しさんNGNG
>>81
ありがとうございます。m(_ _)m
0083デフォルトの名無しさんNGNG
コンパイルしたら こんなエラーがでてしまい、コンパイルが通りません。

cc -g test.o -o test
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:77: undefined reference to `main'
collect2: ld はステータス 1 で終了しました
make: *** [test] エラー 1

どなたかご教授お願いいたします。
0084デフォルトの名無しさんNGNG
>undefined reference to `main'
mainが無い
0085デフォルトの名無しさんNGNG
>>83
最低限 main() が必要だって理解できてなくて、
自分がコンパイルではなくリンクしていることも解ってなくて、
エラーメッセージの英文も読めなくて、
トドメに日本語まで間違うって…
0086デフォルトの名無しさんNGNG
2chの質問者に何も期待してはいけないであーーる
0087デフォルトの名無しさんNGNG
「:」で区切られたデータを scanf で受け取るにはどうしたら良いでしょうか?
例えば、
char s[ 128 ];
int n;
scanf( ???, s, &n );
で
PM:7
と入力したとき、s に"PM", n に 7 が入るようにしたいんですが…
0088デフォルトの名無しさんNGNG
へたれ
0089デフォルトの名無しさんNGNG
>>87
"%[^:]:%d"
0090デフォルトの名無しさんNGNG
ちょっとお聞きしたいのですが、C言語の既存の
関数からで.midiの再生って可能ですか?
.wavの再生にはPlaySound関数を使ってるのですがwavはファイルサイズ
が大きすぎて人に渡すプログラムを作るときに困ってしまいます。
もし再生する方法をどなたかご存じでしたらお願いします。
0091デフォルトの名無しさんNGNG
>>90
スレ違い。環境に見合ったスレへどうぞ。
まぁ、この辺だろうな。
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
http://pc5.2ch.net/test/read.cgi/tech/1099190154/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
http://pc5.2ch.net/test/read.cgi/tech/1065535118/
0092デフォルトの名無しさんNGNG
>>90
windowsサウンドプログラミングという書籍を買ってください。
そして、PlaySoundはC言語の既存の関数ではありません。
MidiはPlaySoundのようにファイル名を指定しただけで再生する
Win32APIはありません。
009390NGNG
91>>頭悪そうな発言スレを勧められるとは・・・
とりあえずサンクス
0094デフォルトの名無しさんNGNG
92>>そうなんですか。ってことはデバイスをオープンとか
何とかとか長く書くような真似をしないと駄目なんですね・・。
今度書店で見つけたら買ってみます。ありがとうございました。
0095デフォルトの名無しさんNGNG
fopenでNULLが返ってきた時に
何故ファイルが開けなかったか知るにはどうしたらいいですか?
0096デフォルトの名無しさんNGNG
>>95
errnoがあるだろ
0097るby!!!!!!!!!!!!!!!NGNG
strerror
0098デフォルトの名無しさんNGNG
>>87-89
バッファーオーバーランする罠
0099デフォルトの名無しさんNGNG
MCI関連でなかったっけ>midi
0100デフォルトの名無しさんNGNG
>>94
サウンドプログラミング2
http://pc5.2ch.net/test/read.cgi/tech/1091054082/l50
0101デフォルトの名無しさんNGNG
>>100
そのスレは94の質問内容のようなスレではない
0102デフォルトの名無しさんNGNG
>>89
ありがとうございます
しかし二回以上連続で scanf した時に、s の先頭に改行が入ってしまうのですが…
これは未定義ながら fflush( stdin ) するしかないのでしょうか…?
0103102NGNG
* というのがあったので
"%[^:]:%lu%*c"
として最後の改行を読み飛ばすようにしたらうまくいきました。
ありがとうございました
0104デフォルトの名無しさんNGNG
>>103
そうまでして scanf() 系を使わないといけない理由が知りたい。
0105デフォルトの名無しさんNGNG
Visual C++.netを使用して、
VisualC++プロジェクト→.NET→コンソールアプリケーション
で下記を作成し、ウォッチで"tmp->c"を参照しても、2次元配列
の中身が参照できません。

#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;

typedef struct{
    int a;
    int b;
    int c[5][2];
}AAA;
AAA aaa;

int _tmain()
{
  AAA *tmp;

  tmp = &aaa;

  return 0;
}

VisualC++プロジェクト→Win32→Win32コンソールプロジェクト
で作成すると、参照できるのですが、.NETの方で参照できる
方法はあれば、教えて下さい。
0106デフォルトの名無しさんNGNG
>>105
故意犯?
>>1
>まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
こっち池
★初心者にVisual C++を教えるスレ★ Part15
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
0107デフォルトの名無しさんNGNG
つーかマルチ?
0108デフォルトの名無しさんNGNG
>>105-106
コンソールアプリならこっち
迷惑だからVC++スレには絶対来るな

【初心者歓迎】C/C++室 Ver.11【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1099190154/l50
0109105NGNG
>>108
【初心者歓迎】C/C++室 Ver.11【環境依存OK】
に行ってみます。ありがとうございました。
0110いなむらきよしNGNG
奇形がやさしく答えるキケー!
0111デフォルトの名無しさんNGNG
void *GetPtr(void)
{
char c = 'a';
return &c;
}
0112デフォルトの名無しさんNGNG
c++ の質問です。
CString *s[] = new CString[10];
delete[] s; // 質問:どうして delete s; では駄目なの?
0113デフォルトの名無しさんNGNG
>>112
CとC++の区別がつくようになってから来い
0114デフォルトの名無しさんNGNG
>>112
EffectiveC++ P.44参照
0115デフォルトの名無しさんNGNG
どうして BCD なんか使うのですか? わけわかんない。
0116デフォルトの名無しさんNGNG
『組込み開発者におくるMISRA-C―組込みプログラミングの高信頼化ガイド』
↑を読んだ時の疑問なんですが、

i = 3;
i = i++;

この場合、
2行目の代入と増分の副作用完了点の順序が処理系依存になるので
最終的なiの値も処理系依存になるのは分かるんですけど、

i = 3;
i = ++i;

の場合がよく分かりません。
iの値の参照前に増分するので最終的なiは4でいいのかと思ったんですけど、
これも処理系依存になると上記の本では解説されてました。
0117デフォルトの名無しさんNGNG
愛がいつまでも続くと思うな
0118デフォルトの名無しさんNGNG
>>116
誤りですね。i = ++i; は大丈夫です。
0119デフォルトの名無しさんNGNG
char c[10] とか char c[128] とか。
なんでいつも適当な確保なのですか?
0120デフォルトの名無しさんNGNG
適当には二つの意味がある!
0121デフォルトの名無しさんNGNG
128が中途半端だと感じてるんだろ
0122大原ゆき ◆6iqfpMYUkI NGNG
>>119
貴方の質問から何を聞きたいのかを想像して答えますが、
例えば、cが入力用のバッファとして使われる場合、人が何文字入力するか、
なんていうことは予め判りませんよね。
だから、とりあえず入力される数としてあり得る範囲を確保し、
それ以上の要素を入力しても、配列に納める分以上は納めないようにする処理
を書いてあげないといけません。
例えば、フーリェ変換用のバッファとして使う場合などの特定用途では確保する
要素数は初めから判っているので、プログラム中で使われる配列の要素数が最小
になるように勤めるとより良いです。
0123デフォルトの名無しさんNGNG
>>121
そうです。
0124デフォルトの名無しさんNGNG
いいえ、適当ではありません。
128には意味があります。
0125デフォルトの名無しさんNGNG
>>122
どうもありがとうございます。あまり確保しすぎてもいけないと
も聞いたのですですが、どのぐらいまでなら確保してもよいのですか?
0126大原ゆき ◆6iqfpMYUkI NGNG
>>123
例えば、フーリェ変換(計算機では普通FFT)だと2の倍数にしないとできません。
2の倍数というのはわりとよく出てきますよ。
0127デフォルトの名無しさんNGNG
友人に #define は問題があるから C では enum 使えと言われたのですが本当でしょうか…?
例えばこんな感じで

×#define 1 A
○enum { A = 1 };
0128大原ゆき ◆6iqfpMYUkI NGNG
>>125
場合によります。
0129デフォルトの名無しさんNGNG
>>127
問題があるのは、あなた使い方の方です
0130デフォルトの名無しさんNGNG
わらた
0131127NGNG
- #define 1 A
+ #define A 1

お恥ずかしい…
0132116NGNG
>>118
やはり前置増分演算子の場合は問題ないんですね。
ありがとうございました。
0133大原ゆき ◆6iqfpMYUkI NGNG
>>127
defineはエラーがあってもコンパイル時にエラーとして検出できませんし、
フラグの値を設定したいときのような場合、値の数が極端に多いと、
ユニークな数を果して割り当てられたかどうかを確かめるのは困難です。
例えば、
#define PI 3.44
という定義があったとして、これを使ったコードにエラーがあったとき、
エラーメッセージにPIという文字は見ることができません。
3.44という良く解からない数字として表れるのです。
書いた人はたぶんπのつもりだったのでしょうが、あいにくπは3.14…です。
0134デフォルトの名無しさんNGNG
>>133
毎回毎回長文&駄文はネタなの
0135大原ゆき ◆6iqfpMYUkI NGNG
>>127
一般的にC++ではdefineはなるべく使うべきではありません。
幸運な事に、代わりに使える機能がいくつか用意されました。
Cでdefineとして書いていたものはtemplate、inline関数、const定数
として置き換え可能です。
enumはユニークな数を割り振りたいときや、const定数をクラス内部で初期値設定
できない時などに使うと良いでしょう。
定数を宣言するときは大抵const定数で良いでしょうね。
0136デフォルトの名無しさんNGNG
なるほどそういうことだったんですか。
ということは友人の主張は正しかったんですね。

分かりやすい説明ありがとうございました
0137デフォルトの名無しさんNGNG
>>134
#define と enum 比較するのに実数持ち出したり
C スレでいきなり C++ の話を始めたりするんだから
ネタでなけりゃ頭の不自由な人でしょ。
0138デフォルトの名無しさんNGNG
> 128には意味があります。

人間の遺伝子的には127歳まで生きるようにできてるんだよね。
仕様では。
0139大原ゆき ◆6iqfpMYUkI NGNG
>>137
>>133ではenumという言葉は一切使わず、>>135の最後でenumを持ち出しています。
>>127への返答としては少し不備があった事は確かだと思います。
>>136に誤解が無いように追記しますが、enumは整数しか扱うことができません。
0140デフォルトの名無しさんNGNG
> あいにくπは3.14…です。

いいえ3です。
0141デフォルトの名無しさんNGNG
enumで定義した数だけループしたいんですがどうすればいいですか?
sizeofは使えないんですか?
0142デフォルトの名無しさんNGNG
> defineはエラーがあってもコンパイル時にエラーとして検出できませんし、

enumもたいがいのコンパイラーでエラーや警告でませんよ。

enumで定義した値以外を代入したり、
ちがうenumで定義した値を代入してもエラーや警告でない(gccあたりでためしてみて!)

そうするとdefineとたいしてちがいないのよね。
せいぜい(重複した値がないようにできるぐらいの利点しかない。
0143デフォルトの名無しさんNGNG
>>141
Cだからこそ、私はこんな感じで。
typedef enum {Foo1st, Foo2nd, Foo3rd, NofFoo} Foo_t;
for (i = 0; i < NofFoo; ++i) ;
0144デフォルトの名無しさんNGNG
たんに「いちばんうしろ」にあるだけですよね?
なんかそれっていやですよね。
0145デフォルトの名無しさんNGNG
>>142
他人の書いたインクルードファイルでシンボルが衝突した場合に発見が早い。
#まさか/usr/includeの下のインクルードファイルで名前が競合するとは思わなかったぞ。>Sun
0146デフォルトの名無しさんNGNG
128が中途半端だという疑問に対し、純粋な答えが2の倍数
それをまったく関連性のない、かつ限定的な話のフーリエ変換持ってきたりして、意味不明

enumとdefineの話だって #define PI 3.44と記述ミスしてる時点で、
enumにしようが数値の記述ミスしたら計算結果は変わる

結局、どれも問いに対する答えになってないんだよね
0147デフォルトの名無しさんNGNG
大学でプログラミングの授業落としてしまって、教授に「どうせテスト範囲の部分を理解か暗記しただけにすぎないんだろう。
それじゃいつまでたってもだめだよ。勉強法を変えろ!」と言われました。まぁ図星だったんですが、
C言語の勉強法ってなんですか?意味がわかりません。
あと、おすすめのC言語の参考書を教えて下さい。
0148RubykitchNGNG
で、また1から丸投げ、と。
0149デフォルトの名無しさんNGNG
ぶるん、ぶるん、ぶるるるるん、
ふふふふーーーーぶるるるるるーーーーーー

おっぱい
0150デフォルトの名無しさんNGNG
>>147
漏れは大学にはいってからプログラミング勉強しはじめたけど、
95点未満はとったことないな。

> C言語の勉強法ってなんですか?意味がわかりません。
とりあえずソースコードを打ちまくったらどうだろう?
漏れははじめのころはそんな感じだった。
たくさん打ち込んでいくうちのソースの内容が分かるようになっていった。

> あと、おすすめのC言語の参考書を教えて下さい。
んなもん人にきくものでは無いと思う。
実際に読んでみて自分に合う物を使えばいいわけだし。
本に頼らずともプログラミング入門系のWebページも数多くあるし。
漏れはC言語に関しては大学で教科書に使った本とWebだけかなぁ。
0151デフォルトの名無しさんNGNG
enum が長くなって歩食う数行に渡るときはマクロのときみたいに
enum { A, B, C /* ... */,\
X, Y, Z };
って \ を行末に付けなきゃダメですか?
0152デフォルトの名無しさんNGNG
エラーが起きたらダメ。
0153デフォルトの名無しさんNGNG
> あと、おすすめのC言語の参考書を教えて下さい。

日下部先生の「作ってわかるCプログラミング」がいいよん。

> 漏れは大学にはいってからプログラミング勉強しはじめたけど

大学でプログラムつくりかたおしえるようなところはかなりダメ。
講義ではもっとメタな概念を教え、プログラミングは自分で勝手に覚えるのが大学生。
そんな技巧を直接教えるのは専門学校や工業高校の仕事だ。
0154デフォルトの名無しさんNGNG
>>151
だめかどうかはやってみれば分かるだろ。
0155デフォルトの名無しさんNGNG
そーいえば、行末の¥なんて使ったことないや・・・。
0156デフォルトの名無しさんNGNG
はいはいそうですね。
0157デフォルトの名無しさんNGNG
// enum キーワードの例
enum Days// enum による Days 型定義
{
saturday,// デフォルトで saturday = 0
sunday = 0, // 同様に sunday = 0
monday, // monday = 1
tuesday, // tuesday = 2
wednesday, // etc.
thursday,
friday
} today; // today 変数は Days 型
0158デフォルトの名無しさんNGNG
土曜日からはじめるのがぼけ
0159デフォルトの名無しさんNGNG
>>157
Winのコードの一部だね
0160デフォルトの名無しさんNGNG
enum {
dimanche,
lundi,
mardi,
mercredi,
jeudi,
vendredi,
samedi};
0161デフォルトの名無しさんNGNG
誰一人として某ageにしましまでワラタ
0162デフォルトの名無しさんNGNG
Vous voyez?
0163デフォルトの名無しさんNGNG
enum dia
{
domingo, //ドミンゴ
lunes, //ルネス
martes, //マルテス
miercoles, //ミエルコレス
jueves, //フエベス
viernes, //ビエルネス
sabado, //サバド
};
0164デフォルトの名無しさんNGNG
>>157
Days型ではなくenum Days型
0165デフォルトの名無しさんNGNG
#include<stdio.h>/*Gauss消去法*/
#define NUMBER 9
int main(void)
{
int i,j,k,l;
double a[][NUMBER+1]={
{5, 1, 3, 4, 0, 0, 0, 0, 0, 0},{1, 6,-5, 8,-2, 0, 0, 0, 0, 0},{3,-5, 2, 4, 6, 8, 0 ,0, 0, 0},{4, 8, 4,-4, 5, 1, 3, 0, 0, 0},{0,-2, 6, 5, 8, 3, 9, 5, 0, 0},{0, 0, 8, 1, 3, 3, 6,-6, 1, 0},
{0, 0, 0, 3, 9, 6, 9, 0, 5, 2},{0, 0, 0, 0, 5,-6, 0,-5, 4,-7},{0, 0, 0, 0, 0, 1, 5, 4, 4, 7},{0, 0, 0, 0, 0, 0, 2,-7, 7,-2},
};
double f[]={5,9,4,-2,8,6,7,3,-12};
double u[NUMBER+1]={0};
/*前進消去*/
for(i=0;i<=NUMBER-1;i++){
for (j=i+1;j<=NUMBER;j++){
f[j]-=(a[j][i]/a[i][i])*f[i];
for(k=1;k<=NUMBER;k++){
a[j][k]-=(a[j][i]/a[i][i])*a[i][k];
}
}
}
u[NUMBER]=f[NUMBER]/a[NUMBER][NUMBER];
/*後退代入*/
for(l=NUMBER-1;l>=0;l--){
for(j=l+1;j<=NUMBER;j++){
f[l]-=a[l][j]*f[j];
}
u[l]=f[l]/a[l][l];
}
for(i=0;i<NUMBER;i++){
printf("u[%2d] = %.2E \n",i+1,u[i]);
}
return(0);}
0166165NGNG
正しい答えが出ません。なにがいけないのかよく考えても分かりません
もしよかったらドコがいけないのか教えてください
0167デフォルトの名無しさんNGNG
分かりません。
0168デフォルトの名無しさんNGNG
>>165
>double f[]={5,9,4,-2,8,6,7,3,-12};
9個しかない。
0169デフォルトの名無しさんNGNG
>>168
ありがとう
それでも答えがおかしいです・・・
0170デフォルトの名無しさんNGNG
君はデバッグというものを知らないのか?
問題のある場所がわからないのであれば一行一行数値を調べりゃ済むだろ?
ましてやこんな小規模なプログラム、大して労力も掛からんだろうに
0171デフォルトの名無しさんNGNG
わかりません。
0172デフォルトの名無しさんNGNG
>>165
配列の添え字のつけ方を理解していない問題と、
Gaussの消去法の方法そのものを理解していない
問題の2つの問題があるのでがんばってください。
0173デフォルトの名無しさんNGNG
はい
0174デフォルトの名無しさんNGNG
テキストファイルが以下のようになっていたとして

AAAA[BBBB]\t............\n
AAAA[BBBB]\t............\n
AAAA[BBBB]\t............\n
....

AAAA はSJISの半角、全角の入り混じった文字列
[ はUnicode
BBBB もAAAAと同様です
.....は今回の処理では不要な部分です

これを一行ずつ読み込んでAAAAの部分だけ抜き出したいのですが
Unicodeの「[」の文字コードが0x005Bで、
例えばSJISの「ー」なんかは0x815Bなので、行のはじめから1文字ずつチェックしていくと
「ー」の後半部分を「[」と判定してしまって「AAーA」という文字列を「AA・」と抜き出してしまいます。
2byte文字の後半部分が5Bというものが他にもあるのでif文で除外するのも手間がかかります。
なにか良い判定方法はないでしょうか?

これでは失敗する例

if(strncmp(wtemp,"[",1 )==0 ){ ]

図示するとこんな感じ
AAーA[BBBB]
↑
wtemp

wtemp は char line[256]へのポインタ
line[256]にはテキストファイルの一行が読み込まれます

0175デフォルトの名無しさんNGNG
>>174
先頭から(1バイト目か2バイト目かを意識しつつ)一文字ずつ処理する。
0176デフォルトの名無しさんNGNG
コード全体で wchar_t を使うようにしたいのですが、
main の第二引数がchar*argv[]でいちいち変換しないといけません。
wchar_t を受け取れる wmain って標準にあるんでしょうか?
MSDN を見る限り MS の独自拡張っぽくて・・・。
0177デフォルトの名無しさんNGNG
ない
0178デフォルトの名無しさんNGNG
mainの入り口で全部変換すれば、それほど手間でもないんじゃないか?
0179デフォルトの名無しさんNGNG
やっぱり無いですか・・・。
全部変換することにします。
0180デフォルトの名無しさんNGNG
なぜか fnc-1 は通るのに、全く同じである fnc-2 は通りません。
adimに問題があるようですが、原因がわかりません。原因は何でしょうか?

#include <stdio.h>
#include <stdlib.h>
int nm = 6;
void fnc(double **adim, double *bdim)
{
int i;
for(i=0; i<nm; ++i) {bdim[i] = 0;adim[i][i] = 0;}/* fnc-1 */
for(i=0; i<nm; ++i) {bdim[i] = 0;adim[i][i] = 0;}/* fnc-2 */
}
int main(void)
{
double **adim, *bdim;
int i;
bdim = (double *)malloc(sizeof(double *) * (nm));
adim = (double **)malloc(sizeof(double *) * (nm));
for(i=0; i<=nm; i++) {adim[i] = (double *)malloc(sizeof(double) * (nm));}
fnc(adim, bdim);
return 0;
}
0181デフォルトの名無しさんNGNG
>>180
寧ろ間違っているのはbdimの方。
sizeof(double) はsizeof(double *)よりも大きい実装なのだろう。
0182180NGNG
>>181
見落としていました。これで問題が解決できそうです。
ありがとうございます。
0183デフォルトの名無しさんNGNG
>>182
老婆心ながら付け加えるけど、adimを埋めるには二重ループが必要なのは判っているよね?
0184180NGNG
>>183
for(i=0; i<nm; ++i) {for(j=0; j<nm; ++j) {
adim[i][j] = 0;
}}
ということですよね?こちらは大丈夫です。
いろいろありがとうございます。
0185174NGNG
>>175
できれば現在1バイト目なのか2バイト目なのかを判定する具体的な方法を
教えてくれると助かります。
0186デフォルトの名無しさんNGNG
>>185
1バイト処理するごとにカウントアップしていけばいいやん。
0187デフォルトの名無しさんNGNG
>>174
おまえらアフォか。
どう考えても「005B」の並びが現れるのは「[」のときだけだろ?
0188デフォルトの名無しさんNGNG
>>185
着目するバイトの一つ前のバイトが
・1バイト文字か2バイト文字の2バイト目ならばそのバイトは1バイト文字か2バイト文字の1バイト目。
・2バイト文字の1バイト目ならばそのバイトは恐らく2バイト文字の2バイト目。
0189デフォルトの名無しさんNGNG
質問です。
二次元配列の構造体って
struct a{
…
}bc[x][y];
じゃできないんですけど、どうしたらいいですか?
0190デフォルトの名無しさんNGNG
>>189
今度はマルチかよ。
最低な奴だ。
0191デフォルトの名無しさんNGNG
こっちじゃないのか〜!?
0192デフォルトの名無しさんNGNG
>>189
一次元配列の構造体ならそういう風に作れるんですか?
0193デフォルトの名無しさんNGNG
>>189
できるよ
0194デフォルトの名無しさんNGNG
x, y が変数駄目なら定数にすればいい
0195デフォルトの名無しさんNGNG
>>174
>AAAA はSJISの半角、全角の入り混じった文字列
>[ はUnicode 
なんつーバカなフォーマットなんだ、と思ったが
もしかして
  AAAA\0[BBBB\0]\t............\n
なんじゃないの?
0196デフォルトの名無しさんNGNG
>>195
AAAA,BBBB を書き込むときに間違って後ろの\0 まで一緒に書き込んだのかw
0197デフォルトの名無しさんNGNG
それなら、こうなってるんじゃないかな
AAAA\0[BBBB\0]\t............\0\n
0198デフォルトの名無しさんNGNG
セパレータがNULな通信フォーマットとか。
0199デフォルトの名無しさんNGNG
一次元配列ならこれでできるけど
struct a{
…
}bc[x];
二次元配列ならこれで、全体定義にならないんだよね。
C言語だよ
0200デフォルトの名無しさんNGNG
#include<stdio.h>
#include<string.h>
main()
{
char a[10],b[10];
char *p;
int i,j;

strcpy(a,"Program");
p=a;
for(i=0;*(p+i-1)='\0';i++){
for(j=9;j=0;j--){
b[j]=*(p+i);
}
}
b[10]='\0';

printf("%s\n",sakasama);
}

このプログラムを動かしても文字化けして読めないんですが何処が間違っているんでしょうか
aの文字列を一度ポインタに入れて、それを逆に読むようにしてbに入れるプログラムなんですが・・・
0201デフォルトの名無しさんNGNG
>200
二重のforループで何がしたいのか分からない。

>for(i=0;*(p+i-1)='\0';i++){
一番最初のループで、*(p - 1)とアクセスすることになるけど、それは良いこと?

>b[10]='\0';
char b[10]と宣言しているのに、b[10]を書き換えても大丈夫?
それに、'\0'は文字列の終端を示すコードだけど、
配列の終端を示すコードじゃないよね?
0202デフォルトの名無しさんNGNG
struct a{
…
}(*bc)[x];
0203デフォルトの名無しさんNGNG
#include<stdio.h>
#include<string.h>
main()
{
char a[10],b[10];
char *p;
int i;

strcpy(a,"Program");
p=a;
for(i=0;i<=9;i++){
b[9-i]=*(p+i);
}

printf("%s\n", b);
}
0204デフォルトの名無しさんNGNG
なんか色々ミスってるし・・・

b[10]云々は消したはずなのに、一部残ってたみたいです
最後のprintf〜の最後のsakasamaはbです

>201
ループにポインタ入れるとマズイですかね?

>203
それ試してみましたが何も表示されませんでした
0205デフォルトの名無しさんNGNG
もういい、もうわかったから初心者スレに行こうな、な?
0206デフォルトの名無しさんNGNG
首吊って勉強し直して来ますorz
0207デフォルトの名無しさんNGNG
>180
よう,son of Bush,まだ見てるか?
漏れは main() 内で fnc() を呼び出す直前の,このクソも気になる。

> adim = (double **)malloc(sizeof(double *) * (nm));
> for(i=0; i<=nm; i++) {adim[i] = (double *)malloc(sizeof(double) * (nm));}

for の中で adim[nm] にもアクセスしようとしている。これはマズそうだ。
0208デフォルトの名無しさんNGNG
>>202
それでもできない…。
0209174NGNG
AAAA[BBBB]であっているとおもいます。

元々がEUCのファイルだったのですが、windowsに移し変えたときにSJISに変換して処理していました。
なのでEUCにもどしてからAAAAをぬきだして、SJISにすることにしたら、とりあえずうまくいきました。
どのみち2byteに統一するフォーマットじゃないのはバカだなといった感じですね。
ちなみに、これはお金を払って利用できるとある単語辞書です。
0210デフォルトの名無しさんNGNG
>>176
一応BCCも対応している。

>>185
http://homepage1.nifty.com/herumi/adv/adv40.html#003

>>200
#include <stdio.h>
#include<string.h>
main()
{
  char a[10], b[10];
  char *p;
  int i, len;

  strcpy(a, "Program");
  len = strlen(a);
  p = a;
  for (i = 0; i < len; i++) {
    b[len - i - 1] = p[i];
  }

  printf("%s\n", b);
}
0211174NGNG
>>210
SJISの1byte判定コード、ありがとうございます。
問題は解決してしまいましたが、覚えておく必要があるものなので助かりました。
0212デフォルトの名無しさんNGNG
>>209
元のフォーマットがバカなんじゃなくて
お前の変換がバカだったんじゃないのか?
0213デフォルトの名無しさんNGNG
>>210
後ろに変な文字が繋がってるんですけど
0214デフォルトの名無しさんNGNG
>>213
最後のprintfの前にb[len] = '\0';を書いてみろ。
0215174NGNG
>>212
フォーマットをあらかじめ2byteで統一する配慮と、
文字コードの変換の失敗は関係ないと思いますがどうなんでしょう。
ちなみにEUC→SJISはフリーソフトを使わせていただきました。

たびたび湧いてすいません、ななしにもどります。
0216デフォルトの名無しさんNGNG
C言語、Java、Linuxなどのおすすめの参考書を教えて下さい。
そんなスレなかったっけ?参考書まとめサイトとか
0217デフォルトの名無しさんNGNG
君はまず検索という高等テクニックを身に付けよう
0218http:// 210.222.18.163.80.kg/NGNG
黙れ
0219デフォルトの名無しさんNGNG
検索しても見つけきれなかった・・
0220デフォルトの名無しさんNGNG
それぐらい検索できない奴にプログラムをする将来はない。
それを習得すれば道は開けるだろう。
0221デフォルトの名無しさんNGNG
220は漫画読みすぎだなw
きにしないでいーよ
0222デフォルトの名無しさんNGNG
本音半分冗談半分だ
0223デフォルトの名無しさんNGNG
質問です。
typedef struct tag_foo {
struct tag_foo *prev;
struct FOO *next;
} FOO;
も
typedef struct {
struct tag_bar *prev;
struct BAR *next;
} BAR;
もエラーにならないんですが、このコンパイラーは壊れているのでしょうか?
文法的には正しい? C89の場合とC99の場合で教えてください。

あ、もちろん、
typedef struct {
struct tag_biz *prev;
BIZ *next;
} BIZ;
は、ちゃんとエラーになってくれます。
0224デフォルトの名無しさんNGNG
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/

最高の会社にするため、みんな頑張ってます!

0225デフォルトの名無しさんNGNG
>>223
はい、両者共に文法的に正しいです。
0226デフォルトの名無しさんNGNG
C89のときもただしかったのー?
struct struct ...ってことだよね?
0227デフォルトの名無しさんNGNG
int
main(void)
{
char s1[9], s2[9];
fgets(s1, sizeof s1, stdin);
fgets(s2, sizeof s2, stdin);
return 0;
}
これで 8byte 入力すると
2 回目の fgets() をスルーしちゃうんですけど
何故なんでしょう

9byte でスルーするなら
なんとなく分かるんですけど
0228デフォルトの名無しさんNGNG
>>227
>これで 8byte 入力すると

8byte = 改行を入れて 9byte 入れているつもりです
たとえば 10101010 とか
0229デフォルトの名無しさんNGNG
\0だろ・・・
0230デフォルトの名無しさんNGNG
改行、\0を含めて9byteまでです。
0231デフォルトの名無しさんNGNG
>>226
structのキーワードがついたポインタ型は、不完全型といって、
デリファレンスさえしなければどこでも使えます。
0232デフォルトの名無しさんNGNG
"10101010\n\0" で 10byte になっているってコトですか?
gets() と違うのか…
0233デフォルトの名無しさんNGNG
C言語初心者です
文字列の配列として char mona[20] = "abc def gh";があるとして
" "(つまり空白)ごとにそれぞれ別の空の3つの配列に入れなおしたいのですが、どのようにすればいいのでしょうか?
空白までの長さが常に一定なら楽ですが、例えば"giko u koko"のように色々な場合があるとします

自分の考えだと、for文を使って一つずつ配列を入れなおしていき、もし" "が出たら云々のようにしたいとは思ったのですが
未熟なプログラム技術ではうまくいきません・・・

どなたかアドバイスお願いします
0234デフォルトの名無しさんNGNG
>>233
int i;
char *giko[3];
size_t len = strlen(mona);
for (i = 0; i < sizeof(giko) / sizeof(*giko); ++i) {
giko[i] = malloc(len);
}
sscanf(mona, "%s%s%s", giko[0], giko[1], giko[2]);
for (i = 0; i < sizeof(giko) / sizeof(*giko); ++i) {
printf("%s\n", giko[i]);
free(giko[i]);
}
0235デフォルトの名無しさんNGNG
>>234
あ、ありがとうございます
実行したらできたけど、内容はいまいちわかってないので解読していこうと思います
0236デフォルトの名無しさんNGNG
#include <string.h>
#include <stdio.h>

int main(void)
{
  char mona[20] = "abc def gh";
  char *monaWord;
  
  monaWord = strtok(mona, " ");
  puts(monaWord);
  
  while (1) {
    monaWord = strtok(NULL, " ");
    if (monaWord == NULL) {
      break;
    } else {
      puts(monaWord);
    }
  }
  
  return 0;
}

こんなのでもどうでしょう?
なんかミスがあったら教えてください
0237デフォルトの名無しさんNGNG
あ、別の空の3つの配列に入れなおすんですね。
ちょっと題意がずれちゃってますが、「strtokはいかがですか?」ってのが言いたかったことなんで、
ご勘弁を(汗
0238デフォルトの名無しさんNGNG
strtok はタコ過ぎるからなあ
0239デフォルトの名無しさんNGNG
↑strtok がタコなのではなく、使い方がタコなだけだろ。
ちゃんと man に、静的領域を使用する事が明記されてるんだから。
ある所には strtok_r だって有るし...

でもJM見てたら「絶対に使用しないこと」とか書いてるな。
0240デフォルトの名無しさんNGNG
>>239
JM がタコなんでしょう。
0241デフォルトの名無しさんNGNG
> structのキーワードがついたポインタ型は、不完全型といって、
> デリファレンスさえしなければどこでも使えます。

いや、参照もしちゃってるんですよ。なぜエラーにならない?
0242デフォルトの名無しさんNGNG
>>241
構造体内に限らないが、
  struct Unknown_Tag *hoge1;
  struct Unknown_Tag hoge2;
前者はOK。後者はNG。
0243デフォルトの名無しさんNGNG
そんなことは当然わかっているのですが、
hoge1というメンバーに代入しているところでもエラーがでないことがどうしても理解できないのですが。
なぜでしょう?
0244デフォルトの名無しさんNGNG
代入なんかしてねーじゃん
0245デフォルトの名無しさんNGNG
だから、「dereferenceしない限り」と書いてあるじゃん。
0246デフォルトの名無しさんNGNG
くだらん質問のくせに随分と態度が不遜じゃん
0247デフォルトの名無しさんNGNG
ミニにタコ
0248デフォルトの名無しさんNGNG
>>236
一応書いておくと、静的領域に書き込もうとしているからダメダメ。
まさしく使い方が蛸。
0249デフォルトの名無しさんNGNG
どこがだよ。目ついてんのか?
0250コピペ推奨NGNG
    ┗┳┳━ |_| ━━━┳┳┛
      ┃┃ /  ヽ     ┃┃   もういくつ寝ると 出て行くの
    ┏┻┻ |======| ━━┻┻┓
    ┗┳┳ ヽ__ ¶_ ノ ━━┳┳┛ 朝鮮人は ウソついて 
      ┃┃ (/)     ┃┃
      ┃┃ (/)     ┃┃   日本に居座り たかります
    凸┃┃ (/)     ┃┃凸
    Ш┃┃ (/)     ┃┃Ш  早く出て行け 朝鮮人♪
    .|| ┃┃ (/)     ┃┃.||
  ∧_∧   (/) ∧_∧  ∧ ∧
  ( ・∀・)  (/)(´∀` )  <゜Д゜ > 元歌:童謡「お正月」
  (つ  つミ (/)(⊃⊂ ) ⊂  ⊃
  |_|_|_�I(/)_|_|_|__|  |
  /////ノ,,,,,,ヽ ////||  |〜
////////////  |∪∪
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
|        奉  納        |
0251コピペ推奨NGNG
http://www.geocities.com/naverchat/CyberTerrorism01/
特にヨーロッパ・アメリカ・オーストラリアなど先進国たちの一部ネチズンたちはチャット空間で韓国人だと明らかにすれば弾き出す
とか集団的に退場して捨てるなど韓国人に対して反感を持っていることで現われた.
バンクフェワンドルの海外ペンパル(http://www.prkorea.com/vankop10_5.html)と海外チャットサイト訪問経験(http://www.prkorea.com/vankop10_4.html)
を打ち明けた掲示板には外国ネチズンたちに ‘門前薄待’当ぎりネチズンたちの事情が並んでいる.
海外チャットを始めてからひと月頃なったと言うバンクフェワン精米領さんは
“韓国出身だと言えば有り難がらない場合が 70%ほどされた”と “その時ごとに気持ちが悪かった”と打ち明けた
0252デフォルトの名無しさんNGNG
int* num;
num = malloc(sizeof(int));
*num = 100;
のように動的なメモリ確保してそこへ値を代入したり
するときがあると思いますがどういったときに有効な手段
なのでしょうか?私は基本的にint iなどのような
使い方しかしたこと&その程度のプログラムしか打ったこと
がないのですが動的なメモリ確保+代入、参照はどういった
場面に有効で、どういった場面に不向きなのでしょうか?
よろしければご教授よろしくお願い致します。


0253デフォルトの名無しさんNGNG
>>252
最小単位の組み込み型 (char, int, floatなど)の
変数1つを動的確保するような状況はほとんど無い。

配列もしくは構造体/クラスなどの単位で
動的確保した時に有効な使い方が出来る。

詳細は↓に誰か書いてくれるでしょう^^
0254デフォルトの名無しさんNGNG
リストとかツリーとかデータ構造について勉強するといいよ
0255デフォルトの名無しさんNGNG
数字が(小数点含む)一行書かれたファイル(ex 1.0 2.0 3.0 4.0 ・・・・)を
入力して二つずつ足した値をtxtファイルに出力するプログラム(ex 3.0 7.0 ・・・)を
作っているのですがうまくいきません。
ビルドまではうまくいきますが実行しようとするとアプリケーション
エラーが出てしまいます。いったいどこがおかしいのかご教授ください
環境はOS;Win2000SP4 VC++6.0でコンパイルしました。
以下にソースを示します
0256デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
double in_buff;
double ta ;
double tb ;
char filename[255];
FILE *stream;
if(argc==1)
{
printf("設定ファイルが入力されていません\n");
return(1);
}
else
{
strcpy(filename,argv[1]);
}
if((stream = fopen("filename","r")) == NULL)
printf("%sを開けませんでした。\n",filename);
else
printf("%sを開きました\n",filename);
fscanf(stream, "%lf%lf", ta,tb);
in_buff = ta + tb;
fwrite(&in_buff, sizeof(int), 1, stream);
fclose(stream);
return 0;
}
0257デフォルトの名無しさんNGNG
>>256
ソースを見ただけで実際に実行してはいないが、
怪しいところが2つ

・"%lf%lf"
・fwrite(&in_buff, sizeof(int), 1, stream);

読み込み・書き込みストリームが同じなのは
仕様ですか?
0258デフォルトの名無しさんNGNG
>>257
"r+"の間違い
0259デフォルトの名無しさんNGNG
>256
fopen()の第一引数見てみ
0260デフォルトの名無しさんNGNG
fscanfが原因
0261デフォルトの名無しさんNGNG
fscanf(stream, "%lf%lf", &ta, &tb);
0262デフォルトの名無しさんNGNG
fopen失敗したら終了しとけよ
0263デフォルトの名無しさんNGNG
>ビルドまではうまくいきますが実行しようとするとアプリケーションエラーが出てしまいます。

本当にビルド出来たんだろうか?警告無視してっていう意味だろうか?
0264デフォルトの名無しさんNGNG
>>257
%lf%lfはあっている。
>>258
r+でもダメなものはダメ。
>>263
コンパイラによっては警告にはならないだろ。
0265デフォルトの名無しさんNGNG
コンパイラによってはって、「VC++6.0でコンパイルしました。」と書いてあるだろ。
0266デフォルトの名無しさんNGNG
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


void setData(int *p,int n);
main()
{
int *s;
int t,i;
printf("数値入力\n");
scanf("%d",&t);
setData(s,t);
for(i=0;i<t;i++)
printf("%d\t",*s++);
}

void setData(int *p,int n)
{
int i;
srand((unsigned) time(NULL));
for(i=n;i>=1;i--)
p[i]=rand()%100;
}


数値入力しただけの配列に0〜99の乱数セットする関数だけど・・・
強制終了してしまいまつint *s;を255個の配列にしたら別にOKなんでつ
ポインタ使った方法で強制終了しない方法を・・・
0267デフォルトの名無しさんNGNG
mallocすればいいじゃないの
0268デフォルトの名無しさんNGNG
あるファイルにbuf[4][128]というstaticの配列があり、これを別の
ファイルで使いたいのですが、このアドレスを関数で取得するに
はどう書けばよいのでしょうか?とりあえずこうしてみたのですが
駄目でした。
char** getBuf(void)
{
return (char**)buf;
}
int main(void)
{
char **ptr;
ptr = getBuf();
ptr[3][100]=100;
}
0269デフォルトの名無しさんNGNG
>>268
#include
すれば普通に使えない?
0270デフォルトの名無しさんNGNG
>>269
え、staticなので使えないですよね?ヘッダにbuf[4][128]を書くと
単にbuf配列が2つできるだけですし…
0271デフォルトの名無しさんNGNG
>>270
ごめん見落としてました
>>268 で行けそうだけどなあ……
0272デフォルトの名無しさんNGNG
bufがグローバルならstaticの意味ないし、ローカルならポインタ返せばいいんじゃね?
0273266NGNG
(;´Д`)  違うみたい・・・・なんでだろ・・・表示した瞬間に落ちる・・・
0274デフォルトの名無しさんNGNG
>bufがグローバルならstaticの意味ないし
bufはstaticです。
>ローカルならポインタ返せばいいんじゃね?
それが>>268なのですが…
0275デフォルトの名無しさんNGNG
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void setData(int *p,int n);
main()
{
    int *s;
    int t,i;

    printf("数値入力\n");
    scanf("%d",&t);

    s = (int *)malloc(sizeof(int) * t);

    setData(s,t);

    for(i=0;i<t;i++)
        printf("%d\t",*s++);

    return 0;
}
void setData(int *p,int n)
{
    int i;

    srand((unsigned) time(NULL));

    for(i=0; i <= n; i ++)
        p[i]=rand()%100;
}

どうだろ。
0276デフォルトの名無しさんNGNG
ちなみに>>268はコンパイルはとおりますが、実行時にメモリアクセス
違反で落ちます。
開発自体はC++で行っているのが何か関係あるのかな…
0277デフォルトの名無しさんNGNG
>>276
あー配列の値書き換えたらダメでしょ
0278デフォルトの名無しさんNGNG
は?
0279デフォルトの名無しさんNGNG
char** と char[][]は互換じゃないっしょ
0280デフォルトの名無しさんNGNG
static外せば?意味ないよ
0281デフォルトの名無しさんNGNG
>>277
なぜでしょう?配列を宣言しているソースの中では普通に
書き換えてますが…
0282デフォルトの名無しさんNGNG
>char** と char[][]は互換じゃないっしょ
はい、それが原因だと思うので、これを
char** getBuf(void)
どう書き直せばいいか教えてもらいたいのですが…
0283デフォルトの名無しさんNGNG
>>276
for(i=0; i <= n; i ++)
0284266NGNG
275>>

感謝!できますた。
ちょっと質問でつが、やっぱりポインタ使う時はmallocつかってメモリ確保しなきゃだめでつか?
C言語初めて間もないのでして・・・いままでmalloc使ったこと無かった・・・ORZ
0285デフォルトの名無しさんNGNG
>>284
mallocっつーかアドレス確保しる。
0286275NGNG
for(i=0; i <= n; i ++)
じゃなくて
for(i=0; i < n; i ++)
こうか
0287デフォルトの名無しさんNGNG
>>282
char (*getBuf(void))[128];
0288デフォルトの名無しさんNGNG
>>287
おえっ。変態!スケベ!エロッ!
0289デフォルトの名無しさんNGNG
C++スレの方にも書き込んでまして、以下の返答をもらえました。
>char* ptr; を char (*ptr)[128];に替えればいいだろ。
たぶん>>287さんも同じことを指摘してもらっていると思いますが
とりあえずこれで解決できそうです。有難うございました。

>static外せば?意味ないよ
文法の問題なのでCスレでよいと思って質問したのですが、実際
にはC++で開発してまして、static変数ではなくprivate変数なので
外せないのです。
0290デフォルトの名無しさんNGNG
マルチの上にスレ違いかよ・・・
0291デフォルトの名無しさんNGNG
漏れはC++はよく知らんのだが、private変数のポインタを外部に渡して
外から書き換えるっつうのは、法律的にも倫理的にも許される事なのか?
0292266NGNG
>>284 ふむ・・・やっぱり仕様でつか?
今まで使ったことなかったので・・・(;´Д`)
0293デフォルトの名無しさんNGNG
>>289
C++のスレのアドバイスはおかしい。
そのやり方だと

char[4][128]をchar **にキャストして
char **を char (*)[128] にキャストするんだぞ

型がわかってないやつがキャストしまくって
誤魔化す最悪のコード

>>291
設計がウンコーとしか言いようがないよね

0294デフォルトの名無しさんNGNG
>マルチの上に
マルチは申し訳ないです。
>スレ違いかよ・・・
一応、C/C++に共通する文法なのでスレ違いではないと
思ってますが…

>>293さん
良かったら正しいソースを書いて教えてもらえませんか?
0295デフォルトの名無しさんNGNG
>>294
そこで>>287みたいにすればキャストなしでできる。
0296デフォルトの名無しさんNGNG
>>291
private どころか static らしいよ。

>>293
ん?
    char buf[4][128];
    char (*getBuf(void))[128] {
        return buf;
    }
なら
  char (*ptr)[128] = getBuf();
で問題ないわけだが。
0297デフォルトの名無しさんNGNG
>char (*ptr)[128] = getBuf();
>で問題ないわけだが。
はい、C++の方のアドバイスを元に今はそうしてます。これです。
char* getBuf(void){ return (char*)buf; };
char (*ptr)[128] = getBuf();

これなら正しいんですか?
>型がわかってないやつがキャストしまくって
>誤魔化す最悪のコード
これには当てはまって無いですか?
0298デフォルトの名無しさんNGNG
>>297
だからそれは正しくない。
>>296のchar (*getBuf(void))[128]が正しい。
0299デフォルトの名無しさんNGNG
>>298
了解です。C++の方でも同様の答えをいただきました。

これで完全に解決しました。マルチに最後にまで付き合って
もらってすみません。勉強になりました。
0300デフォルトの名無しさんNGNG
>>297
なんつうか…もうアレだ、解らないなら

    typedef char STRBUF[128];

しとけ。

    static STRBUF buf[4];
    STRBUF *getBuf(void) {
        return buf;
    }
              :
              :
    STRBUF *ptr = getBuf();

すっきりしたろ?
0301デフォルトの名無しさんNGNG
linux上のgccから移植したプログラムをbcc32(無料版)でコンパイルしようと思っていますが、
gettimeofday()等が見当たらないのですがそういう物なのでしょうか?
bcc32でミリ秒単位の時間を調べるには何を使用すれば良いのでしょうか?
0302デフォルトの名無しさんNGNG
>>301
timeGetTimeかな
0303デフォルトの名無しさんNGNG
char (*getBuf(void))[128]{ return buf; };
char (*ptr)[128] = getBuf();
0304デフォルトの名無しさんNGNG
よくアプリケーションの設定を
変数名 = 値
の形式でファイルに出力しているものがありますが

fscafでファイルからデータを読み込んだ時
変数名の部分を文字列として変数にいれて
その文字列の名前の変数に値を代入する
なんてことができるのでしょうか?

それとも変数名を出力しているのは判り易いようにしているだけで
for分の中にswitchいれて順番に値を入れてるだけでしょうか?
0305デフォルトの名無しさんNGNG
Windowsだったらiniファイルだな。
0306デフォルトの名無しさんNGNG
>>304
> fscafでファイルからデータを読み込んだ時
> 変数名の部分を文字列として変数にいれて
> その文字列の名前の変数に値を代入する
> なんてことができるのでしょうか?
できない。

> それとも〜
WindowsならたぶんGet/SetPrivateProfileStringを使っている。
0307304NGNG
テキスト形式なので
てっきり書式使ったCだと思ってました

ありがとうございます
0308デフォルトの名無しさんNGNG
>>304
Hashの勉強しる
0309デフォルトの名無しさんNGNG
>>308
どこからHashの話になるんだ?
0310デフォルトの名無しさんNGNG
char *をkeyにするHashっていい田印ちゃうんか
つーか連想配列
0311デフォルトの名無しさんNGNG
0312デフォルトの名無しさんNGNG
double tempk;
double hikei,hihei;

〜略〜


scanf("%lf",&tempk); //気温入力 ←これを24回繰り返す
hikei = hikei + tempk; //hikeiに

〜略〜

hihei = hikei / 24;  //24で割る
printf("%d日の平均気温は%4.1f度です\n",j,hihei);

〜略〜

これで平均がちゃんと数値出ないんだけどなんででしょうか
0313デフォルトの名無しさんNGNG
誤差のこと?
0314デフォルトの名無しさんNGNG
>>312
hikeiが初期化されてないとか?
0315313NGNG
そっちだな
0316デフォルトの名無しさんNGNG
略、の中で初期化はしてます。
すいません重要な部分略しちゃいました。
全部1を入力して結果1のはずなんですけど結果が違うんです
0317デフォルトの名無しさんNGNG
printf("%d日の平均気温は%4.1f度です\n",j,hihei);

ここで四捨五入になっちゃってるんじゃない?
0318デフォルトの名無しさんNGNG
>>316
あーそれじゃ、略している中でぶち壊しているに一票。
0319デフォルトの名無しさんNGNG
>>312
これはうまく動いた。
#include <stdio.h>
#define N 24
int main()
{
  int i;
  double Sum = 0;
  for (i = 0; i < N; i++)
  {
    double Temp = 0;
    scanf("%lf", &Temp);
    Sum += Temp;
  }
  printf("平均気温は%4.1f度です\n", Sum / N);
  return 0;
}
0320デフォルトの名無しさんNGNG
#include <stdio.h>
int main(){
double kion[23][30];
double saikou,saitei,goukei,tempk,heikin;
double hikou,hitei,hikei,hihei;
int j,h,n;
goukei=0;heikin=0;hikou=0;hitei=0;hikei=0;hihei=0;tempk=0;
for(j=1;j<=30;j++){
for(h=0;h <= 23;h++){
printf("%d日、%d時の気温を入力してください\n",j,h);
scanf("%lf",&tempk);
kion[h][j] = tempk;
hikei = hikei + tempk;
goukei += tempk;
if(hitei == 0){hitei = tempk;
}else{
if(tempk < hitei){hitei = tempk;}
}
if(tempk > hikou){hikou = tempk;}
tempk = 0;
}
hihei = hikei / 24;
printf("%d日の平均気温は%4.1f度です\n",j,hihei);
printf("%d日の最低気温は%4.1f度です\n",j,hitei);
printf("%d日の最高気温は%4.1f度です\n",j,hikou);
〜以下略〜
こんな感じです。
6桁くらいにしてみたところ
上二つのループの中で何故か合計が2になってるみたいです。
何度もスイマセン。
0321デフォルトの名無しさんNGNG
>>double kion[23][30];
関係なさそうだけど
0322デフォルトの名無しさんNGNG
あるだろ
0323デフォルトの名無しさんNGNG
>>320
いろんなところにprintf入れて
tempkの値は正しいものが入ってるのか、
hikeiとかhiteiとかは正しい値になっているのかなどを出力しとけ。
0324318NGNG
double kion[24][30];にすべきだね。
やっぱり配列の範囲外に書き込むことでぶち壊してたと。
0325デフォルトの名無しさんNGNG
>>324
それでも壊れるよ

for(j=1;j<=30;j++){
0326デフォルトの名無しさんNGNG
double kion[24][30];にして>#define N 24使ったら正常に動きました。ありがとうございました。
0327デフォルトの名無しさんNGNG
開いたファイルがバイナリかテキストかはどうやって調べれば良いんでしょうか?
0328デフォルトの名無しさんNGNG
調べようがない。コンピュータにとってはテキストもバイナリに過ぎない。
割り当てのない文字コードを探してもいいかもしれないが、その場しのぎの
環境依存コードにしかならない。
0329デフォルトの名無しさんNGNG
>>327
fopenした時にどっちにしたかを自前で覚えてろ。
0330デフォルトの名無しさんNGNG
>>329
それは環境依存のバイナリモード、テキストモードの話だね?
0331デフォルトの名無しさんNGNG
>>329
回答を質問より先に読んだのに、質問を完璧に予測できた
0332デフォルトの名無しさんNGNG
>>328-329
qkccという文字コードと改行コードを変換できるプログラムがあるのですが、
ワイルドカードで指定したとき実行形式などのファイルにたいしては、
おそらくバイナリファイルです。と表示されたのでどうやって判断してるのかと
思ったんです。
汎用的な方法は無いんですか。どうもです。
0333デフォルトの名無しさんNGNG
>>332
qkcのこと? それならソースが公開されてるんで読んでみては?
0334デフォルトの名無しさんNGNG
>>332
テキストファイルには有り得ないデータがあればバイナリファイル。
0335デフォルトの名無しさんNGNG
判定するときは、文字コードを意識しないとね。
0336sageNGNG
あるテキストファイルに
3+4*12
とかいてある時、そのテキストファイルを読みこんで、
式の答えをその式の次の行に追加するにはどうしたらいいのでしょうか?
参考書をみてもファイルの読み込みから、さらに計算までの方法がのってなくて、
わかりませんでした。
助言おねがいします。
0337デフォルトの名無しさんNGNG

宿題丸投げクズは放置
0338デフォルトの名無しさんNGNG
>>336
「再帰下降」もしくは「再帰下向き」でぐぐるべし。
他の宿題スレでも、これ以上の回答は得られないものと考えるべし。
0339デフォルトの名無しさんNGNG
だれかがbisonを懇切丁寧に教えてくれるかもよープゲラ
0340デフォルトの名無しさんNGNG
/* 多くは語るまい */
char buf[1000];
char cmd[1100];
FILE * fp = fopen("aru.txt", "r");
fgets(buf, sizeof(buf), fp);
sprintf(cmd, "awk 'BEGIN {print %s}' /dev/null >> aru.txt", buf);
system(cmd);
0341デフォルトの名無しさんNGNG
>>336
#!/bin/bash
for aa in `cat text`; do
echo $aa;
echo $(($aa));
done;
0342340NGNG
げ、fclose()忘れてやんの。
0343デフォルトの名無しさんNGNG
まだCを勉強し始めてから間もない者です。
「20個の数字を入力して最大値、最小値を求めよ」という問題に対して、以下のようなプログラミングをしてみました。
一応コンパイルして、実行してみるとちゃんと動くのですが、いまいちエレガントさに欠けるような気がするので助言を
お願いします。

#include<stdio.h>

int main(void){

int i, max = -32768, min = 32768, a;

printf("20個の数字を入力して下さい\n");

for (i = 0; i < 20; i++){

scanf("%d", &a);
printf("%d個目の数字は%d\n", i + 1, a);

if(max <= a){
max = a;
}

if(min >= a){
min = a;
}
}

printf("\n最大値:%d\n最小値:%d\n", max, min);

return;
}
0344デフォルトの名無しさんNGNG
>>343
#include<stdio.h>

int main(void)
{

int i, max, min, a;

printf("20個の数字を入力して下さい\n");

for (i = 1; i <= 20; i++){

scanf("%d", &a);
printf("%d個目の数字は%d\n", i, a);

if(i==1){
max=min=a;
continue;
}
if(max < a){
max = a;
}

if(min > a){
min = a;
}
}

printf("\n最大値:%d\n最小値:%d\n", max, min);

return 0;
}
0345デフォルトの名無しさんNGNG
if(i == 0){
max = min = a;
}else if(max < a){
max = a;
}else if(min > a){
min = a;
}
0346デフォルトの名無しさんNGNG
プログラムの勉強初めて1週間も経たない者ですが。ビィジュアルC++6.0でプログラムの勉強したいと思い。
押入れから2年前ぐらいに買ったビィジュアルC++6.0(その時は3日もせずに押入れ行き)引っ張り出してCの勉強はじめテルですけど、今の所 全然
意味が分かりません。勉強してれば分かるようになるんでしょうか?今24歳無職です。大丈夫でしょうか?
0347デフォルトの名無しさんNGNG
     |
     J
でつ
0348デフォルトの名無しさんNGNG
>>346
勉強の仕方はどうやってますか?
0349デフォルトの名無しさんNGNG
>>348 林ハルヒコの新ビィズュアルC++6.0入門ビギナー編と新C言語入門ビギナー編(←これは3年前にブクオフで400円で購入)のうちC言語のほうを読んでいます。
0350デフォルトの名無しさんNGNG
ビィジュアルC++6.0で実行しようとすると#include<sudio.h>の部分がエラーになります。何ででしょうか?
#include<sudio.h>
double wa(double x, double y);

main()

{
double a,b,sum;

a=11.11;
b=22.22;
sum=wa(a,b);
printf("a=%f b=%f sum=%f\n",a,b,sum);
}

double wa(double x, double y)
{
double z;

z=x+y;

return(z);

}
0351デフォルトの名無しさんNGNG
>>350
そんなライブラリ無いよ。
多分書きたかったであろうは「stdio.h」
スタンダードIO(標準入出力)の意味だ覚えとけ
// studio.hと間違えている人は見るけれどsudioは始めてみたな。。。
0352デフォルトの名無しさんNGNG
みんな釣りか...
0353デフォルトの名無しさんNGNG
>>350 すいませんでした。ただの綴り間違えでしたか。
0354デフォルトの名無しさんNGNG
エラー表示をちゃんと読もうぜ。
なんのための表示なんだか・・・
0355デフォルトの名無しさんNGNG
>>344
>>345 ありがとうございます。

この場合は負の数を考えない事が多いので、0以上で考えればいいのですね。
0356デフォルトの名無しさんNGNG
>>355
違う。
一個目のデータを(仮の)最大値、最小値としている。
なお、>344は1オリジン、>345は0オリジンなことに注意。
0357343NGNG
>>356
書き込んだ後に、自分の早とちりに気づきました・・・。
おっしゃるとおりです。
オリジンというのは、forの「0以上20未満」と「1以上20以下」の差のことですよね?
0358デフォルトの名無しさんNGNG
通りすがりからのレスですまん。

> オリジンというのは、forの「0以上20未満」と「1以上20以下」の差のことですよね?

まあそういうことだ。

で、一般に「オリジン」と言ったら開始位置のことを指す。
普段数える時にゼロから始める奴はいないからプログラムの出力もそうしろ、
ってことだろう。
(配列だとかで0オリジンだからって出力も0にする必要は無い。ユーザーは何も知らないから混乱する)
0359デフォルトの名無しさんNGNG
房丸出しの質問ですいません。
(プログラム経験全くなし)いきなりVisual C++6.0に挑戦しても大丈夫ですか?
0360デフォルトの名無しさんNGNG
>>359
ガタガタ言ってねえで手を動かせ
0361デフォルトの名無しさんNGNG
多少スレ違いの可能性があるかもしれないんだけど
C言語のコンパイラって何使ってる?
C言語勉強しようと思ってLSI C-86侵食版を使おうとしてるんだけど
うまく作動しないorz
ちなみに環境はwin MEです
いい動作方法か
コンパイラのオヌヌメあったら、教えてくだしあ
馬鹿でスマソ
0362デフォルトの名無しさんNGNG
>>361
>>2
0363デフォルトの名無しさんNGNG
>>361
主流プログラム】
VisualC++   UNIXOSはこれで書いてる。プログラム作り難い。ny作者がGUIに凝る為bcbに逃げた実績あり。
        GUIをVBで内部をC++で書いてる人多いみたい。数多くの初心者を粉砕してきた。
VisualBasic  複雑なプログラムの開発できない。動作が重い。短時間でアプリを作れる。
JAVA     オブジェクト指向でそれがまた難しいとか。JAVA仮想マシーンを間に挟むことで
       全てのOSで実行できるのが売りだが、全てとはいかないとか。VBより軽く.netよりちと重い。
Delphi    中々高機能なアプリがVB並みに簡単に作れ実行速度もC++並み。資産を利用できないのが弱み。
       ファイルサイズが大きめ。
BorandC++Builder  C++並みに高機能な上VB並みに作りやすくアプリも軽い。資産を利用できる。
          ファイルサイズが大きめ。けど人気は微妙。
【支流プログラム】
HSP    優しくて主に簡易的なゲームを作りに適している
ひまわり  日本語でプログラムを書ける
jscript vbscript javascript php perl   基本的にWeb系プログラム

【2chスレ数ランキング】(左から多い順)
 C,C++系圧倒 JAVA系55スレ VB系38スレ HSP系37スレ delphi系35スレ BCB系11スレ ひまわり4スレ
【完成したプログラムの処理速度】(左から早い)
 c,c++>>BCB>delphi>>>>>>>.net>>JAVA>>>>>VB>>…>>HSP
【完成したプログラムのファイルサイズ】
 c,c++が小さくBCB,delphi系は大きくなる
0364デフォルトの名無しさんNGNG
あのな、ここはCのスレで、質問してるバカもCコンパイラを訊いてるだろ?
0365デフォルトの名無しさんNGNG
>>363
なんだその嘘と偏見だらけのリスト。
0366361NGNG
たくさんのレスありが�d
とりあえず全くの初心者なんで
>>2をみてみたんだけど何をつかっていいのやら全くわかりませんですたorz
c++のコンパイラってC言語でもコンパイルできるのかな??
ほんと馬鹿ですまん
0367デフォルトの名無しさんNGNG
>>366 できるよ。
0368361NGNG
なるほど!それじゃ、CコンパイラにこだわらずC++コンパイラでも試してみるよ
ご迷惑おかけしますたm__m
0369デフォルトの名無しさんNGNG
C++よりもCの方が早いよー
camlだったらCとC++の間くらいの早さだよー
0370デフォルトの名無しさんNGNG
LSI-C侵食版って……
まぁ、過去の遺物だが。
0371デフォルトの名無しさんNGNG
>>366
大抵のC++コンパイラは拡張子がcならCのソースコードとしてコンパイルする。

ところで少なくともLSI-Cを使えないのなら無料のコンパイラはどれも無理だな。
どれもインストールの方法は似たり寄ったりだし。
0372361NGNG
やっとコンパイル出来ますた!
ちなみにBORLAND C++
でやりますた
レスしてくれた方々�dクス
0373デフォルトの名無しさんNGNG
strtok("", " ");
と記述するとコンソールが落ちるんですがなぜでしょうか。
0374デフォルトの名無しさんNGNG
man strtok
0375373NGNG
× strtok("", " ");
〇 strtok("a", " ");
0376デフォルトの名無しさんNGNG
#include <string.h>
char *strtok(char * restrict s1, const char * restrict s2);
(ISO/IEC 9899:1999 7.21.5.8 The strtok function -1 Synopsis)とあり、
strtokはstrに対して内容の変更を行う。一方、
If the program attempts to modify such an array, the behavior is
undefined. (ISO/IEC 9899:1999 6.4.5 String literals -6)
とあるから、落ちたとしてもそれは不適切な動作とは言えない。
0377373NGNG
>>376
どもです。
まさかそんな仕様だったとは思いませんでした。
0378デフォルトの名無しさんNGNG
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
をダウンロードしたいのですが、日本語ページはないのでしょうか?
0379デフォルトの名無しさんNGNG
>>378
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
0380デフォルトの名無しさんNGNG
DLするだけならすぐ分かるだろ。


クマー
0381デフォルトの名無しさんNGNG
>>378
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
0382デフォルトの名無しさんNGNG
「やさしいC」か「猫でもわかるC言語プログラミング」を買おうと思ってるのですが
読んだことのある方がいたら感想を聞かせてもらえませんか?
0383デフォルトの名無しさんNGNG
いいかげんスレ違いの話ばかりするのはやめようや
0384デフォルトの名無しさんNGNG
猫に人間の言葉が分かるか!!
0385デフォルトの名無しさんNGNG
>>384
わからないかなー にゃんにゃん
0386デフォルトの名無しさんNGNG
nyaid nyain(nyaid){
nyaintf("にゃにゃぁ にゃぁにゃん\n");
}
0387デフォルトの名無しさんNGNG
>>384
分かるようだぞ。人間の言葉は。
ただしコンピュータ言語は絶対分からないはずだ。理由は覚える必要を
感じないから。
0388デフォルトの名無しさんNGNG
さがりすぎ
0389デフォルトの名無しさんNGNG
今手元にコンパイラが無いので、自分では確認できないんですが、質問いいでしょうか。
bool型を返す関数check_bool()というのがあるのですが、呼び出し側のほうで、
int ret = check_bool(value);と書かれてます。
自分のソースではないんですが、どうやらコンパイルも通っているそうで。
trueやfalseの場合、retには何が入ってくるんですか?
0390デフォルトの名無しさんNGNG
>>389
0か0以外
0391デフォルトの名無しさんNGNG
stdbool.h嫁
0392デフォルトの名無しさんNGNG
>>389
FALSE が 0 なら TRUE は -1 が正しい
http://pc5.2ch.net/test/read.cgi/prog/1082154544/l50
0393デフォルトの名無しさんNGNG
>>389
trueなら1、falseなら0。
コンパイルが通るのはshort→intと同じように、変換後の型の表現可能な値の範囲が変換前より大きくなる整数同士の型変換の扱いになるからだと思う。
0394デフォルトの名無しさんNGNG
strcmpでNULL文字かどうかの比較をしているんですが、
strcmp( var, "\0")
strcmp( var, '\0')
これって下が正しいんですよね。
文字列が""で、文字が''ですよね?
0395デフォルトの名無しさんNGNG
何がいいたいのか解らん
下ってコンパイル通らなそうなんだけど
0396デフォルトの名無しさんNGNG
strcmpは文字列比較だぞ。
「ですよね?」じゃなく、前提で勘違いしてる。
0397デフォルトの名無しさんNGNG
char hoge = '\0';

if( hoge == '\0' )
printf( "ぬるぽ!\n" );
else
printf( "ガッ\n" );

-----------------------
ぬるぽ!
0398デフォルトの名無しさんNGNG
>>394
>>396の言う通り、strcmpは文字列同士の比較なのでナル文字かどうかの比較にはstrcmp(var, "")か*var == '\0'
0399デフォルトの名無しさんNGNG
>>397
ガッ
0400デフォルトの名無しさんNGNG
パソコン超初心者なんですが ライフゲームを
作っています。どうすれば完成させることが出来ますか?

#include<stdio.h>
main()
{
int a[20][30];
int b[20][30];
int i,j;
int s,kaisu=0;
char c;

for(i = 0; i<20;i++)
for(j=0;j<30;j++){
a[i][j]=0;
b[i][j]=0;
}

b[5][7]=1; b[6][7]=1; b[7][7]=1;
b[8][7]=1; b[6][8]=1;
b[8][9]=1; b[11][14]=1;
b[11][12]=1; b[11][13]=1;
b[12][15]=1; b[15][20]=1;

↓下に
0401デフォルトの名無しさんNGNG
お邪魔しマース
0402デフォルトの名無しさんNGNG
>>400
スレ違い
0403デフォルトの名無しさんNGNG
printf("次?(単に Enter 終わりは e)\n");
scanf("%c",&c);

while( (c=getchar() != 'e' ) ){
printf("次?(単に Enter 終わりは e)\n");

for(i=1;i<=20;i++){
for(j=1;j<=30;j++){

s=b[i-1][j-1]+b[i-1][j]+b[i+1][j]+b[i+1][j+1]+b[i][j-1]+b[i+1][j-1]+b[i][j+1]+b[i-1][j+1];

if(s==2)
a[i][j]=a[i][j];

else if(s==3)
a[i][j]=1;
else
a[i][j]=0;
} }
for(i=0;i<20;i++){
for(j=0;j<30;j++)
if(a[i][j] ==0 )
printf("○");
else if(a[i][j] == 1)
printf("●"); printf("\n");
}
scanf("%c",&c);
}}
0404デフォルトの名無しさんNGNG
もういいって。
0405デフォルトの名無しさんNGNG
すみませんでした。
0406デフォルトの名無しさんNGNG
CSVファイルの特定のフィールドに特定の文字列が含まれている
行を抽出する(要するにフィールドを意識したGREP)のに
一番速い方法はどんな感じでしょうか。
0407デフォルトの名無しさんNGNG
>>406 るby!!!!!!!!!!!!!!!!!!!!!!!!
0408デフォルトの名無しさんNGNG
質問です
printfの中で""を表示したいのですがどうすればよいのでしょうか?
表示結果を
"abc"
と表示したいのですprintf(""""\n);では駄目みたいなのですが…
0409デフォルトの名無しさんNGNG
printf("\"abc\"\n");
0410408NGNG
>409
ありがとうございました、無事できました!
0411デフォルトの名無しさんNGNG
>407
いや、Cで組むとしたら、の話です。
0412デフォルトの名無しさんNGNG
漸化式x[1]=0.1
x[n+1]=(x[n]+1)^(1/3)のn番目の値を出すプログラムを書きたいのですが
三乗根の書き方が分かりません、アドバイスお願いします
0413デフォルトの名無しさんNGNG
>>412

double cbrt(double)
0414デフォルトの名無しさんNGNG
ある処理のパフォーマンスをmsec単位で測定したいのですが、
どうすればよいでしょうか?
0415デフォルトの名無しさんNGNG
OSのサポートなしには不可能なので処理系依存。
0416デフォルトの名無しさんNGNG
>>414
このスレ的にはclockかな?
0417デフォルトの名無しさんNGNG
>>411
grepのソースでも読めば? セル中に','が含まれていないことが保証できるならgrepでできることだし。
#例えば第3フィールドが123なら、system("/bin/grep '^[^,]*,[^,]*,123,' csv.txt");
0418デフォルトの名無しさんNGNG
>>406
使いにくいがregexはどう?
C++ならboostなんだろうけど
0419デフォルトの名無しさんNGNG
>417
grepは遅いのでダメです。
0420デフォルトの名無しさんNGNG
>>406
DBに突っ込め。
0421デフォルトの名無しさんNGNG
>420
いやいや、質問している間にだいぶ状況が
整理できたのでなんとかなりそうです。
0422デフォルトの名無しさんNGNG
>420
それ今まで出た中で一番遅い方法じゃねーの?
0423デフォルトの名無しさんNGNG
定本Cプログラマのためのアルゴリズムとデータ構造を読んだ人(じゃなくてもいいのですが)
に質問なんですが、二分検索木の挿入や削除の所で、構造体へのポインタのポインタを、
わざわざ使う理由がわかりません。
ふつうに構造体のポインタで良いと思うのですが、どうなのでしょうか?
名著と言っている人もいますが、ちょっと読む気無くし中です……
0424デフォルトの名無しさんNGNG
printfが内部で持っているバッファサイズっていくつでしょうか。
8KB?あとこれって変更できますか?
0425デフォルトの名無しさんNGNG
>423
それで動いたのか?
0426デフォルトの名無しさんNGNG
>>424
内部に持っていない。
0427デフォルトの名無しさんNGNG
>426
ウソつけ
0428デフォルトの名無しさんNGNG
>>427
サイズはいくつなんですか?
0429デフォルトの名無しさんNGNG
質問ですが、
char *s;と、
char s[256];
では何が違うのですか?
0430デフォルトの名無しさんNGNG
typedef double Number;
中略
void moge(Nunber, void(*)(Number, Nunber[]);

のvoid(*) の(*)って何を意味しているんですか?
0431デフォルトの名無しさんNGNG
C70
0432デフォルトの名無しさんNGNG
>428
8192バイト
0433デフォルトの名無しさんNGNG
>>429
ttp://www.kouno.jp/home/c_faq/
0434デフォルトの名無しさんNGNG
>>432
どこで確認できるのでしょうか?変更する方法もお願いします。
0435デフォルトの名無しさんNGNG
>>433
どうもです。
0436デフォルトの名無しさんNGNG
>>425
手元にPCないので確認できないです。
ていうかこの本の例題、main関数ぐらい使ってくれよ〜
0437デフォルトの名無しさんNGNG
>434
つきあいきれんよ
0438デフォルトの名無しさんNGNG
>436
単にお前が初心者すぎて読みこなせないだけなんじゃないの?
0439デフォルトの名無しさんNGNG
>>437
8192バイトという数はどこでわかったんですか?
それだけでも教えてください。
0440デフォルトの名無しさんNGNG
>>429
配列とポインタの違い。
0441デフォルトの名無しさんNGNG
char *s; ←これは宣言で
char s[256]; ←これは定義ですよね?
0442デフォルトの名無しさんNGNG
>>441
ttp://www.kouno.jp/home/c_faq/c6.html
0443デフォルトの名無しさんNGNG
>>441
いいえ。どちらも定義です。
0444デフォルトの名無しさんNGNG
>>430
ポインタ。
0445デフォルトの名無しさんNGNG
>>442
どちらも宣言みたいですね。
宣言と定義がぐちゃぐちゃに・・_| ̄|○
0446デフォルトの名無しさんNGNG
>>445
( ゚д゚)ポカーン
0447デフォルトの名無しさんNGNG
配列の宣言「char a[6]」
ポインターの宣言「char *p」
だから合ってるんじゃないの。ぶっちゃけどうでもいいけど。
0448デフォルトの名無しさんNGNG
宣言⊃定義
なんだから合ってると言えば合ってるんだけどね。でもねえ…
0449デフォルトの名無しさんNGNG
あえて言っちゃうと規格がバカ!
Cでは宣言文と定義文が分かれていないと初期のころから不思議がられていた。
で、上の「char a[6];」のみで「=」無しのやつなんかは、規格の6.9.2で、
仮定義(tentative definition)と、仮なんて無理やりな言葉で誤魔化した。
真の定義じゃないから、関数の外で「char a[6]; char a[6];」なんて複数仮定義してもOKだし、
もちろん、「extern char a[6]; static char a[6];」なんて仮定義しても警告すら出ん。
規格では「extern」は内部結合でもいいよと書かれているが、字面じゃ完璧エラーだろ。
0450デフォルトの名無しさんNGNG
extern int i3 = 3; という定義も規格上はOK
0451デフォルトの名無しさんNGNG
main()
{
int i[8][8]={1.....}; //中身は省略
A();
}

みたいなプログラムでDLLでA()関数を呼び出してstatic int i[8][8]の
中から特定の数字を見つけてその値を返り値として戻したいのですが
main()で宣言している変数をDLL側に渡す方法ってありますかね?
0452デフォルトの名無しさんNGNG
引数として渡す
0453デフォルトの名無しさんNGNG
>>449
>もちろん、「extern char a[6]; static char a[6];」なんて仮定義しても警告すら出ん。
>規格では「extern」は内部結合でもいいよと書かれているが、字面じゃ完璧エラーだろ。

お前はアフォか?
0454デフォルトの名無しさんNGNG
float data = 1.00825;
tmpString.Format("%f",data);

ここで、tmpStringに入る文字列は "1.008251"となるのですが。
これはどうしてでしょう。
0455デフォルトの名無しさんNGNG
似たような値だから気にするなって事で。
0456デフォルトの名無しさんNGNG
>>453
警告も出なかった。
gcc
0457453NGNG
>>456
警告なんて出る訳ないからアフォだと言ってるんだが
0458デフォルトの名無しさんNGNG
>>454
float data = 0.1;
で試してみ?
0459449NGNG
ツッコミどころが微妙でワロタ
0460デフォルトの名無しさんNGNG
入力した文字列データを2次元配列に格納したあと、
逆順に表示するプログラムの表示。
ただし、一文字目に'@'が入力されるとデータ入力を終わる。
データ数は最大20個、また一つの文字列データの
最大長は半角10文字

実行例
word=sekiyu
word=yasai
word=denwa
word=@
denwa
yasai
sekiyu
0461デフォルトの名無しさんNGNG
>>460
プログラムの表示とはバイナリですか?
それともソースファイルを表示するのでしょうか?
0462デフォルトの名無しさんNGNG
>>461
ソースファイルです
0463デフォルトの名無しさんNGNG
>>460
で?
それが何?
痴呆?
0464デフォルトの名無しさんNGNG
>>463
その類の反応も見飽きた。
飽きた飽きた飽きた飽きたぁぁああぁあぁうぇww
0465454NGNG
>>458
0.100000
となりますが・・・

あと、例では単に data変数に測値を入れてますが、
実際にはある演算の結果が 1.00825(デバッガ上で確認)となり、
これをFormat関数に渡すと誤差を含んだ文字列が帰ってきてる
ようです。

うーむ。
0466454NGNG
測地→即値
です
0467デフォルトの名無しさんNGNG
浮動小数点の不正確
http://docs.hp.com/ja/B3909-90017/ch14s03.html
0468デフォルトの名無しさんNGNG
>>449 は変数のスコープを理解していない罠
0469デフォルトの名無しさんNGNG
>>454
float data = 0.1;
tmpString.Format("%.18f",data);
0470デフォルトの名無しさんNGNG
>>465
デバッガ上で確認した数値が誤差を含んでいない保証はない。
0471デフォルトの名無しさんNGNG
>>465
1. 1.00825 なんて数は、2進数では表現できない。
2. デバッガでは有効桁数6桁で表示しているが、
  Format (つかコレ C じゃねぇだろ) では 7桁表示。
0472423NGNG
423なのですが、この本を読み返しているうちにだんだんわかってきました。
構造体↓
NODE **p;
を宣言して
*p
として使ったときと、
NODE *p;
を宣言して
p
として使ったときでは、指しているものが違うことに気がつきました。
何か違っていることを言っているようでしたら、訂正お願いします。
0473デフォルトの名無しさんNGNG
AIXでC言語による開発をしています。

アーカイブでextern宣言した配列に値を設定しておき、
呼び出し元でその配列を参照することはできますでしょうか?
0474デフォルトの名無しさんNGNG
>>473
やってみたら?
0475デフォルトの名無しさんNGNG
>>472
NODE n;
NODE *p1;
NODE **p2;
p1 = &n;
p2 = &p1;
----------------
*p1 は n;
*p2 は &n;
0476デフォルトの名無しさんNGNG
とある関数
void hoge(double &x, double &y){}

のdouble &xとdouble &y の&の意味を教えてください。
0477デフォルトの名無しさんNGNG
>>476
こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1098543578/
0478デフォルトの名無しさんNGNG
>>474
やってみたところ、なんとか自己解決しました。
お騒がせしました。
0479デフォルトの名無しさんNGNG
2 1 > 1 H 1 M 3 H 1 F 1 7 1 / 1 " 1 1 1
のように文字 個数という順で並んでいる画像ファイル(バイナリ形式pbm)を
その個数分だけ文字を並べていく(RLE解凍)プログラムです。

if ((fp = fopen(argv[1], "rb")) == NULL){
printf("file open error!\n");
}

while(!feof(fp)){
fscanf(fp, "%c %d ", &c, &i);
while(i>0){
printf("%c", c);
i--;
}
}

という形で直接リダイレクトして出力してるんですが、
出力ファイルの「」(^Kとxyzzyでは表示されている)だけが出力されずに
解凍した画像にズレが生じてしまいます。
解決方法をご教授ください。
環境はWinXP+Cygwin+gccです。
0480デフォルトの名無しさんNGNG
←ここだと表示されてないですね・・・
0481デフォルトの名無しさんNGNG
^Kなのか。\nに\rがつくというならまだわかるんだが。
とりあえず標準出力はテキストモードで、
リダイレクトした際には吐き出すディレクトリのマウントモード(だっけ?)に
依存しそうだから、stdoutをfreopenかなんかでモード変えてみたらどうだろう。
0482479NGNG
>>481
テキストモード、freopenでも変化なしです…。
当然fopenでも変わりませんでした。
0483デフォルトの名無しさんNGNG
単純に、printf("%c", 11)では書けるのかな。
0484デフォルトの名無しさんNGNG
コントロール文字
0485デフォルトの名無しさんNGNG
fputc()使っといたら?
0486デフォルトの名無しさんNGNG
誰か助けてください。
次の関数で0≦x≦2の範囲で、xの値の0,1ごとに
yの値を計算するプログラムを作成せよ。画面にはx、y両方の値を表示す
るようにすること。while文を使うこと。y=x*x−3x+5/4
0487デフォルトの名無しさんNGNG
>>486
#include <stdio.h>

int main()
{
  double x;

  for (x=0.0; x<=2.0; x+=0.1) {
    printf ("x = %.1f\ty = %.2f\n", x, x*x-3*x+5/4);
  }
  return 0;
}

ていうかマルチすんなボケ
0488デフォルトの名無しさんNGNG
>>486
float x=0;
while(x<2.0){
printf("x=%2.1f,y=%2.1f\n",x,x*x-3*x+5/4 );
x+= 0.1;
}

答えつつ質問
与えられた整数mの中の任意の桁nの値を求めるにはどうすればいいでしょうか?
例えばm=123のときは
n=1 ; 3
n=2 ; 2
n=3 ; 1
n=4 ; 0
のように求めたいんですが
0489デフォルトの名無しさんNGNG
>>488

(n-1)*10で割った後、10で割ったあまりを取ればいいんじゃない?
0490489NGNG
(n-1)*10→pow(10,(n-1))
orz
0491デフォルトの名無しさんNGNG
>>489
ああ、成る程!
ありがとうございました
0492479NGNG
解決しましたんで報告します。

>>483さんの方法で出力自体はできたんで、
fscanfしたものと比較、もし^Kだったら>>483さんの方法で出力、
ということをしようと思ったんですが、
その時点ですでに^Kをfscanfできていなかったことが分かりました。

で、代わりにfgetcを用いた所、^Kを格納することができました。
数字部分にもfscanfを用いると何故か格納ができなくなっていましたんで
そちらに対してもfgetcを用いた、という感じです。

これは処理系によるfscanfの不具合なんですかね?
よく分からん(´・ω・`)

とりあえず、ご教授ありがとうございました。
0493479NGNG
ソースです。

while(!feof(fp)){
c = fgetc(fp);
fgetc(fp);
i = fgetc(fp) - 48;
j = fgetc(fp) - 48;
while (j>=0 && j<=9){
i = i * 10 + j;
j = fgetc(fp) - 48;
}
while(i>0){
fprintf(fpw, "%c", c);
i--;
}
}
fclose(fp);
fclose(fpw);
0494773NGNG
ありがとうございます。今学校で提出しました。
0495486NGNG
ありがとうございます。今学校で提出しました。
0496479NGNG
あれ?
出現回数もchar型で出力&スペース除去したものを

while(!feof(fp)){
fscanf(fp, "%c%c", &c, &i);
while(i>0){
fprintf(fpw, "%c", c);
i--;
}
}

で復元したら、問題なくできました。
なんだったんだ…。
0497デフォルトの名無しさんNGNG
>>496
scanf()系は、%sや%dなどではホワイトスペースを取り除く機能を持っている。
通常ホワイトスペースは空白文字、タブ文字、改行文字だがもしかしたら、
0x0bもホワイトスペースとして取り除かれたのジャマイカ。
最後の例では%cしか使っていないからその問題は起きない。

しかし、fscanf()やfprintf()のようなコストの掛かる関数ではなく、
fgetc()やfputc()を使うべきジャマイカ。
0498デフォルトの名無しさんNGNG
0x0B ^K VT 垂直タブ
0499486NGNG
マルチしました。ごめんさい。
0500486NGNG
ごめんなさい。
0501486NGNG
ごめんね。。。
0502486NGNG
ぬるぽおおおおお
0503486NGNG
ぬるぽしました。ごめんなさい。
0504デフォルトの名無しさんNGNG
struct value {
double a1;
double a2;
double a3;
};

int main(){
struct value value;

scanf("%f",&value.a1);
printf("%f",value.a1);
}
略してますがこんな感じのソースなんですが、構造体のメンバにscanfで
入力できません。コンパイルは通ったのです。なんででしょうか?
0505デフォルトの名無しさんNGNG
>>504
scanf の場合は、%f は double ではなくて float だったような。
double にしたいのなら %lf にしよう。
0506デフォルトの名無しさんNGNG
scanf("%lf",&value.a1);
printf("%lf",value.a1);
0507デフォルトの名無しさんNGNG
scanfの場合doubleでもfloatでも%lfにするんじゃなかったっけ?
0508504NGNG
お答え頂きありがとうございます。質問しといて申し訳ないのですが、
要点を書こうとして略しすぎてしましました。%fを%lfにしてもだめで
した。問題は別のところにあったようです。もう一度ご教授ください。

void scan_value(value a){
printf("\nベクトルの要素1を入力してください。");scanf("%lf",&a.a1);
printf("ベクトルの要素2を入力してください。");scanf("%lf",&a.a2);
printf("ベクトルの要素3を入力してください。");scanf("%lf",&a.a3);
printf("\n");
}
という関数を作って、main関数の中で
struct value value_a;
scan_value(value_a);
となってます。
全部書くのもあれなのでまた略してます、すいません。
この辺が問題のようなので。
お願いします。
0509デフォルトの名無しさんNGNG
>>507
そんなわけないと思う。
第一、バイト数がわからなければ、実装できないだろう。
0510デフォルトの名無しさんNGNG
ポインタ
0511デフォルトの名無しさんNGNG
>>508
それはキミ scan_value(value a) って書いたら、
value のコピーが渡されるから、
入力しても関数呼び出し側には反映されないよ。

scan_value(value* a) のようにポインタを使わないといかん。
0512デフォルトの名無しさんNGNG
scanf()ではdoubleは%lf。floatは%f。
ポインタを扱うのでサイズの違いに意味がある。
printf()ではdoubleは%f。%lfは処理系依存だったはず。
暗黙の型変換が入るのでfloatは勝手にdoubleになるからやはり%f。
0513デフォルトの名無しさんNGNG
printfについてはfprintfと同様と定義されており、以下の通り。

【ISO/IEC 9899:1999 7.19.6.1 The fprintf function -7】
... or has no effect on a following a, A, e, E, f, F, g, or G conversion
specifier.

と言うことで、「%lfと%fは同じ結果にならねばならない」が正解。
0514508NGNG
value avoid scan_value()関数の定義の中の
scanf("%lf",&a.a1);
scanf("%lf",&a.a2);
scanf("%lf",&a.a3);
の3つの行で
. または .* の左側に構造体が必要
というエラーがでましたがこれはどういうことですか?
教えて君ですいません。Cでやり始めたのですが出来なくて
C++でやったら出来ました。でも原因が知りたいので是非お願いします。
0515デフォルトの名無しさんNGNG
>>514
scan_value(value *a)
にしてるなら
scanf("%lf", &a->a1);
0516デフォルトの名無しさんNGNG
アロー演算子
0517479NGNG
>>497
なるほど。
今後なるべくfgetc()やfputc()使うように気をつけることにします。
0518デフォルトの名無しさんNGNG
またアフォが1匹製造されたか・・・
0519デフォルトの名無しさんNGNG
質問!
ファイル分割する単位はどうやって決めてますか?
複数の人間で開発する場合は、一人一人の分担で決まると思いますが、
一人で開発できるボリュームのとき、分割しようとすると、
ヘッダが入り組んできて、よくわからなくなってしまいます。
分割しすぎなのでしょうか?
0520デフォルトの名無しさんNGNG
>>519
そういうネタはこっちのスレで
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0521デフォルトの名無しさんNGNG
>>519
Cなら機能単位でまとめ、グローバル変数などは一つのヘッダで一括管理すれば
良いでしょう。
C++ならクラス単位。
Cでもファイル単位でクラスの様に扱うとややオブジェクト指向風になるので保守性が
良くなります。
↓このようなことをする人もいますが、ここまで来ると少しやりすぎという気がします。
http://www.sage-p.com/process/cool.htm
0522デフォルトの名無しさんNGNG
関数を使って現在時刻(型はstruct tm)を得たいのですが、
関数内で現在時刻を得ても、その時刻をmain関数に反映させることができません。
どうすればいいでしょうか?ご教授お願いします。

・プログラム
#include <stdio.h>
#include <time.h>

void get_time( struct tm *tm )
{
  time_t t;
  time(&t);
  tm = localtime(&t);
  printf("1:%s", asctime(tm) );
}

int main (void)
{
  struct tm *tm;
  get_time( tm );
  printf("2:%s", asctime( tm ) );
  return 0;
}

・実行結果
1:Sat Nov 13 19:57:08 2004
2:Sun Jan 0/ 00:00:l0 1900
0523デフォルトの名無しさんNGNG
ぬるぽーーーーーーーー
0524デフォルトの名無しさんNGNG
ガッ でもこの場合ぬるぽじゃないぞ。
mainでとったtmの実体ないだろ。だからだ。
0525522NGNG
>>524
mainのtmはポインタにしてはいけないということでしょうか?
0526デフォルトの名無しさんNGNG
というかアドレス渡ってないんじゃないのかあんど&
0527デフォルトの名無しさんNGNG
ここにはバカしかいないんですね

#include <stdio.h>
#include <time.h>

void get_time( struct tm **tm )
{
    time_t t;
    time(&t);
    *tm = localtime(&t);
    printf("1:%s", asctime(*tm) );
}

int main (void)
{
    struct tm *tm;
    get_time( &tm );
    printf("2:%s", asctime( tm ) );
    return 0;
}
0528デフォルトの名無しさんNGNG
すぐ答えをだすやつは包茎
0529522NGNG
>>524,526,527
どうもありがとうございました。
ポインタについて、全然理解できていないようなので、出直してきます。
0530デフォルトの名無しさんNGNG
つーか、struct tmなんて中途半端なもんやり取りしないでtime_tか文字列にしとけと思うが。
0531デフォルトの名無しさんNGNG
>>527
なんでわざわざ struct tm **tm よ?

>>522
get_time() の
    tm = localtime(&t);
を
    *tm = *localtime(&t);
にして、main で
    struct tm tm;
    get_time(&tm);
と、実体のあるポインタを渡す。

…でも、できれば localtime() じゃなく localtime_r() を使った方がいい。
0532デフォルトの名無しさんNGNG
メインルーチンなどで確保したint型の配列を、サブルーチンで使えるようにするには
どうすればいいのでしょうか?
0533デフォルトの名無しさんNGNG
自分で考えようね。
0534デフォルトの名無しさんNGNG
グローバル変数として定義する。
0535デフォルトの名無しさんNGNG
関数の引数として参照渡しすればよかろう。
0536デフォルトの名無しさんNGNG
ぽいんちゃ
0537デフォルトの名無しさんNGNG
void f(int (*a)[16][16][16])
{}

void f(int* a)
{}

int main()
{
    int a[16][16][16][16];

    f(a);
    f(&a[0][0][0][0]);

    return 0;
}

詳しくは禿本C.7.3で
0538デフォルトの名無しさんNGNG
なぜ、このスレで禿本がでてくる?
0539デフォルトの名無しさんNGNG
独習Cの練習問題なんですが、CD-ROMがないので答えがわかりません・・・
数当てゲームのプログラムなんですが、正解のあとループの終わらせ方がわかりません
どなたかご教授願います。↓までが限界です・・・

#include <stdio.h>
int seikai(int num);

int main(void)
{
int ans,num,i;
ans = 253;

printf("数当てゲームです\n整数を入力して下さい。");
scanf("%d",&num);

for (i = 0;i < 9; i++)
{
if(num == 253) seikai(num);
if(num < 253) printf("小さいです\n");
if(num > 253) printf("大きいです\n");
printf("もう一度入力して下さい");
scanf("%d", &num);
}
return 0;
}
int seikai(int num)
{
printf("正解です!");
return 0;
}
0540デフォルトの名無しさんNGNG
if(num == 253) seikai(num);

を
if(num == 253) {
seikai(num);
break;
}
0541デフォルトの名無しさんNGNG
return
0542デフォルトの名無しさんNGNG
ruby
0543539NGNG
>>540
ありがとうございました
0544539NGNG
関数を作る必要なかったのかorz
0545デフォルトの名無しさんNGNG
num使ってないね
0546デフォルトの名無しさんNGNG
プログラムのどこかで exit または main から return した後って
malloc で獲得したメモリは開放されるのでしょうか。
0547デフォルトの名無しさんNGNG
どこにそんなこと書いてあったんだ? >546
0548デフォルトの名無しさんNGNG
開放される場合が多いが、すべての環境で開放されるわけではない。
---終了--
0549デフォルトの名無しさんNGNG
char *s;

s=(char *)malloc(sizeof(char)*100);
.
.
.

free(s);

0550デフォルトの名無しさんNGNG
関数Aに配列(の先頭アドレス)を渡して、
その関数内でその配列の要素数を求める方法はないのでしょうか?
複数の文献をネットであたりましたが、通常のsizeof割り算方式では
不可能を示すものしかなく、関数内でもとめる方法がありません。
教えてください。
0551デフォルトの名無しさんNGNG
>>550
不可能です。
0552デフォルトの名無しさんNGNG
C言語を始めようと思い開発ツールを購入しようと
思っているのですが、後で痛い目にあいたくないので
扱いやすいソフトを教えていただけないでしょうか?
0553デフォルトの名無しさんNGNG
学生だったら
激安で買えるVisual Stdio.NET theSpoke Disc.8
http://pc5.2ch.net/test/read.cgi/tech/1095325802/
0554デフォルトの名無しさんNGNG
>>552
Emacs 最高
Elisp 覚えればな。
0555デフォルトの名無しさんNGNG
>>552
ゆくゆく何を作りたいかを書きもせず、ましてやOSさえ書いてないのは、
もしかしてエスパーがこのスレにいると思ってますか?
0556デフォルトの名無しさんNGNG
WINMXでDL
0557デフォルトの名無しさんNGNG
>>551
じゃC++はどうなのよ?
0558デフォルトの名無しさんNGNG
呼び出し元の関数で配列の最後になにかフラグを入れたら
良いんじゃないっすか?
charだったらNULLか何か入れて
関数AでNULLが出るまでカウントする。
これじゃ駄目かな?
0559546NGNG
開放されたかされてないかはどうやって調べればよいでしょうか。
0560デフォルトの名無しさんNGNG
↑>>550の質問
0561デフォルトの名無しさんNGNG
>>558
駄目です。
0562デフォルトの名無しさんNGNG
>>561
WHY?
0563デフォルトの名無しさんNGNG
例外つかうとかは?
0564デフォルトの名無しさんNGNG
>>558
そこまでする努力するのなら、素直にパラメータひとつ増やしてサイズ渡せばいいと思うんだが。
というかそっちの方が楽ですよ。特殊なキャラを埋め込むときにどうせサイズが必要だし、
呼ぶ前に埋めるのと、呼ばれた側でカウントするのとで無駄に速度が落ちるし、いいことないっす。
0565デフォルトの名無しさんNGNG
>>558
結局フラグ入れたり、引数に要素数渡したり、グローバル変数でフラグにするしかないのか?
0566デフォルトの名無しさんNGNG
グローバル変数でフラグって何よ
0567デフォルトの名無しさんNGNG
558です。
自分もパラメータ増やすと思いますが。
>>550は通信等でどうしてもバイトしか渡せない時があるから
その時の処理じゃないのですか?
0568デフォルトの名無しさんNGNG
CとC++の違いって
Cのオブジェクト指向の要素を取り入れたのがC++と聞きましたが
では
C#との違いは何でしょうか?
Cさえ覚えればC#もすぐに覚えられるのでしょうか?
0569デフォルトの名無しさんNGNG
558です。
セマフォの管理などの場合はグローバルでフラグを
持つのはかなり有効と思うのですが?
0570デフォルトの名無しさんNGNG
C++はプラットフォームを選ばないですが、
C#はWinのみで動作する言語です。
0571デフォルトの名無しさんNGNG
↑失礼C#はWinのみでしかPG出来ない言語でした。
0572デフォルトの名無しさんNGNG
>>552
これからC言語を始めようと思うなら
お金かけずに秀丸+Borlandで十分だと…
0573デフォルトの名無しさんNGNG
てか秀丸とtheSpokeの値段が大して変わんないんだな
0574デフォルトの名無しさんNGNG
>>550
需要がありそうなのに決定的な解決方法はないってことになるのかな?
0575デフォルトの名無しさんNGNG
Borlandの開発環境は少ないからやはりgccかと
cigwin落としてviで書くのが一番かと...
何をやるのか分からないがやはりコンパイルやリンカの仕組みは
知らないと。
0576デフォルトの名無しさんNGNG
タダでやるならこっちのほうがいい。
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
0577デフォルトの名無しさんNGNG
eclips+gcc
0578デフォルトの名無しさんNGNG
EclipseでCって使う人多いのでしょうか?
0579デフォルトの名無しさんNGNG
俺も気になった業務系の人は使うのかな?
0580デフォルトの名無しさんNGNG
ただでそれなりな環境って意味では一番の組み合わせなんじゃないの?
0581デフォルトの名無しさんNGNG
>>567
どこからその通信云々の前提が出てきたんだ…

固定長前提の場合を除くと、C以外でも配列のサイズを渡すしかないっすよ。
コードの字面で陽に渡すかどうか(コンパイラが受け持つかどうか)は別としてね。

0582デフォルトの名無しさんNGNG
>>581
結局そういう結論になりますか・・・。
C言語に特化した方法で良いので何か効率の良い解決方法はありませんか?
それについて書かれたサイトやモジュールはないでしょうか?
0583デフォルトの名無しさんNGNG
>>582
何故その方法にこだわる?
0584デフォルトの名無しさんNGNG
C言語では配列の引数はポインタと同じ扱いになっている(こうしないと配列丸ごとコピーすることになるからかな?)
ポインタは通常メモリアドレスに過ぎないので、それだけではどれだけの長さがあるのかなんて判別できない
通信の場合でも何も無しでは何処で区切るなんてわかりっこないので
一定の長さにするか、事前に長さを渡すか、区切りを決めておくという方法でやり取りする
0585デフォルトの名無しさんNGNG
>>582
どうしても、ていうなら、こんなのくらいしか思いつかない。

typedef struct {
  char *p;
  size_t size;
} char_array;

char_array *char_array_alloc(size_t size) {
  char_array *ca = malloc(sizeof char_array);
  if (!ca) return NULL;
  ca->p = malloc(size);
  if (!ca->p) {
    free(ca);
    return NULL;
  }
  ca->size = size;
  return ca;
}

0586デフォルトの名無しさんNGNG
続き
void char_array_free(char_array *ca) {
  free(ca->p);
  free(ca);
}

size_t char_array_get_size(char_array *ca) {
  return ca->size;
}

char *char_array_get_buf(char_array *ca) {
  return ca->p;
}

使い方はわかるよね。
0587デフォルトの名無しさんNGNG
struct {
 size_t size;
 char values[1];
} char_array;
しといて
char_array* array = malloc( sizeof( size_t )+count );
というのはよく見るね。
言語仕様的にはアウトの予感だけど。
0588デフォルトの名無しさんNGNG
>>587
アウトです。C99でも標準化委員会で議論はされたけど結局アウトだったような。
0589デフォルトの名無しさんNGNG
>>588
values[1] じゃなくて values[] にれば C99 的に ok
http://seclan.dll.jp/c99d/c99d04.htm#dt19990726
0590デフォルトの名無しさんNGNG
>>589
おー、サンキューっす。それは知りませんでした。精進します。
0591デフォルトの名無しさんNGNG
>>557
template<int N> void Hoge(int& Foo[N]);
0592デフォルトの名無しさんNGNG
struct {
 size_t size;
 char values[0];
} char_array;
0593デフォルトの名無しさんNGNG
>>559
プロセス終了処理を追えばわかる。
0594デフォルトの名無しさんNGNG
>>591
template <T, std::size_t N> void f(const T (&t)[N});
0595デフォルトの名無しさんNGNG
配列の要素を引数と言う香具師始めて見た。
0596デフォルトの名無しさんNGNG
始めるなよ ぼけ
0597デフォルトの名無しさんNGNG
IRCでvoid教祖様とそのとりまき連中が話していたのだが、
for (;;) と
while (1) で、
gccでのコンパイル結果のバイナリーに差がでるような
gccのオプションって何だ?
IRCの会話をみながら、ひそかに自分で試してみたが、見つからなかった。
(見つけて反論してやろうと思ったのに)

gccにかぎらず、その2つで差がでるようなコンパイラー自体
思い当たらないのだが。
0598デフォルトの名無しさんNGNG
VC++6.0
; 8 : for(;;);

jmpSHORT $L582
$L585:

; 9 :
; 10 : while(1);

moveax, 1
testeax, eax
jeSHORT $L586
jmpSHORT $L585
$L586:
0599デフォルトの名無しさんNGNG
ぼるじょあが一言
↓
0600デフォルトの名無しさんNGNG
ゥルェエー!
0601デフォルトの名無しさんNGNG
>>599-600
お二人様ご案内
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0602デフォルトの名無しさんNGNG
最近、C、C++の基礎本を読み終えたのですが
とあるプログラムを使ってコマンドプロンプト上に出力された文字列
(例:りんご を 3個 ください)からオリジナルのプログラム上で
自動対応させることは可能でしょうか。

例
1):「りんごを3個ください」(外部プログラムからの出力)
↓
2):「りんご3個でよろしいですね」(if文などを使ったオリジナルプログラムから出力)

初歩的な質問ですいませんが宜しくお願いします。
0603デフォルトの名無しさんNGNG
初歩的な日本語も勉強しましょうね
0604デフォルトの名無しさんNGNG
>>602
は?
0605デフォルトの名無しさんNGNG
>>602
できるが、多少面倒かもしれない。
0606デフォルトの名無しさんNGNG
602です。
読みづらい文章ですいません。
最初にコマンドプロンプトで、あるプログラム(hoge.exe)を実行します。

C:\bin\hoge\hoge.exe -C
sentence1: りんご を 3個 ください

と出力されるのですが、ここで主力結果「りんごを・・」に対する返答を
するプログラムをCで作りたいのですが、キーボードからの入力は
scanfを使えばいいと分かるのですが、既に画面上に表示されている文字列を
利用する関数はありますでしょうか。

分かりづらい説明ですいませんが宜しくお願いします。

0607デフォルトの名無しさんNGNG
>>593
> プロセス終了処理を追えばわかる。

プロセス終了処理ということは OS のソースを見ないといけないということで
しょうか。 Windows などの場合はどうすればよいでしょうか。
0608デフォルトの名無しさんNGNG
>>606
でちゃったの拾うのは面倒なんで
FIFOかPIPE使って
0609デフォルトの名無しさんNGNG
>>607
そんなときのためにサポートセンターがある。
0610デフォルトの名無しさんNGNG
結論として終了前には必ずfreeするということでOK?
0611デフォルトの名無しさんNGNG
>>610
そうしない積極的な理由がない限り、それでいい。

>>606
インタラクティブに対応するのは結構難しいかと。
事前に出力がわかっているのなら、入力すべき内容を
テキストファイルにでも入れてリダイレクトで済むかも知れず。
0612デフォルトの名無しさんNGNG
する必要のない処理を入れるなんてナンセンスですよ。
0613デフォルトの名無しさんNGNG
>>608, 611
どうも有難うございます。参考にさせていただきながらやってみます。
またお世話になるかもしれませんが宜しくお願いします。
0614デフォルトの名無しさんNGNG
アホはほっとこ。
なんでこんなナンセンスな香具師が湧いてるんや…
0615デフォルトの名無しさんNGNG
>>612
>611が敢えて抽象的な表現したんだから察しような。
0616デフォルトの名無しさんNGNG
ナンセンスな質問ですいません。
事前に出力される結果は分かっていないんです。外部音声認識により
「りんご3個」と発話した結果(話者により、果物名や個数は異なる)
に対して

if fruit(りんご){
こんな処理しろ
}
else {
りんごじゃなかったら、こうしろ
}

上記適当ですが、こんな形の処理を実行したいと思ってます。。
初歩的な質問かもしれませんが宜しくお願いします。
0617デフォルトの名無しさんNGNG
くどくどやって申し訳ないんですけど
こんな感じでやって OS に異常がなければ free しなくても大丈夫?

int main(int argc, char *argv[], char *envp[])
{

int i;
int *dummy;
int mem = 1;

for (i = 0 ; i < 1000000; i++){
if ((dummy = malloc(mem <<= 1)) == NULL){
printf("mem: %d\n", mem);
exit (1);
}
}

return 0;

}

0618デフォルトの名無しさんNGNG
OK
0619デフォルトの名無しさんNGNG
漏れはatexitでメモリ解放の手続きを行ってる(た)がな
最近C使ってねぇや
0620デフォルトの名無しさんNGNG
>>617
異常が無いかどうかを正確に判断できるのならね。
0621デフォルトの名無しさんNGNG
>>616
パイプ使っとけ。
0622デフォルトの名無しさんNGNG
>>620
> 異常が無いかどうかを正確に判断できるのならね。

何回も実行して特に不都合がなければ異常なしと判断してよいと思っていたの
ですが、何かいい方法はあるのでしょうか。
0623デフォルトの名無しさんNGNG
ねえよ。
0624デフォルトの名無しさんNGNG
ひどい。
0625デフォルトの名無しさんNGNG
質問させてください。

たとえば、

明日は\n
いい\n
天気="晴れ"ですね。\n

という文字列があるとします。

「晴れ」の部分を取り出すときはどうすればいいのでしょうか?
sscanf()関数しかないのでしょうか?
0626デフォルトの名無しさんNGNG
>>622
気になるならfree()しとけ。気にならないならfree()しなくていいから。
0627デフォルトの名無しさんNGNG
>>597
すげー亀レスだけど最適化切ればwhile(1)は
cmpしてからjmpすると思う。多分。
少なくともBorland C++ではそうだった気がする。昔試したときは。

ってそういう話ではない?
0628デフォルトの名無しさんNGNG
>>616
真っ当な回答としては、そのプログラムの開発元に相談しろとしか言えない。
既に何度か書かれているようにpipeを使ってできないこともないが、結構難しい。
後は、要件と開発コスト次第。
0629デフォルトの名無しさんNGNG
>>625
他にも方法は色々あると思うが、sscanf()を躊躇う理由がないならそれでいい。
0630デフォルトの名無しさんNGNG
取り出すとはどういう意味だ?文字列の中に「晴れ」が含まれてるか
チェックするにはどうするかという質問?

0631デフォルトの名無しさんNGNG
>>630
天気="雨" 天気="曇り"という場合もあります。

「雨」「曇り」・・・

sscanf(buf,"明日は\nいい\n天気="%s"ですね。\n",tenki);
これくらいならいいけど、文字列がもっと長くて、取り出したい値が10個あるときにどうすれば・・・
0632デフォルトの名無しさんNGNG
>>625
strstr()
0633デフォルトの名無しさんNGNG
明日はいい天気だといってるに雨や曇りがあるのか?
ハァ?
0634デフォルトの名無しさんNGNG
>>631
取り出したい文字列を配列にして、ループでまわしたら?

#define N_TENKI_TYPE 3
cahr *tenki_type[N_TENKI_TYPE]={"晴","雨","曇"};

for(i=0;i<N_TENKI_TYPE;i++){
val=strstr(buf,tenki_type[i]);
if(val)break;
}
if(val)strcpy(tenki,tenki_type[i]);
でどーよ?
あとは、正規表現regex()とか。
0635デフォルトの名無しさんNGNG
>>631
sscanf(buf, "%*[^\"]\"%[^\"]", tenki);
0636デフォルトの名無しさんNGNG
cahr
0637デフォルトの名無しさんNGNG
^t
0638634 NGNG
Ctrl-t
0639デフォルトの名無しさんNGNG
誰か>>633の相手してやれよ
0640デフォルトの名無しさんNGNG
chasen
0641デフォルトの名無しさんNGNG
>>634
(;´Д`)スバラスィ ...ハァハァありがとうございます。

そこに入る値が不明(ランダム)の場合はどうしたらよいのでしょうか?
0642デフォルトの名無しさんNGNG
>>641
ランダムなら、適当な値入れればいいんじゃない?
0643デフォルトの名無しさんNGNG
>>641
chasenで形態素解析するのと、
「="」が出てきてから「"」までの区間と「="」の一つ前の形態素とを
取り出せばよい。
0644デフォルトの名無しさんNGNG
>>641
>635は虫界。
0645デフォルトの名無しさんNGNG
>>643
chasen()関数?初耳だ・・・
勉強せねば・・・

>>644
おお!!thx!!!!!見落としてたよ。

スレの住人様迷惑かけてすみません。
0646デフォルトの名無しさんNGNG
誰か>>639の呼びかけに応えてやれよ
0647デフォルトの名無しさんNGNG
>>645
関数ちゃうちゃう…
http://chasen.naist.jp/hiki/ChaSen/
0648デフォルトの名無しさんNGNG
形態素解析しないと、
「今日はいい天気="晴れ"ですね。」
という構文だと 天気="晴れ" というのが取り出せへんと思うんやけど。
0649デフォルトの名無しさんNGNG
>>595
じゃあ、おまいの解決方法は?
0650デフォルトの名無しさんNGNG
?
0651デフォルトの名無しさんNGNG
農家の人たちは雨降る(など自分たちに都合のいい天気の)ことをいい天気と呼ぶんだぞ。
0652デフォルトの名無しさんNGNG
strstr とかの標準関数って、検索したい文字列が日本語でも
ちゃんと動く?
0653デフォルトの名無しさんNGNG
日本語の文字列の中から1バイトの文字を探そうとすると悲しいことになるかもしれない。
0654デフォルトの名無しさんNGNG
>>652
実装による。
非標準だがVCやBCCなら_mbsstrなどが用意されている。
0655デフォルトの名無しさんNGNG
>>652
C++でstd::wstring.find()使えばどう?
0656デフォルトの名無しさんNGNG
ユニッコードにしちゃえ
0657デフォルトの名無しさんNGNG
strstr、wcsstr、_mbsstr のヘルプのところにワイド文字版、
マルチバイト文字版と書いてあるのですが、ワイド文字、
マルチバイト文字とは何を指しているのでしょうか。
0658デフォルトの名無しさんNGNG
>>657
聞くスレをちゃんと選んで聞けよ
0659デフォルトの名無しさんNGNG
>658
その通りでした。>657の質問は取消ます。
0660デフォルトの名無しさんNGNG
>>658
うるせぇんだよ。ボケ。
0661デフォルトの名無しさんNGNG
>>660
黙れ総理大臣
0662デフォルトの名無しさんNGNG
アセンブリ言語で書いたプログラムをC言語の中で関数として使用するにはどう宣言すればいいですか?
例えばa.asmというのに対してCプログラム中で、extern inline void a();としてやってみましたが、
コンパイル時に function "a" was referenced but not defined となってしまいます。
ご存知の方いたらよろしくお願いします。
0663デフォルトの名無しさんNGNG
>>662
インラインアセンブラ でぐぐれ
0664デフォルトの名無しさんNGNG
同一ディレクトリ内にあるすべてのファイルを開く良い方法はありますか?
0665デフォルトの名無しさんNGNG
環境に依存しますね
0666デフォルトの名無しさんNGNG
linuxです
opendirとかreaddirを使えばできそうですね
0667デフォルトの名無しさんNGNG
>>666
ひとつのプロセスがオープンできるファイルの数は限りがあるよ。
0668デフォルトの名無しさんNGNG
ファイルを開くのではなくファイル名を取りたかったので
大丈夫みたいです

#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>

int main(){

DIR *dp;
struct dirent *entry;

if((dp = opendir("dat"))==NULL){
exit(-1);
}
chdir("dat");

while((entry=readdir(dp))!=NULL){
printf("%s\n",entry->d_name);
}
}
0669デフォルトの名無しさんNGNG
char buf[100];
gets(buf);

で何も入力せずにリターンを押した場合、bufには何が入ってくるのですか?

if (gets(buf)==NULL)
break;
というコードを見て、何も入力せずにリターンを押した場合にbreakと思ったのですが、
動かなかったです。
0670デフォルトの名無しさんNGNG
>>669

シラネぇーよ。
0671デフォルトの名無しさんNGNG
定番に過ぎるが、
>>670
知らんのなら黙っとけ。な?

>>669
何が返されるのか知らず、マニュアルも見ず、か。
いい度胸だ。
「成功すると引数そのまま、エラー or ファイル終端で NULL」
改行コードでファイル終端と見做されちゃ困るだろう?
0672デフォルトの名無しさんNGNG
>>671
死ねや。ゴミ糞やろうが。
0673デフォルトの名無しさんNGNG
>>669-672=ゴミ屑でFA
0674デフォルトの名無しさんNGNG
定番に過ぎる
0675デフォルトの名無しさんNGNG
>>669
何も入力せずにリターンを押した場合は、
長さゼロの文字列を入力したことになる。
0676デフォルトの名無しさんNGNG
>>669
gets()がNULLを返すのはEOFまで読み込んだか失敗したとき。
何も入力していないときはEOFでも失敗でもない。

お前がやりたいことはたぶんこう。getsよりfgetsの方が良いが。
if (gets(buf) == NULL || !strcmp(buf, ""))
  break;
0677669NGNG
もっとスマートにできる方法教えろ。
0678669NGNG
>>669
初心者がいきがってんじゃねぇーぞ。
0679デフォルトの名無しさんNGNG
喧嘩したらだめだよー 騙りもだめー 煽りもだめー 自演もだめー にゃんにゃん
0680デフォルトの名無しさんNGNG
>>677
そこで関数化ですよ。
inline bool Gets(char *p)
{
  return (gets(buf) == NULL || !strcmp(buf, "");
}
0681デフォルトの名無しさんNGNG
getsはサイズチェックしないから(ry
0682669NGNG
質問に答えて下さった方々、ありがとうございます。
何か騙りがたくさんいますが。
getsで読み込んだ時、何も無かった場合のエラー処理がしたかったのです。
676さんの方法でいけそうです。
ありがとうございました。
0683デフォルトの名無しさんNGNG
いや、strcmp(buf, "")なんて恥ずかしいコード書かなくていいから。
0684デフォルトの名無しさんNGNG
if (gets(buf) == NULL || buf[0] == '\0' )
こう?
0685デフォルトの名無しさんNGNG
buf[0] == '\0'
0686デフォルトの名無しさんNGNG
CでおすすめのRFC無い?
0687デフォルトの名無しさんNGNG
Request For Comments?
0688デフォルトの名無しさんNGNG
Readers for C-language
0689デフォルトの名無しさんNGNG
if (gets(buf) == NULL || !*buf )
0690デフォルトの名無しさんNGNG
if ( !(gets(buf) && *buf) )
0691デフォルトの名無しさんNGNG
時差を取得する方法を教えてください
0692デフォルトの名無しさんNGNG
海外へ飛ぶ
0693デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/html/LDP_man-pages/man5/tzfile.5.html
0694デフォルトの名無しさんNGNG
bcc5.5.1ですが、
int aaa();
int main() { return aaa(); }
int aaa() { return 0; }
というようなファイルをコンパイルすると
プロトタイプ宣言のない関数という警告がでます。
プロトタイプ宣言を int test(void); とするか、
-P オプションで C++ とみなしてコンパイルすると
出ないのですが、VC6 や gcc ではこんなのはでません。
bcc の C は古い仕様だからなのですか?
0695デフォルトの名無しさんNGNG
× int test(void);
○ int aaa(void);
0696デフォルトの名無しさんNGNG
>>694
いえ、gccでもオプションを調整すれば出ます。
つーか、Cはプロトタイプ宣言必須じゃないからね。
引き数無しのプロトタイプはvoidを明記する必要があるわけさ。
0697694NGNG
わかりました。ありがとうございます。
0698デフォルトの名無しさんNGNG
ふと思ったのですが,
文書ファイルに文字を上書きをする場合は,単にwrite()で書き込みをすればそれで十分と思ったのですが,
文書ファイルに文字を挿入する場合っていったいどういう処理が行われているんでしょうか?
そのまんま考えてみると,挿入された文字以降のデータを全て移動させないといけないはずなんで,それってものすごい効率悪い処理だな〜って思い,気になってしまいました.
0699デフォルトの名無しさんNGNG
>>698
http://pc5.2ch.net/test/read.cgi/tech/1095843584/560
なぜ時間差でマルチする?
0700デフォルトの名無しさんNGNG
>>698
内部では行単位でリストに格納している
やたら長い行だとそれでも効率悪いがそんな文章は滅多にない
0701デフォルトの名無しさんNGNG
関数へのポインタなんですが、
void (*func)(void) = func1; などとしたとき、

func()
↑と
(*func)()
↑とではどう違いますか?
0702デフォルトの名無しさんNGNG
>>701
どちらも結果は同じなので、今は書きたい方を書いていいことになってます。
0703デフォルトの名無しさんNGNG
>>698
こっちのスレだとwrite()の時点でスレ違い。
つーか、あっちでほぼ答が出てるのに何故そのままコピペ?

で、あっちでも書いたけど、普通は入出力を別のファイルにするから問題にならない。
0704デフォルトの名無しさんNGNG
テキストエディタみたいなものなら通常一文字ごとにファイルに書かないしねぇ。
0705デフォルトの名無しさんNGNG
>>701
同じだよ。
俺はポインタを通していることを隠したくないんで後者だな。
あくまで個人的な気持ちで、周りに負担をかけてまで突っ張りはしないが。
0706デフォルトの名無しさんNGNG
構造体のs.memberとp->memberでは区別してるけど、関数呼び出しでは
区別してないって奴ね。言語の決めの問題。
0707デフォルトの名無しさんNGNG
>>706
ハァ?????????????????????





wwwwwwwwwww

ぷ
0708デフォルトの名無しさんNGNG
>>707
706 がわけわかめってとこには同意だが、
おまいさんもちゃんと技術的な話を入れないと同類だよ

(*p).member って書き方も使うときは使う
(*pp)->member なんてメリットねえし
0709706NGNG
関数呼び出しと関数へのポインタでの関数呼び出しでは
どちらも()を使うけど、構造体と構造体へのポインタでは
使う演算子が違うってことなんだけど。

・関数
func()
(*pfunc)()

・構造体
s.member
ps->member
0710706NGNG
書き忘れっていうか書き間違い。

関数へのポインタの場合は

pfunc()

でも可。
0711デフォルトの名無しさんNGNG
配列渡しってなんですか?
0712デフォルトの名無しさんNGNG
全角文字や漢字の0x5C(\\)を(全角、漢字のものと)特定してはじく方法ってありますか?
0713デフォルトの名無しさんNGNG
>>712
あります。
ないとも言えます。
文字列を先頭から舐めていけばなんとかなるでしょう。
0714デフォルトの名無しさんNGNG
SJISなら文字列頭から見ていって、漢字の範囲のコードが出てきたら次の文字は漢字の一部と判定していくのが確実
ユニコードは知らん
0715デフォルトの名無しさんNGNG
ホレ
ttp://www.rtpro.yamaha.co.jp/RT/docs/misc/kanji-sjis.html
0716デフォルトの名無しさんNGNG
VC7.1 で stdbool.h をインクルードしようとすると
インクルード ファイルを開けません。'stdbool.h': No such file or directory
とエラーが出てしまいます。
VC7.1 では stdbool は使えないのでしょうか?
0717宿題47NGNG
>>716
宿題46かな?
VCだとPOSIX独自のインクルードファイルがないから取り敢えずこれでも突っ込んどいて。
--
/* dummy stdbool.h for no POSIX env.. */
#ifndef STD_BOOL_H
#define STD_BOOL_H
typedef enum {false, true} bool;
#endif
0718デフォルトの名無しさんNGNG
>>717
stdbool.hは今やC99で標準ライブラリに取り込まれた。
もちろんVCは非対応だが。
0719717NGNG
>>718
ふむ、情報THX。
C99に対応しているSun-OSのccで見つからないって言われたからないもんかと思ってたよ。
#そういえばC99フル対応のオプションはつけてないなぁ。その所為かな?
0720712NGNG
>>713-715
どうもでsy
>>714氏の方法でうまくいきました
どうもありが�d
0721デフォルトの名無しさんNGNG
>>720
礼くらいちゃんと言え
0722デフォルトの名無しさんNGNG
中学生に礼儀をきたいすんな
0723デフォルトの名無しさんNGNG
つーか、お礼を哀願する回答者って全然かこよくない
0724デフォルトの名無しさんNGNG
期待はしていない
礼を言えと言っているのだ
0725デフォルトの名無しさんNGNG
孔子を学びなさい。
周公を学びなさい。
あなたがたに不足しています。
0726デフォルトの名無しさんNGNG
>>725
なにそれ。
要点いってくれないかなー
0727デフォルトの名無しさんNGNG
>>726
ただ、学びなさい。
それが貴方に必要なことです。
学べばそういう言動はなくなるでしょう。
0728デフォルトの名無しさんNGNG
>>727
ばっかじゃねーの?
0729デフォルトの名無しさんNGNG
>>728
学びなさい。
0730デフォルトの名無しさんNGNG
>>728
学びなさい。
0731デフォルトの名無しさんNGNG
あなたも学びが足りないようですね。
0732デフォルトの名無しさんNGNG
>>728
学びなさい。
0733デフォルトの名無しさんNGNG
>>731
学びなさい。
0734デフォルトの名無しさんNGNG
>>733
もう終わり?
0735デフォルトの名無しさんNGNG
このスレ自体が、学びからかなり遠いんだが
宿題を他人にやらせる。これ最低
0736デフォルトの名無しさんNGNG
なに釣られてんの?w
0737デフォルトの名無しさんNGNG
>>735
仕方が無いじゃないか
このスレ無かったら、CやC++のスレが宿題であふれちゃうぜ
0738デフォルトの名無しさんNGNG
>>737
ここは宿題スレじゃないが。
何時間寝てないですか。
0739デフォルトの名無しさんNGNG
C 言語というか indent の `{' について質問.

struct {
char n[20]; int i;
} test[] = {
{"A", 1},
};
を indent 使って整形すると, (いろいろオプションは試したのですが)
struct
{
char n[20];
int i;
} test[] =
{
{
"A", 1},};

となります.

関数は
func(void)
{
となって欲しいんですが,
構造体は
struct {
となって欲しいんです.

何かテクがありますか?
0740デフォルトの名無しさんNGNG
>>739
自分で作れば?
0741デフォルトの名無しさんNGNG
>>740
ないのね
0742デフォルトの名無しさんNGNG
Windows環境において fork で子プロセスを生成するしたいのですが、
Cygwinを使わずに実現する方法はありますか?
0743デフォルトの名無しさんNGNG
VM
0744742NGNG
>>743
VMですとなぜかインストールから数日経つとXWindowが
立ち上がらない状態に陥り使い物にならず困っています。

他の方法はありませんか?
0745デフォルトの名無しさんNGNG
>>743
VMって何?
VirtualMachine?
VMWare?
人にわかるように書いてほしいものだ。
0746デフォルトの名無しさんNGNG
Vitamin, Mineral
0747デフォルトの名無しさんNGNG
>>742
SFU
0748デフォルトの名無しさんNGNG
>>746
どうやってソレでforkを実現するのだ?
0749デフォルトの名無しさんNGNG
>>748
forkで喰えば
0750デフォルトの名無しさんNGNG
>>742
Cygwinで使えたっけ?できなかったような?
0751デフォルトの名無しさんNGNG
>>742
>>742
Cygwinではこうやって実装してる

http://www.sixnine.net/cygwin/translation/cygwin-ug-net/highlights.html

親プロセスが子プロセスを fork する際に最初に発生する作業は、
親プロセスが子プロセスのために Cygwin のプロセステーブル内の領域を初期化するすることです。
それから、Win32 の CreateProcess 呼び出しを使用して、サスペンド状態の子プロセスを作成します。
次に、親プロセスは自分自身のコンテキストを保持するために setjmp を呼び出し、
Cygwin の共有メモリ領域 (Cygwin の全てのタスクの間で共有される) にこのコンテキストへのポインタを設定します。
そして、親プロセス自身のアドレス領域からサスペンド状態の子プロセスのアドレス領域へとコピーすることで、
子プロセスの .data セクション及び .bss セクションを埋めます。
子プロセスのアドレス領域が初期化された後、子プロセスが実行され、その間親プロセスはミューテックスを使用して待機します。
子プロセスは自分自身が fork されたことを知ると、保存されたジャンプバッファを使用して longjump します。
子プロセスは親プロセスが待機しているミューテックスをセットし、もう一つのミューテックスをブロックします。
これは親プロセスに対して、子プロセスが親プロセスのスタックとヒープをコピーし終わったことを知らせるシグナルとなり、
その後、親プロセスは子プロセスが待機していたミューテックスをリリースして fork 呼び出しから復帰します。
最後に、子プロセスは最後のミューテックスのブロックから復帰し、共有領域を使用して渡されたメモリマップ済み領域を再生成して、
自分自身の fork から復帰します。

あとはCygwinのソース読め
0752初心者NGNG
白黒画像のビットマップファイルを取り入れて、ある色の濃さ以上のみ表示して、その他は切り捨てると言う様な事をしたいんですけどどういった手順でしたらいいかご教授願います。初心者なんで分かりにくい文ですみません。
0753デフォルトの名無しさんNGNG
すべての点について、周囲の点の数をカウントする
0754デフォルトの名無しさんNGNG
>>752
機種も環境も書いてないのに回答できるわけないだろ。
0755デフォルトの名無しさんNGNG
(1)ファイルを読み込む。
(2)ある色の濃さ以上のみを表示する。


以上

0756デフォルトの名無しさんNGNG
アルゴリズムを聞きたいのか?
白黒って、本当にモノクロームなのか。それともグレイスケールなのか。
それによってかなり違う。
後者なら簡単なので説明略。
前者なら、濃い部分=点の密度の高い部分として
>>753のいうように小さなブロック内の色の平均をとる。モザイクみたいに。
0757test ◆.CzKQna1OU NGNG
test
0758test ◆pAe7pK8jnY NGNG
test
0759デフォルトの名無しさんNGNG
>>754
機種とか環境に依存すると思うなら素直に追い払えばいいのに
0760デフォルトの名無しさんNGNG
来年から入る会社にC言語を使うと言われたのですが
なにを勉強すればよろしいでしょうか?ポインタの基礎程度までの知識はあるつもりです
なにか良い書籍や、作っといたほうがいいプログラムがあれば教えて下さい
0761デフォルトの名無しさんNGNG
>>760
そこまで分かってるなら後は研修で習うんじゃないか?
0762デフォルトの名無しさんNGNG
>>760
その会社で何をやってるかわからないのに、助言できんわ。
0763デフォルトの名無しさんNGNG
C++やってみてもいいんじゃなかろうか。
多分にスレ違いな気がするけど。
0764デフォルトの名無しさんNGNG
>>760
> ポインタの基礎程度までの知識はあるつもりです
まずはポインタを便利に使ったプログラムを紹介してみては?

アイディアが浮かばないならば
そのへんを勉強すればいいと思うし
0765デフォルトの名無しさんNGNG
>>760
とにかく基本をしっかり
・二重ポインタ
・構造体の配列
・分割コンパイル
・アルゴリズム(ソート、圧縮、行列、etc...)

スタイルは入社後でないと無理

実行環境は配属先が決まらないと雲を掴むような話
デバドラあたりがんがん作ってたりする位ならまだしも
ちょっとかじってる程度ならどれやっててもないよりまし位
0766デフォルトの名無しさんNGNG
>>765
加えて、行列とポインタの区別かな
0767デフォルトの名無しさんNGNG
行列とポインタねぇ・・・
0768デフォルトの名無しさんNGNG
行列って何れふか
0769デフォルトの名無しさんNGNG
ベクトルじゃないか?
0770デフォルトの名無しさんNGNG
>>769
それC++のSTLのこと言ってる?
0771デフォルトの名無しさんNGNG
配列でしょ
0772デフォルトの名無しさんNGNG
>>771
空気嫁
0773デフォルトの名無しさんNGNG
>>770
こちらへどうぞ。
http://pc5.2ch.net/test/read.cgi/prog/1094732728/l50
0774デフォルトの名無しさんNGNG
「ポインタの基礎」ってどういう意味なんだろうね。
煽りじゃないよ。
どのくらいを知っていると「基礎」って言えるんだろう。
int *abc; と宣言するとポインタ変数になります。 くらいで基礎?
0775デフォルトの名無しさんNGNG
>>760
俺の特にオススメは

1:プログラミング言語C  、共立出版株式会社、カーニハン&リッチー
2:Cプログラミング専門課程、技術評論社   、藤原博文
3:Cプログラミング診断室 、技術評論社   、藤原博文

の3冊、どれも¥3000でジャリ銭釣りが来る値段。

1はANSI規格本なので俺はC言語で仕事する時は必携と思ってる、
 が翻訳本の常かチョット読みづらい。
2、学生の時ポインタが理解し切れなかったとき、これで
 C言語のメモリを意識するという意味を理解した。
 関数も配列も構造体もポインタも多重だろうが
 全ては所詮メモリと悟りたければオススメ。
 俺はこれでCを飛躍的に開眼した。
3、これはダメなプログラムの見本集の意味合いも強いので、
  自分を戒めるために時々再読するためにオススメ。

他にも色々あるが取り合えずこんだけ
0776デフォルトの名無しさんNGNG
>>774
メモリがイメージできるかどうか
0777デフォルトの名無しさんNGNG
>>760
プロンプト画面で良いから
入力/閲覧が出来る日記プログラム作ったら?
・ファイルの入出力
・画面表示
・ちょっとしたDB設計
・構造体の設計
・配列のポインタ
・構造体のポインタ配列の繋げ変え
・メモリの確保
etc・・・
結構いろいろな事が出来ると思うぞ。

>>774
ポインタの基礎って言うと
実体とアドレスだから
char *cP = Null; の *cP と cP の意味知ってれば良いんでない?
ホントに最低の基礎だが。
0778デフォルトの名無しさんNGNG
>>775
1:規格本としてしか利用しないなら規格本を買えばいいので不要。或いはManOnWWWでいい。
2:これでもいいけどこの辺はひとそれぞれかな。
3:Webで読めるから不要。一度通しで読みたいなら借りれば充分。

>>760
「ダブルポインタなら大丈夫です」と自信ありげに面接のときに言ってた香具師がいたが、
入社してから「トリプルポインタはよく判らないんですよぉ」と言いやがった。
こういうのは、ポインタの基礎ができていない典型。
まぁ、余裕があるなら何かテキストファイルの加工をするようなツールでも作ってみたら?
その辺りのイメージが湧かないなら「プログラミング作法」を読んでみてもいいかと。
#但し、言語がRatforなのでコード丸写しはできないが。
##私自身は、そのお蔭でより勉強になったし知らない言語に対する恐怖が減ったが。
その会社がもし合わないようなら就職フェアで待ってるからw
0779デフォルトの名無しさんNGNG
Cで、列挙子を文字列として取得する方法ってありませんか?
0780デフォルトの名無しさんNGNG
>>778
C言語歴13年の自分ですが「ダブルポインタ」「トリプルポインタ」と
いう言葉は初耳。なにそれ?

0781デフォルトの名無しさんNGNG
>760
ポインタはアドレスを格納するための「変数」で、
配列はアドレスを示す「ラベル」の働きをすることを認識できればいい。

char* pc;
char ac[10];
pc = ac; // ポインタ変数pcに配列acのアドレスを代入する

因みにポインタ変数のバイト数は不定だが、4バイトであることが多い。

作っておいた方がいいプログラムはファイルの16進ダンプかな?
0782デフォルトの名無しさんNGNG
>>778
>>760 にススメたのを評価するは分かるが、
何故「不要」までいいだすの?ナゾ・・・
それに1.に関して「規格本を買えば良い」ってアンタ・・・
この本の意味や知らないだろ?amazonで良いから見て来いよ。
今更「知ってる」言っても嘘バレバレだぞ

0783デフォルトの名無しさんNGNG
>>778
ポインタのポインタのポインタは
単純にポインタのポインタでいいんじゃないの?
どっちもポインタ型なわけだし
0784デフォルトの名無しさんNGNG
ポインタのぽいんたのポインタのポンた。
0785デフォルトの名無しさんNGNG
>>782
俺は 778 ではないが、K&R が「規格本」という >>775 の発言は明白に誤り

C の標準を定義している文書は規格本ではなく規格票といい
C の規格票を取り寄せるときに指定する文書番号は ISO/IEC9899 もしくは JIS X3010

実際に C で開発をするにあたっては規格を確認することはもちろんだが、
処理系に特有のことを調べる必要も出てくる
そういう場合にも参照すべきは K&R ではなく、その処理系のマニュアル

K&R が有用なのはあくまで C を勉強中のテキストとして用いたときで
そんなのがまだ必要なレベルで仕事している人の苦労は察して余りある
0786デフォルトの名無しさんNGNG
持ってないなら手元に置いといたらいいと思うが。
どうにも煽りたいんだろうけど。
0787デフォルトの名無しさんNGNG
ぽいんたはやっぱり
いんたーふぇーすで使うのが良い。
あぽいんとめんとを取っておかないとえらーになり
きなくさいことに暴走する事もある。
あの星をつかみたいなら
いでたちを綺麗に整えば
かすかに手が届きそうかと思う。2列。
0788778NGNG
>>780
実際にそういった香具師がいるんだが、私もそのとき(面接)初めて耳にしたよ。

>>782
K&Rが何かは知ってるよ。>775を皮肉りたかっただけさ。
#尤も、改訂版は買ってないし通読してはいないが。

>>783
私も同意。ポインタを理解できていれば、ポインタのポインタもポインタに変わりがないことくらい判るからね。

>>787
ご愁傷様です。
0789デフォルトの名無しさんNGNG
配列とポインターについてなら、
日下部先生の「作ってわかるCプログラミング」技術評論社
がいちばんわかりやすかったな。

後輩にもそれを読ませてる。
0790デフォルトの名無しさんNGNG
暇そうなら、30秒以内に自分で自殺してファイルごと消えうせるモジュールを書いて味噌汁。
0791デフォルトの名無しさんNGNG
#include<stdio.h>

int main(void){
float f;

for(f= 1.0;f>=0.1;f=f-0.1){
printf(" %f \n",f);
}
}
の実行結果が
1.000000
0.900000
0.800000
0.700000
0.600000
0.500000
0.400000
0.300000
0.200000
となり0.100000が出力されません。なぜそうなるか教えてください
0792デフォルトの名無しさんNGNG
>>791
誤差
0793デフォルトの名無しさんNGNG
>>791
floatの演算は10進演算ではないから誤差が出る。
forループの中でfを使いたいなら、
for (int i = 10; i >= 1; i--) {
f = i / 10.0;
}
としろ。
0794791NGNG
>>792
誤差なのは分かりますが、もう少し詳しく教えてください。

逆にfloat f;
for(f = 0.1;f <= 1.0;f = f+0.1){
printf(" %f \n",f);
}
としたときも 0.100000 〜 0.900000 までしか出力されません。
0795791NGNG
>>793
たしかにそうなんですが、大学の課題でなぜそうなるか考察汁って言われたのでお願いします
0796デフォルトの名無しさんNGNG
>>795
>>1のリンク先は当然チェック済みなんだろうな?
0797デフォルトの名無しさんNGNG
だから誤差
0798デフォルトの名無しさんNGNG
>>794
ttp://pc21.nikkeibp.co.jp/special/gosa/
言語は変わるが主旨は同じだ
たっぷり30分は考えるといい
0799デフォルトの名無しさんNGNG
行列演算を関数化するとどんな感じなの?

ていうか行列からしてよくわかんないんだけど。
0800デフォルトの名無しさんNGNG
>>794
「0.1」は2進数で表せないから。
0801デフォルトの名無しさんNGNG
>>791
0.1 を 2進数 で表してごらん
0802デフォルトの名無しさんNGNG
>>800-801
質問の意味わかってるのかな
0803デフォルトの名無しさんNGNG
丸め誤差だっけ?
0804デフォルトの名無しさんNGNG
>>802
どのみち、それ以外の説明ないが
0805デフォルトの名無しさんNGNG
浮動小数点に対する等値比較があること自体、仕様のバグだろ
ただし、ここで言う等値比較とは == != <= >= ! を指す
0806デフォルトの名無しさんNGNG
この場合は <= じゃなく < にしても同じだろ
0807デフォルトの名無しさんNGNG
普通に出力されたけど折れの環境は何かおかしいのかな
0808デフォルトの名無しさんNGNG
>>807
別におかしくない。浮動小数の内部表現形式が違うだけ。たぶん。
0809デフォルトの名無しさんNGNG
で、 0.1 を内部表現するとどうなるの?
0810デフォルトの名無しさんNGNG
>>791
嘘をつくな
printfの書式制御文字列と出力が一致しない
0811デフォルトの名無しさんNGNG
>>810
特定の環境では'\\'を書き込もうとすると'\'に置き換えられるからしょうがねぇべさ。
0812デフォルトの名無しさんNGNG
>791
3DCCCCCD 00111101 11001100 11001100 11001101 0.100000 ← 0.1
3F800000 00111111 10000000 00000000 00000000 1.000000
3F666666 00111111 01100110 01100110 01100110 0.900000
3F4CCCCC 00111111 01001100 11001100 11001100 0.800000
3F333332 00111111 00110011 00110011 00110010 0.700000
3F199998 00111111 00011001 10011001 10011000 0.600000
3EFFFFFD 00111110 11111111 11111111 11111101 0.500000
3ECCCCCA 00111110 11001100 11001100 11001010 0.400000
3E999997 00111110 10011001 10011001 10010111 0.300000
3E4CCCC8 00111110 01001100 11001100 11001000 0.200000
3DCCCCC3 00111101 11001100 11001100 11000011 0.100000 ← 10回目のf
ってな感じで、10回目のfは0.1より小さいからforループを抜ける。
0813デフォルトの名無しさんNGNG
>>811
嘘をつくな
\\n でそんな出力など出るものか
0814デフォルトの名無しさんNGNG
プログラミング言語Cか、俺も手元に置いてるな
なんか基礎本サヨナラ&紙媒体持たない派が多いみたいだけど
使える言語の基礎確認本は1冊くらい手元に置いておかないの?
それと、金融系の仕事が多く自前PC持ち込めなかったり環境制
限が厳しい俺には紙媒体はまだまだ現役だよ。
0815デフォルトの名無しさんNGNG
>>814
金融系って説得力の補強のつもりで言ってるのか?
物事を確認すべきときの情報源の選択に関して論外な発言をしながらでは逆効果にしかなってないぞ
0816デフォルトの名無しさんNGNG
使える言語/OS/ミドルウェア/ライブラリ/プロトコルの基礎確認本を
全部手元に置いていたらいくらスペースがあっても足りない。
0817デフォルトの名無しさんNGNG
>>815
意味分からん
0818デフォルトの名無しさんNGNG
>>816
繰り返す
物事を確認すべきときの情報源の選択に関して論外な発言をしながらでは逆効果にしかなってないぞ
0819デフォルトの名無しさんNGNG
>>817
一次情報って言ってるんだが、本気で意味わからないのか?
0820デフォルトの名無しさんNGNG
紙の方がはるかに視認性が高いよ
wwwでトロトロ検索閲覧するより、ずっと楽
0821デフォルトの名無しさんNGNG
まぁ、K&R引きながらコーディングしてる奴は信用できないのは確かだ。
0822デフォルトの名無しさんNGNG
>>820
www って誰が言い出したんだ?
相次ぐ金融系のシステムトラブルはもしかして
1人のアフォに業界全体が振り回されている痛い構図か?
0823デフォルトの名無しさんNGNG
また変なのが沸いたねw
0824デフォルトの名無しさんNGNG
wwwとかは>>778が言ってるな
0825デフォルトの名無しさんNGNG
質問です

C言語はクリトリス言語の略ですか?
0826デフォルトの名無しさんNGNG
>>825
スレ違い。
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0827デフォルトの名無しさんNGNG
違うでし。おしっこしーしー言語でし
0828デフォルトの名無しさんNGNG
A
B
C
D


Z 言語までいくとあれか? 死姦とか?
0829デフォルトの名無しさんNGNG
自演乙
0830デフォルトの名無しさんNGNG
>>813
ブラウザの話ね。'\\'と書いたのは勇み足。
'\n'と書こうとして'\n'になったんでしょって話。
0831デフォルトの名無しさんNGNG
テメェら死ねや。wwwwwwwwwww

ww
wwwww
w
wwwwwwwwww
www


wwww


wwwww

0832デフォルトの名無しさんNGNG

…
while(fscanf(fp, "%c", c)==1){
printf("%c", c);
}
…

途中にfscanfがあるのですが、whileを抜けません。ファイルの終わりまで来ても
1を返し続けているようです。ファイルの終わりでwhileを抜けるにはどうしたらよい
ですか?
0833デフォルトの名無しさんNGNG
while(fscanf(fp, "%c", c) != EOF)
じゃダメかい?
0834デフォルトの名無しさんNGNG
その前にfscanf(fp, "%c", &c)の間違いじゃないか?
それに欲を言えば(f)getc/putcharにしろ。
0835デフォルトの名無しさんNGNG
>ブラウザの話ね。

プ
某に毒されてるだけだって
正直に言えよ、ホモ野郎w
0836デフォルトの名無しさんNGNG
なんかしらんが、\nという表記を知った人が偉そうにしてるようです。
半可通ほど居丈高の法則ですな。
0837デフォルトの名無しさんNGNG
ウホな香具師ほどホモと言われると必死こくなw
0838デフォルトの名無しさんNGNG
 ○ 0
 |
1○\
 |   \
2 ○―○3

上図のように、任意の数のノード数がランダムにリンク(1がリンクしている状態)
するネットワークである始点から終点までの経路長を求めたい。
例えば、0が始点だったら1は経路長1、2と3は経路長2。

ランダムなネットワークの図を配列とfor文を用いて
 |0123
―+――――
0|―100
1|1―11
2|01―1
3|011―
という具合に生成することはできたんですけど、
肝心の経路長を求める部分がわかりません。
0839デフォルトの名無しさんNGNG
からしレンコンと言われたオヴァヴァの本音と建て前
0840デフォルトの名無しさんNGNG
>>838
それは、終点ノードまでの最短の経路長ってことでいいのかな?
0841838NGNG
>>840
そうです。
無限ループで値が割り振られていない隣り合うノードに1、2…と値を割り振っていって
最終的に割り振るノードが無くなったら終了すればいけると思うんですけど…

ネットワーク図のコピーをとって、値を割り振ったノードへのリンクを消していく(1を0にする)
既に値が入っている場合は無視する部分のアルゴリズムをプログラムで表現するのが
かなり難しいです…
0842デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1098912550/

マルチ。

0843838NGNG
トリップつけるべきだった…
0844デフォルトの名無しさんNGNG
>>843
全ノードを辿ることが出来てるなら、その時点で経路長は分かってるはずだが
0845838NGNG
そんなことは分かってるんですよ。もうあなたには答えていただかなくて結構です!
ごちゃごちゃやってんと、プログラム自体晒せや。
0846デフォルトの名無しさんNGNG
>>843
つーか、別にマルチでもいいんだよ
あなたがどこで何を聞こうが、それはあなたの主権だし
色んな人に聞いて回るのは聞き込み調査の基本だよ
収穫があってもなくても会釈くらいしろって話に過熱したバカガキが
マルチ=無礼者の判断基準を勝手に制定したがっているだけ
バカガキの必死=自演の大合唱
これのほうが説得力ありすぎるのはみんなわかってる
0847デフォルトの名無しさんNGNG
とりあえずダイクストラ法でいいんじゃない?
0848 NGNG
844=845=846 
0849デフォルトの名無しさんNGNG
842=848
0850 NGNG
848=849
0851デフォルトの名無しさんNGNG
849=304
0852デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
0853デフォルトの名無しさんNGNG
(`_ヽ´) wwwwwwwwww
0854デフォルトの名無しさんNGNG
前に出た問題と同じじゃないか。
既出も既出、大既出だよ。
0855デフォルトの名無しさんNGNG
>>854
一人で過去ログ読んでろオナニー小僧
0856デフォルトの名無しさんNGNG
>>855=838
何この人
0857デフォルトの名無しさんNGNG
既出既出とうるさいキモヲタは臭いデブ
0858デフォルトの名無しさんNGNG
c言語初心者です。
関数内で配列Aを逆順した配列Bを作るにはどうすれば良いですか?
0859838 ◆e.FqsY.OU2 NGNG
ご迷惑をおかけして申し訳ございません…
トリップつけました。

>>844
経路長は辿っていけば分かるんですけど、
最短経路長を出すのに
無限ループ(隣のノードが無くなるまで){
隣のノードに経路長を記録
隣のノード番号を配列に記録
}

>>847
ダイクストラ法も調べたんですけど、
ランダムに生成されるネットワークである点と
向きが無い点、リンクの長さが均一な点が違いまして…
参考にはなったんですけど。
0860デフォルトの名無しさんNGNG
なんだか自分のこと良くわかってない人が粘着しています
0861838 ◆e.FqsY.OU2 NGNG
>>844
経路長は辿っていけば分かるんですけど、
最短経路長を出すのが上手くいかなくて…
無限ループ(隣のノードが無くなるまで){
隣のノードに経路長を記録
隣のノード番号を配列に記録
}
とやればうまくできそうなんですけど…
0862デフォルトの名無しさんNGNG
キモヲタデブというイメージはキモヲタどもが自分はヲタではないと自らを納得させるために作り出した幻影に過ぎず
大部分のヲタは実際にはデブではない。
0863デフォルトの名無しさんNGNG
>>861
始点からノードnまでの最短経路をa[n]とすると、
各ノード(仮にk)について、周辺ノード(仮にm1, m2…mn)との関係は
a[k] = min(a[m1], a[m2]…,a[mn]) + 1

この関係をそのまま再帰関数にすればいいのでは
0864デフォルトの名無しさんNGNG
すいません、ど初心者なんですが、書式制御文字の%fと%lfの違いは何でしょうか?
よろしくお願いします。
0865デフォルトの名無しさんNGNG
floatとdouble
0866デフォルトの名無しさんNGNG
>>861
0、1とかをノードと名付けたとして、ノードを結ぶ線に番号つけて、
その番号の順列組み合わせをしていったらどうかね。
その順列組み合わせのうち

・始点または終点がノードを共有してないもの
・これまでに出てきたもの

を最初に省いちゃう。線の数が距離ね。
順次計算していって、えーと終了条件が問題っすね。
線の数に等しくなったら終了なのは明らかだけど、
それ以前に終わる条件があるようなきもする。
0867デフォルトの名無しさんNGNG
AからBへの距離を求めるには。
Aに隣接する点をマークする(距離1)。
距離1に隣接し、かつまだマークされていない点をマークする(距離2)。
以下Bに到達するまで。
Aからだけ行うよりも、
AとB両方から歩み寄るほうが速い事が期待できる。
0868デフォルトの名無しさんNGNG
文字配列(例:char a[20])の中身を全て空にする関数とかないでしょうか?
0869デフォルトの名無しさんNGNG
>>868
memsetを使う
完全に文字列としてしか使わないならa[0]='\0';でも見かけ上は同じだが
0870デフォルトの名無しさんNGNG
「空」とはどういう状態のことを言うのか定義せよ。
とりあえず、文字配列てことだから、

void strclear(char *s)
{
*s = '\0';
}

でどうだ。
0871デフォルトの名無しさんNGNG
お二人ともレスありがとうございます。

空にする時に文字配列の一つ一つに'\0'を入れていたのですが、'\0'が反映されてないのか配列に数字が残ってる事があったもので…
とりあえずmemsetを使ってみたところきちんとできました。念のため確認したいのですが、char型のa[20]を初期化する場合、
 memset( a , 0 , 99 * sizeof(char) );
で大丈夫でしょうか?
0872871NGNG
99→20だった…度々すみませんorz
0873デフォルトの名無しさんNGNG
'\0'が反映されてないのか配列に数字が残って
'\0'が反映されてないのか配列に数字が残って
'\0'が反映されてないのか配列に数字が残って
'\0'が反映されてないのか配列に数字が残って
'\0'が反映されてないのか配列に数字が残って
0874デフォルトの名無しさんNGNG
>>871
99→20で一応正解。ただ、規格によりsizeof(char)はつねに1なので、省略してもOK

#これは場合にもよる。趣味とかコーディングルールとか。

aが確実に配列なのであれば、

memset(a, 0, sizeof(a));

のほうがいいかも。
0875デフォルトの名無しさんNGNG
>>874
いつも思うんだけど、
sizeof( T[N] )==sizeof( T )*N って、保証されてるんだっけ?
これが強制されると配列内にコントロールデータを埋め込むことが出来なくなるよね。
(実際に埋め込んでるコンパイラは見たこと無いけど)
かといってこれが保証されてないと
N = sizeof( array )/sizeof( array[0] ) が軒並み破綻するわけだけど。
0876デフォルトの名無しさんNGNG
コントロールデータって何?
0877デフォルトの名無しさんNGNG
なんかデバッグ情報とかさ。
0878デフォルトの名無しさんNGNG
>>877
うーん、コントロールデータがわからん。もうちょっと詳しく。
ただ、少なくとも
sometype A[N];
という、sometype型の配列があったときは
sizeof(A) == sizeof(sometype) * N
が真になることは保証されてる。
0879デフォルトの名無しさんNGNG
誰が保証してくれたの?
0880デフォルトの名無しさんNGNG
ANSIじゃない?
0881デフォルトの名無しさんNGNG
確かANSIのsizeofのExampleの所にも
配列の要素数を求めるのに使える てな例が載ってたな
0882デフォルトの名無しさんNGNG
ただし関数に配列を渡すとポインタと同じ扱いになるので要注意
と釘を刺してみる
0883デフォルトの名無しさんNGNG
前回のリターン入力から今回のリターン入力までの
経過時間を測定する関数を作りたい
scanfを利用して、文字か整数かの入力待ちでなら作れそうなんですけど
どうやってリターンの入力待ちを行うのでしょうか
0884デフォルトの名無しさんNGNG
getchar();
0885デフォルトの名無しさんNGNG
('A`)ハハーナルホド ソクレスアリガトウ
0886デフォルトの名無しさんNGNG
ここって来てる人自体は少ないな、結構浮上してるから見に来たのだが、
ID無いのも相まって少数の人が必死に書いてる感じ。
特に高圧的な文体数人が目立つ、朝から晩まで筆まめだな仕事しろよ(w
まぁこの業界の教えたがりは大抵居丈高だが
0887デフォルトの名無しさんNGNG
>>875
コントロールデータ埋め込んで例えば何がしたいの?
実行時 sizeof ならコントロールデータをカウントしない値を返せばいいし
配列と称して実はリストとか言い出すと、連続領域ではなくなるわけで
サイズはと訊かれても答えようがなかったりするよな
ちなみに sizeof array / sizeof array[0] は規格票の文中でも使ってるぞ
0888デフォルトの名無しさんNGNG
どこだって教えたがりは大抵居丈高だよ・・・・自尊心のかたまりだから
0889デフォルトの名無しさんNGNG
>>886
どこかで苛められたのかい?可哀相に。ヨシヨシ
0890デフォルトの名無しさんNGNG
リアルで無能だと教えるのもうっとうしくなるからなあ
0891デフォルトの名無しさんNGNG
俺の経験上、居丈高に教えてるのは初心者に2,3本毛が生えたやつらだよ。
多少分かるようになった初心者は、お前こんなのも分からないのかよと馬鹿にしつつ自分の知識をひけらかしたくなる。
もう少しすると興味が無くなるのでROMるかスレ自体からいったん離れる。
さらにもう少しすると煽りに徹するようになる。答えは書かない。ピンポイントでヒントだけ教えてやる。
安易に答えを教えてしまうと質問者のためにならないから。
さらにもう少しすると再びROMる。
すっかり古参と化した彼らはスレと住人たちのの成長を生温かく見守るようになる。
0892デフォルトの名無しさんNGNG
神の如く、か。
0893デフォルトの名無しさんNGNG
>>891
なにげにワロタ
0894デフォルトの名無しさんNGNG
>>887
>sizeof array / sizeof array[0]
俺はいつも numberof って名前でマクロ書いてる。
つか、どうせなら標準マクロにしてくれればよかったのに。
// offsetof は標準化されてるのになあ…
0895デフォルトの名無しさんNGNG
>>さらにもう少しすると煽りに徹するようになる。答えは書かない。ピンポイントでヒントだけ教えてやる。
俺ここ
0896デフォルトの名無しさんNGNG
886は馬鹿。
895は大馬鹿。
0897デフォルトの名無しさんNGNG
>>894
激しく同意
0898デフォルトの名無しさんNGNG
>>896
激しく同位
0899デフォルトの名無しさんNGNG
激しく同電位
0900タヌキNGNG
C言語には関係ないのですが教えてください
いくら叩かれたって煽られてもいいです知りたいのです!

CGIについてなのですが
http://homepage1.nifty.com/kodayan/cgi/con2/pass1source.htm
このページを参照してくれませんでしょうか
このCGIの設置方法を教えてください
AAA!CAFEというところでCGIを使いたいのですが
0901デフォルトの名無しさんNGNG
>>900
そんなに寂しいのか?
0902デフォルトの名無しさんNGNG
激しく同位体
0903デフォルトの名無しさんNGNG
そういえばAAA!CAFEの管理人okkakii元気かな?
0904デフォルトの名無しさんNGNG
激しくどうでもいい
0905デフォルトの名無しさんNGNG
fread で、EOF の場合でも読み込めたバイト数知りたいのですが、
なにか手はあるのでしょか。
それとも fread が無理だとして、簡易な別の手段とか。
0906デフォルトの名無しさんNGNG
?
0907デフォルトの名無しさんNGNG
>>905
freadは読み込めた個数を返すよ。EOFは返さない。
0908デフォルトの名無しさんNGNG
>707の気持ちは分かるけど、書き込んだのは間違い。
>708は存在する意味が分からない。
0909デフォルトの名無しさんNGNG
>904
スルーできない理由は何?
0910デフォルトの名無しさんNGNG
奇特な方がいたら教えてください。
C言語で作成したプログラムをVC++でコンパイルして実行ファイルだけ抜き出す。
実行ファイル(exeファイル)だけから作製したプログラムを逆算することはできるのでしょうか?
できないと思うのですが、それで正しいのでしょうか?
0911デフォルトの名無しさんNGNG
奇特な方がいたら教えてください。
C言語で作成したプログラムをVC++でコンパイルして実行ファイルだけ抜き出す。
実行ファイル(exeファイル)だけから作製したプログラムを逆算することはできるのでしょうか?
できないと思うのですが、それで正しいのでしょうか?

0912デフォルトの名無しさんNGNG
危篤ですので答えてあげる余裕がありません
0913デフォルトの名無しさんNGNG
奇特な方がいたら教えてください。
C言語で作成したプログラムをVC++でコンパイルして実行ファイルだけ抜き出す。
実行ファイル(exeファイル)だけから作製したプログラムを逆算することはできるのでしょうか?
できないと思うのですが、それで正しいのでしょうか?

0914デフォルトの名無しさんNGNG
>>911
できない。
Releaseビルドされたものは
dumpbin /disasm kusosure.exe
で逆アセンブルまではできるが逆コンパイルは
シンボルファイルがないと無理
0915デフォルトの名無しさんNGNG
>>914
Oh!産休!
やはりできないのですね。
じゃ、例えばWindowsとかのプログラムがCD-ROMから読み取ることができるなんてもなしですね。
0916デフォルトの名無しさんNGNG
いや、だからプログラムそのものは読み取れるけれども、それから
ソースファイルを再現することはほぼ不可能と言っているのだよ。
0917デフォルトの名無しさんNGNG
.NETやJAVAみたく中間言語挟んでるやつは可能だけどな
0918デフォルトの名無しさんNGNG
下のはテキストファイルの中身を行単位でランダムに並べ替えるプログラムなんですがエラーがでます。指摘・アドバイスお願いします.

void shuffle(){
char mozi[50][50],mozi2[50]; //ファイルの中身は50文字*50行と仮定
int kazu,kazu2,loop;
FILE *fp;

fp = fopen("test.txt" , "r"); //ファイルを開く
//ファイルから読み込む
for(loop=0;loop<50;loop++){
fgets( mozi[loop] , 50 , fp);
}
//ファイルを閉じる
fclose(fp);

fp = fopen("test.txt", "w"); //ファイルを開く
//ランダムに並べ替える
for(loop=0;loop<20;loop++){
kazu = GetRand(50); //GetRand(50)で0〜50の間で乱数を取得
kazu2 = GetRand(50);
strcpy(mozi2 , mozi[kazu]);
strcpy(mozi[kazu] , mozi[kazu2]);
strcpy(mozi[kazu2] , mozi2);
}
//ファイルへ書き込み
for(loop=0;loop<50;loop++){
fputs(mozi[loop] , fp);
}
//ファイルを閉じる
fclose(fp);

}
0919デフォルトの名無しさんNGNG
>>918
どこでどんなエラーが出るか書け!クソめ!
0920デフォルトの名無しさんNGNG
> char mozi[50][50],mozi2[50]; //ファイルの中身は50文字*50行と仮定

>kazu = GetRand(50); //GetRand(50)で0〜50の間で乱数を取得
>kazu2 = GetRand(50);

ここぢゃね?
0921デフォルトの名無しさんNGNG
すいません。35行目でエラーがでます。
0922デフォルトの名無しさんNGNG
35行目ってどこよ?
質問の仕方すら分かんねーのか?
0923918NGNG
エラーメッセージは、
「test.exe の 0xcccccccc で初回の例外が発生しました : 0xC0000005: 場所 0xcccccccc を読み込み中にアクセス違反が発生しました」
「test.exe の 0xcccccccc でハンドルされていない例外が発生しました : 0xC0000005: 場所 0xcccccccc を読み込み中にアクセス違反が発生しました。」
の二つが出ていて具体的な場所は表示されてませんでした。
0924デフォルトの名無しさんNGNG
GetRandが50を返してるんじゃね?
0925デフォルトの名無しさんNGNG
空行入れても30行しかないわけだが

>>920のとこじゃね?
0926918NGNG
GetRandはライブラリの関数なんでそっちの方も覗いてみます
。レスくださった方々ありがとうございます。
0927デフォルトの名無しさんNGNG
>なんでそっちの方も覗いてみます

...いや、そっちぢゃねーだろ

>GetRandが50を返してるんじゃね?
って読めてる?
0928デフォルトの名無しさんNGNG
age
0929デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
int i;
for(i=0;i<10000;i++){
printf(゙ヌルポ\n゙);
}
}
0930デフォルトの名無しさんNGNG
Cって文字列をreturnできないの?
0931デフォルトの名無しさんNGNG
>>930
できるよ
const char *fusianasan(void)
{
return "mojiretu";
}

問題はやった奴が何が起きるのかを理解しているかであって
言語の不備じゃない
0932java to cNGNG
>>931
ありがとう。
参照を返せるってことですね
0933デフォルトの名無しさんNGNG
C++ならオブジェクトを使って
std::string fusianasan()
{
  std::string str;
  str = "mojiretu";
  return str;
}
0934デフォルトの名無しさんNGNG
>>933
スレ違い

struct string
{
char mojiretu[256];
};

struct string fusianasan(void)
{
struct string kusosure = { "sine" };
return kusosure;
}
0935デフォルトの名無しさんNGNG
スタティックリンクライブラリって単なるobj?
0936デフォルトの名無しさんNGNG
>>935
別物。拡張子は *.lib とか。複数の *.obj をいい感じに連結してある。
と言っても、リンカに渡すときは殊更 *.obj と *.lib を区別する必要もない。
0937デフォルトの名無しさんNGNG
なるほどです
0938デフォルトの名無しさんNGNG

0939デフォルトの名無しさんNGNG
>char mojiretu[256];

256文字迄なのかよ!
0940デフォルトの名無しさんNGNG
>939
そもそも、fusianasann()はちゃんと動作するのか?
0941デフォルトの名無しさんNGNG
ローカル変数を(ry

Cで文字列を返したいときに
初心者が陥りやすい例を示しているのかと思ってスルーしてたんだが。
0942デフォルトの名無しさんNGNG
>>941
ry しないで続きをどうぞ
何が起こると言い出すか見物の悪寒
0943デフォルトの名無しさんNGNG
>>942
「ローカル変数だ」と言えばこれ以上のくだくだしい説明はいらんと思うが。
こんな当然のことで高みの見物を決め込んでるとすれば、
それがおまえの技量ということだな。 プッ
では わかっていないリアル厨房のおまえのために書いてやろう。
           ~~~~~~~~~~~~~~~~~~
ローカル変数のアドレスを返しているが、関数から出てしまえばその領域は破棄される。
したがって親ルーチンがそれを受け取っても、この領域へのアクセスは違法となる。
ただし、偶然にも文字列が残ったままになっている可能性もあるので、
結果だけを見れば正常に動作することもある。が、違法行為だ。

わかったか、坊や。
0944デフォルトの名無しさんNGNG
>>931だけは間違いじゃないよ
0945デフォルトの名無しさんNGNG
>>943
942とは違う人だが、どれの事を言ってるんだ?
0946デフォルトの名無しさんNGNG
自演なのか?
0947デフォルトの名無しさんNGNG
>>941
>「ローカル変数だ」と言えばこれ以上のくだくだしい説明はいらんと思うが。

「違う。>>931 は文字列定数だし、>>934 は構造体返しだ」と言えば
これ以上のくだくだしい説明はいらなくなるな。
0948デフォルトの名無しさんNGNG
>>943
アドレスを返しているとはどれのことだい?
931 が返しているアドレスがローカル変数のアドレスだと言いたいの?
それとも 934 がアドレス返しだと言いたいの?

# 予想どおり、これは見物だw
0949デフォルトの名無しさんNGNG
理解出来てないのは>>931だけ。
文字列リテラルは静的記憶域期間だから>>931は大丈夫
他はダメ
0950デフォルトの名無しさんNGNG
自演かもしれんがどっちにしろ終了。
これ以上続けても荒れるだけ。
0951デフォルトの名無しさんNGNG
>>950
おいおい 943、これからが面白いところじゃないかw
0952デフォルトの名無しさんNGNG
>>932
文字列を返すには「誰か」が文字列用のバッファを確保しておかなければならない。
お勧めは1.
2.はお手軽だけどprintf("%s %s", foo(), foo())とやるとおかしなことになる(バッファがひとつしかないから)。
3.はあまり使われない方法でp = foo(); free(p); と見た目的にmalloc/freeが対になってないのでなんとなく不安。

1. 呼び出し側が確保
char *foo(char *buf, size_t buf_size){ return buf; }

2. static, global変数で確保
char *foo(){ static char buf[256]; return buf; }

char buf[256];
char *foo(){ return buf; }

3. 動的に確保
char *foo(){ char *p = malloc(256); return p; }
0953デフォルトの名無しさんNGNG
C上級者の>>943はもう遁走したのか?
0954デフォルトの名無しさんNGNG
手が震えて、キーボードが打てないんだろ
0955946=950NGNG
人違いだし…
構造体の値全部返しなんかでもめなくても、無知には笑って無視すりゃいいのに…
0956デフォルトの名無しさんNGNG
>>936
おいおい、世間が狭いってのは時として罪だな。
0957デフォルトの名無しさんNGNG
2chから祭りを取ったら何も残らないじゃないか
0958デフォルトの名無しさんNGNG
>>955
で、943 さんよ 934 は何のアドレスを返しているんだい?
0959デフォルトの名無しさんNGNG
>>952
strdup()は不安ですか?
0960デフォルトの名無しさんNGNG
>>943は>>891の
初心者に毛が生え始めたばかりのころ。
0961デフォルトの名無しさんNGNG
>>959
そんなものCには無いから
0962デフォルトの名無しさんNGNG
>>961
あるじゃんw
きみの脳内ではISO/IEC9899で定義しない関数は「存在しない」ことになってるのか?
0963デフォルトの名無しさんNGNG
>>943が話題そらしに必死ですw
0964デフォルトの名無しさんNGNG
>>962
つ>>1
標準以外の話題は別スレにどうぞ。
0965デフォルトの名無しさんNGNG
なるほど struct string fusianasan(void) も存在しないことにしたいのかw
0966デフォルトの名無しさんNGNG
□規制解除要望□dion.ne.jp専用その28
http://qb5.2ch.net/test/read.cgi/sec2chd/1094197597/404

943・・・(・∀・)ニヤニヤ
0967デフォルトの名無しさんNGNG
> Cで文字列を返したいときに
> 初心者が陥りやすい例を示しているのかと思ってスルーしてたんだが。

たしかに初心者が陥りやすい罠のようだなw
0968デフォルトの名無しさんNGNG
>>966
面白すぎるぜこのやろう
0969デフォルトの名無しさんNGNG
それでは皆さん、こちらへ移住を開始してください。
C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0970デフォルトの名無しさんNGNG
やなこった
0971デフォルトの名無しさんNGNG
ネタだったということにしたいのですね(・∀・)ニヤニヤ
0972あーあwNGNG
では わかっていないリアル厨房のおまえのために書いてやろう。
           ~~~~~~~~~~~~~~~~~~
0973デフォルトの名無しさんNGNG
アセンブラソース出せば済むことだろ?
0974デフォルトの名無しさんNGNG
>>973
いーや済まない

>結果だけを見れば正常に動作することもある。が、違法行為だ。

に対して、くだくだしい説明が必要だ
0975デフォルトの名無しさんNGNG
違法じゃないじゃん
0976デフォルトの名無しさんNGNG
975 踏んじまった orz
0977デフォルトの名無しさんNGNG
タイーホ
0978デフォルトの名無しさんNGNG
とりあえずどの法律で違法と定められているのか示せ。
話はそれからだ。
0979デフォルトの名無しさんNGNG
まだまだいくよぉーーーーつ!
0980デフォルトの名無しさんNGNG
そういう高度な議論は専用スレ立ててやったら?>ALL
質問スレでやる話題じゃないよ。
0981デフォルトの名無しさんNGNG
何でC言語は相談室のスタイルをとっていないのかな。
0982デフォルトの名無しさんNGNG
違法→違反だろ_Π○
0983悲しい。NGNG
ピザーラ届け!!
そいや!!
http://nakagawamasaharu.hp.infoseek.co.jp/
0984デフォルトの名無しさんNGNG
しまった、祭に乗り遅れた
0985デフォルトの名無しさんNGNG
C 言語のコンパイラを作りたいのですが、
どれぐらい時間がかかるものでしょうか。
最適化なしで 3 人月ぐらいですか?
0986デフォルトの名無しさんNGNG
>>985
http://pc5.2ch.net/test/read.cgi/tech/1100097050/
0987デフォルトの名無しさんNGNG
>>986 すいません、そちらで聞いてみます。mm(_ _)mm
0988デフォルトの名無しさんNGNG
gccのコンパイラってタダで手に入るんでしょうか??
0989デフォルトの名無しさんNGNG
電話代やプロバイダ料金、CD料金その他を考えなくてよいのなら。
0990デフォルトの名無しさんNGNG
>>989
どうやったら簡単にダウンロードできますか?
というか、Windowsで使えるんでしょうか??
0991デフォルトの名無しさんNGNG
ここから http://cygwin.com/
これ http://cygwin.com/setup.exe
を実行して、オプションに gcc を選択するだけ。
0992デフォルトの名無しさんNGNG
>>990
Cygwin っていうのを勉強してみるといい。
Windows の gcc は Cygwin 上で使うのが一番いいんじゃないかな。
0993デフォルトの名無しさんNGNG
まともに相手してると泥沼だぞ
0994デフォルトの名無しさんNGNG
>>993
どういうこと?普通の質問だと思うんだけど。
0995デフォルトの名無しさんNGNG
誰か新スレよろしく。俺は最近立てたから無理。
あ、名前欄にはv(^o^i)dを入れてね。
0996デフォルトの名無しさんNGNG
日本語版無いんですか?
0997デフォルトの名無しさんNGNG
ブロードバンドで997get
0998デフォルトの名無しさんNGNG
しばらくスレ立てないで、俺俺スレ使おうぜ
0999デフォルトの名無しさんNGNG
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1065535118/
1000デフォルトの名無しさんNGNG
初めての1000だ〜!!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。