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

C言語なら、俺に聞け! lt;50gt;

レス数が1000を超えています。これ以上書き込みはできません。
0001鼻から悪魔でますたNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。

コンパイラを探しているなら >>2 を見よ。

上記を逸した場合の結果は激しく未定義とする。

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
00021NGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

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

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

C言語なら私に聞いてYO! 49
http://pc2.2ch.net/test/read.cgi/tech/1042646178/

祝49回 C言語ならあっしに聞け
http://pc2.2ch.net/test/read.cgi/tech/1042640474/
00041NGNG
【過去ログ】
48 http://pc3.2ch.net/tech/kako/1041/10411/1041127646.html
47 http://pc3.2ch.net/tech/kako/1040/10400/1040048202.html
46 http://pc3.2ch.net/tech/kako/1039/10393/1039328710.html
45 http://pc3.2ch.net/tech/kako/1038/10384/1038405432.html
44 http://pc3.2ch.net/tech/kako/1037/10377/1037796472.html
43 http://pc3.2ch.net/tech/kako/1037/10372/1037281411.html
43 http://pc3.2ch.net/tech/kako/1037/10371/1037134356.html
42 http://pc3.2ch.net/tech/kako/1037/10371/1037101156.html
41 http://pc3.2ch.net/tech/kako/1036/10368/1036876790.html
40 http://pc3.2ch.net/tech/kako/1036/10366/1036673739.html
39 http://pc3.2ch.net/tech/kako/1036/10364/1036409391.html
38 http://pc3.2ch.net/tech/kako/1035/10357/1035729526.html
37 http://pc3.2ch.net/tech/kako/1035/10356/1035623265.html
36 http://pc3.2ch.net/tech/kako/1035/10352/1035211039.html
35 http://pc3.2ch.net/tech/kako/1034/10343/1034337064.html
34 http://pc3.2ch.net/tech/kako/1033/10332/1033240509.html
33 http://pc3.2ch.net/tech/kako/1032/10326/1032606064.html
32 http://pc3.2ch.net/tech/kako/1031/10319/1031905402.html
31 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
30 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
29 http://pc3.2ch.net/tech/kako/1029/10296/1029605182.html
28 http://pc3.2ch.net/tech/kako/1028/10284/1028495798.html
27 http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
00051NGNG
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
00061NGNG
あら、
いつの間に、タイトルに< >使えなくなってたの
鬱
0007デフォルトの名無しさんNGNG
    ┏━━━ / |━━━━━┓
    ┗┳┳━ |_| ━━━┳┳┛
      ┃┃ /  ヽ     ┃┃
    ┏┻┻ |======| ━━┻┻┓
    ┗┳┳ ヽ__ _ ノ ━━┳┳┛
      ┃┃ (/)     ┃┃
      ┃┃ (/)     ┃┃
    凸┃┃ (/)     ┃┃凸
    Ш┃┃ (/)     ┃┃Ш
    .|| ┃┃ (/)     ┃┃.||
  ∧_∧   (/) ∧_∧  ∧ ∧
  ( ・∀・)  (/)(´∀` )  (゚Д゚ ) Part50スレが他に立ちませんように
  (つ  つミ (/)(⊃⊂ ) ⊂  ⊃
  |_|_|_�I(/)_|_|_|__|  |
  /////ノ,,,,,,ヽ ////||  |〜
////////////  |∪∪
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
|        奉  納        |
0008デフォルトの名無しさんNGNG
おとといK&Rを買いますた
引き続きがむばります
0009デフォルトの名無しさんNGNG
>>1-5
乙カレー。

>>7
だよねー。
0010デフォルトの名無しさんNGNG
>>8
ちゃんと正誤表は確かめたか?
0011デフォルトの名無しさんNGNG
>>10
今日確かめます
0012デフォルトの名無しさんNGNG
ネット上にある正誤表をね
0013デフォルトの名無しさんNGNG
ようやくまともなスレ立てになったか…
>>1乙
0014デフォルトの名無しさんNGNG
皆さんはソースプログラム中にデバッグ用の文を組み込んだりしてますか?
また、どんな方法を利用しているのでしょうか?
0015デフォルトの名無しさんNGNG
/* コノアタリガアヤシイ ダレカデバッグシロ */
0016デフォルトの名無しさんNGNG
極上のウイルスくれ!
0017デフォルトの名無しさんNGNG
誰だよ、スレタイに < > 使った香具師は・・・
0018デフォルトの名無しさんNGNG
誰って、そりゃ>>1だろう
0019デフォルトの名無しさんNGNG
先月デザインパターン改訂版を買いますた
引き続きがむばります
0020デフォルトの名無しさんNGNG
むしろ>>1以外に<>をスレタイに使うことが出来る奴がいたら、それは神です。
0021デフォルトの名無しさんNGNG
ひろゆきとか。
0022デフォルトの名無しさんNGNG
で、>>1 は誰?
0023デフォルトの名無しさんNGNG
こないだ駅の階段で派手に転んだ人
0024デフォルトの名無しさんNGNG
生き別れの兄です。
0025デフォルトの名無しさんNGNG
今まで小さい練習用のプログラムを書いてたんですが、ちょっと大き目のものを
書くようになって気付いたことが。

一つのモジュール内で、やたらと深い&多数のループを回すプログラムを作るとき、
皆さんはループ用の変数をどう確保してるのか、ということです。
今のところint i, j, k, m, l ........てな感じでやってるんですが、なんか無駄が多いような・・・・・
それともこれが最善のやり方なんでしょうか。
0026デフォルトの名無しさんNGNG
for (int i = 0;
 for (int j = 0;
  for (int m = 0;
   for (int l = 0;
0027デフォルトの名無しさんNGNG
>>25
どの辺が無駄なのか説明してくれないか?
0028デフォルトの名無しさんNGNG
こないだ書いたプログラムでほとんどの関数に int i,j,k が必要だったんで
グローバル変数で、i j k定義したよ。

//良い子は絶対真似しないこと。
0029デフォルトの名無しさんNGNG
>やたらと深い&多数のループを回すプログラムを作るとき

できの悪いの自慢してどうする
0030デフォルトの名無しさんNGNG
>>25
ちゃんと変数名考えて定義しろよ。
それぞれのループごとに意味あるんだろ?
0031デフォルトの名無しさんNGNG
struct { int i:8; int j:8; int k:8; int l:8; } x;
for (x.i=0; …
 for (x.j=0; …
  for (x.k=0; …
   for (x.l=0; …
0032デフォルトの名無しさんNGNG
なぜビットフィールドなんか使う・・・
0033デフォルトの名無しさんNGNG
31は貧乏
0034デフォルトの名無しさんNGNG
私の書くプログラムで、(特に)意味のないループ制御変数はicにしている。
iだとインクリメンタルサーチが面倒だと言うのが一番の理由。
で、二重ループは大抵意味があるのでその意味を反映させる。
例えば、ix, iy など。
一つの関数で三重以上のループになることは余りないかな?
その場合も二重ループと同様。
ちなみに、>>31のような書き方をすると処理速度はがた落ちになる罠。
0035デフォルトの名無しさんNGNG
>>28
何のメリットがあるんだ ?
0036デフォルトの名無しさんNGNG
>>35
スタックポインタ相対アドレッシングのないCPUでは、自動変数より
グローバル変数の方が処理速度もメモリ効率も上がるだろうね。
0037デフォルトの名無しさんNGNG
>>36
そこまで考えてないと思われ。単なる手抜きかと。
多くのプロセッサでは、自動変数でループカウンタとして使うなら
レジスタに割り当てられる事が多いし。
グローバル変数は、コンパイラの最適化を阻害するケースが多い。
0038デフォルトの名無しさんNGNG
名スレの予感

        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.  終  了 │
     〜′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛
003938NGNG
誤爆
0040デフォルトの名無しさんNGNG
C++のDLLからクラスを動的にインポートすることは出来ないのでしょうか?
Loadlibraryでロードしても関数を呼び出す方法しか見当たらないのですが
ヘッダもライブラリも無いので何とか動的にリンクしたいのですが
004140NGNG
えーっとそれから
環境はVC++でwin32です
0042デフォルトの名無しさんNGNG
>>40-41
果てしなくスレ違い
004340NGNG
失礼しました
0044デフォルトの名無しさんNGNG
>>26
それは C++ だ!

>>28
int i;

void foo(int *array, int size) {
 for(i = 0; i < size; ++i) {
  printf("(%d\n", i);
  bar(array[i], size);
  printf("%d)\n", array[i]);
 }
}
void bar(int elem, int size) {
 for(i = size; i >= 2; --i) {
  printf(" %d: %d\n", i, elem * i);
 }
}

で、どうするよ。

>>29
行列とか扱ってるとどうしても深くなってしまうこともある。
>>25
でも、そういうのでなければ関数に分けたりして
ループを浅くするのがよい。
0045デフォルトの名無しさんNGNG
>>44
>>>26
>それは C++ だ!
C99だとできたりする。
0046デフォルトの名無しさんNGNG
C99うぜーーーーーーーーー!!!!!!!!!!

配列の大きさの指定には変数は使え
ないとかsnprintfは標準関数じゃないとかいうと厨房扱いされるんだぜ。
まじうぜーーー!!


こんな時代遅れな言語は新たに規格を策定しなくてもよかったと思うんだけど。
0047デフォルトの名無しさんNGNG
変なところで改行しちまった
0048デフォルトの名無しさんNGNG
>>44==46?
C99が必要無いと思うのは勝手だけど
自分のミスを規格のせいにしてはアカンよ
004946NGNG
>>48
違いますが。
0050デフォルトの名無しさんNGNG
>>48
「〜は使えない」→「C99ならデキルヨ!アナタシラナイノ?ぎゃは」
とかいう会話がまじうぜーーーのではないでしょうか?
005144NGNG
>>46
いやまあ、現状C99を実装してる処理系ってほとんどないだろうし、
移植性を考えたらC99の機能はまだ使うべきではないだろう。
いまだに
void afo(mona)
 int mona;
{
 /* */
}
式の関数を定義する場合もあるわけで。

ただ、Cの機能じゃないと言い切っちゃうのは、さすがに嘘だと思ったんでな(w
005248NGNG
>>50-51
いや、俺もC99の環境は持ってないし
多分、実装された環境を手に入れる事は暫く無いだろうなと思うし
たま〜に、ウザイと思う事はあるよ
でも、Cの規格にC99があるんだから、しょうがないじゃん
教える時や、間違えを指摘する時に
釣りでも無いのに、C99の規格の事を忘れてはアカンと思うのよ
まぁ、別に争う気は無いので、ここら辺で
0053デフォルトの名無しさんNGNG
でも、いかに C89 とかが obsolete だとしても、それと C99 とはあくまで
区別するのが今の風潮じゃないか?
0054デフォルトの名無しさんNGNG
カーニハンとリッチーはC99対応のプログラミング言語C第3版を出すつもりはないの?
0055本当の44NGNG
>>51
あなた、>>45 じゃないですか?

えーと、C99 でできるのは知ってましたが、
>>53 のようなスタンスで書いちゃいました。

C99 なんていらんわ! とかいうつもりはないです。
というか、むしろ普及してくれた方が嬉しいです。
でも、実際の現在の普及率を考えると、
「あー、そういうことできるんだ」と思って試した人が
「できねーじゃんかYO!」となるのは必至なので
別物扱いしておいた方が妥当なんでは、と。
0056デフォルトの名無しさんNGNG
質問スレではあげ足取りの定番になってる感もあるしなー
0057デフォルトの名無しさんNGNG
>>55-56
本当はC99スレを立てるのが良いと思うけど
ただでさえC関連スレは乱立してるから
反発の方が多そうなので現状維持で仕方ないかと…
0058デフォルトの名無しさんNGNG
>>57
もー立ってたりして。寂れてるけど。
http://pc2.2ch.net/test/read.cgi/tech/1044351696/l50
0059デフォルトの名無しさんNGNG
「『ビル・ゲイツ』と『ビル・ジョイ』ってどっちが強いの?」
0060デフォルトの名無しさんNGNG
struct a{
char A1;
char A2[3];
int A3;
}A;

struct b{
char B1;
char B2[3];
int B3;
}B;
上記のように複数個の構造体があったとして
同じファイルにバイナリでライトしたいのですが
いかようにすればよろしいのでしょうか?
引数の記述方法がよくわからずコマっております。
御教授お願い致します。
0061デフォルトの名無しさんNGNG
メモリの内容なら"wb"付きfopenでオープンした
ストリームにfwriteで書き込める。
0062デフォルトの名無しさんNGNG
C99が型チェックに厳しいなら使ってみたい気もする
006360NGNG
>>61サソ
アリガ�d
質問のしかたが悪かったでし、、、
構造体を丸ごとドカンと
書きこみたいのっす。
スイマソン
再度の御教授を〜
0064デフォルトの名無しさんNGNG
windowsXPでCやるのはどうやったらいいんでしょう?
コンパイラは、gccっていうのをどうやって入手するか分かりません。
borlandのなんとか55っていうのはできたけど、.exeになったけど、
ひらくと、有効なwin32アプリケーションではないって言われて実行できません。
0065デフォルトの名無しさんNGNG
struct {
 char c;
 int i;
} a;

int main()
{
 fwrite(&a, sizeof(a), stdout);
 return 0;
}
0066デフォルトの名無しさんNGNG
C99って使っている人多いですかね?
0067デフォルトの名無しさんNGNG
http://www.agemasukudasai.com/bloom/
0068デフォルトの名無しさんNGNG
>>64
ボーランドのなんとか55で
何をやったらそうなった?
0069デフォルトの名無しさんNGNG
Borland C++ Compiler 5.5
0070デフォルトの名無しさんNGNG
>>68
すみません。できました。意味も無くobjふぁいるにilink32施してました。
でもなんでobjとか出てくるんですか?
0071デフォルトの名無しさんNGNG
分割コンパイル
0072デフォルトの名無しさんNGNG
関数に渡す引数の型の種類によってその型を使用する処理を
行う関数を作りたいんですが、そんなことできますか?
0073デフォルトの名無しさんNGNG
template <typename T>
void func(T& t)
{
//...
}

void func(wchar_t* pt)
{
//...
}
0074デフォルトの名無しさんNGNG
>>72
C++で関数の多重定義を使え。
もしくはvoid *で渡しておき、パラメータで切り替える。

void func(void *p, int i)
{
double d;

switch (i) {
case 1:
d = *(double *)p;
break;
]
}
0075デフォルトの名無しさんNGNG
>>73
スレ違い
0076デフォルトの名無しさんNGNG
おーなるほど。
これ以外のうまい方法はないんでしょうか?
あとC++はできないんで、Cでお願いします・・
0077デフォルトの名無しさんNGNG
ばーか!気合で何とかしろ
0078デフォルトの名無しさんNGNG
>>76
ないから関数名に型名を付加しろ。
C++の関数のオーバーロードも内部では同じようなことをしている。
0079デフォルトの名無しさんNGNG
>>76よ
>>74に答えがあるぞ。
0080デフォルトの名無しさんNGNG
>>79
> これ以外のうまい方法はないんでしょうか?
0081デフォルトの名無しさんNGNG
>>76
別にC++の全ての機能を使わなければならないというわけじゃないでしょ。
C++の機能はオーバーロードだけ使って、あとはCの機能だけで書けばいいでしょ。

それとも、C++コンパイラがないとか??
0082デフォルトの名無しさんNGNG
typedef enum { TYPE_CHAR., TYPE_INT, TYPE_LONG ... } VTYPE;

void func(VTYPE vt, ...)
{
 va_list arg;
 va_start(arg, vt);

 switch (vt)
 {
 case TYPE_CHAR.:
  ...
 }

 va_end(arg);
}
008376NGNG
ありがとうございます。
色々試してみます
0084デフォルトの名無しさんNGNG
悪いことはいわないから妙なことせずに
関数名の違う関数を用意しる。

#define で展開してもいいが。
0085デフォルトの名無しさんNGNG
int swap0(int *pa0,int *pb0){

int t;

t=*pa0;
*pa0=*pb0;
*pb0=t;

}

すいません、これって何をしているのですか?
0086デフォルトの名無しさんNGNG
>>85
swap()の名前そのままの通りの事をしている。
*pa0と*pb0が指すintの値を交換している。
0087デフォルトの名無しさんNGNG
>>85
関数の方は void にすべきだと思う。
0088デフォルトの名無しさんNGNG
>>87
関数の値は〜
の間違い(;´Д`)
008985NGNG
>>86,87
ありがとうございました!
0090デフォルトの名無しさんNGNG
http://www.cyberconnect2.jp/hack/frame.htmlあらしてみろよ
0091デフォルトの名無しさんNGNG
普通unionを使うものだと思ってたが。

typedef struct {
 enum {INT, FLOAT} type;
 union {
  int i;
  float f;
 } v;
} giko_t;

void sii(giko_t g) {
 switch (g.type) {
 case INT:
   :

0092デフォルトの名無しさんNGNG
>>88
それを言うなら「関数の型は」ではないかと。
#っていうか、関数の値って何さ。void型には値はないっしょや。
0093デフォルトの名無しさんNGNG
>>92
そうとも言う。




スマンそれが正解。どっから方が出てきたのか自分でも不思議だったんだが
型と変換しようとしてミスったんだな…。
0094デフォルトの名無しさんNGNG
void * 型ってどういうときに使うのかよくわかってないのですが、
>>74みたいに使うのが普通の使い方なのでしょうか?
0095デフォルトの名無しさんNGNG
>>94
あくまでおれの考えだが、>>74みたいなコードはよくないと思う。
Cにはきっちりとunionという機能があるわけだから。
キャストで解決するのは最小限にすべきだとおれは考える。

んで、void *ってのは型はわからんがとにかくポインタを渡したいときに使う。
具体的にはmallocなんかいい例だ。mallocは言われたとおりの大きさのメモリを
確保してその先頭のポインタを返す関数だが、そのメモリの領域が何の型であるか
というのは事前に(malloc作成時に)は決められない。こういうときにvoid *を使う。
0096デフォルトの名無しさんNGNG
ほかにはmem系関数がよい例だね。
str系関数と違って渡すポインタがchar *とは限らないから、void *にしておかないと
コンパイル時に警告が出てしまう。
0097デフォルトの名無しさんNGNG
>>95
>>74そのままではないが、不特定の型を取り扱う場合
unionだとdoubleに合わせることになって困ることも多い。
なので、>>74は(そう言う場合には)妥当解だと思う。

それにしても、
void と void * は別の語にするべきだったんじゃないかと思うんだけどね。
009895NGNG
>>97
うん、もちろん特別な場合というのももちろんあってそうする必然性があれば、
>>74のように書くのも一向に構わないと思ってる。ああいう風にしか書けない
場合もあったりするしね。

>void と void * は別の語にするべきだったんじゃないかと思うんだけどね。
staticもそうだな。可視性と記憶クラスの指定には別の語を割り当てるべきだった。
0099デフォルトの名無しさんNGNG
voidはともかく、staticは変えるべきだったよな・・・
書く場所によって全然効果が違うじゃないか。
片方はinternにすべきだったと思う。
0100デフォルトの名無しさんNGNG
void=型がない void *=指す型がない

だからいいんじゃない?
0101デフォルトの名無しさんNGNG
すんごいショボイ話ですが
stdio
atdlib
malloc
extern
strcomp
これらをなんて読んでますか?俺は↓のように読んでますが・・・
stdio.h → ストゥディオエイチ
stdlib.h → スタドリブエイチ
malloc → マロック
extern → イクスターン
strcomp → ストルコンプ
間違ってると恥ずかしいのであまり他の人には言えません。
0102デフォルトの名無しさんNGNG
>>101
またクダラネーけど盛り上がりそうな話題を(w

stdio → えすてぃーでぃーあいおー or すたんだーどあいおー
stdlib → えすてぃでぃーりぶ or すたんだーどりぶ
malloc → えむあろっく
extern → えくすたーん
strcomp → すとらこんぷ or すとりんぐこんぷ

整合性まったくなし(w
0103デフォルトの名無しさんNGNG
>strcomp
脳内関数か
0104デフォルトの名無しさんNGNG
>>102
malloc以外は同じだな。
まろっく、きゃろっく、りあろっく
0105デフォルトの名無しさんNGNG
>>101
stdio.h → スタンダードアイオーエイチ
stdlib.h → スタンダードリブエイチ
malloc → エムアロック
extern → エクスターン
strcomp → ストアコンプ

strpbrk → ストアピーブレーク(breakかどうか知らんが…
0106101NGNG
>>103
脳内関数ですたw

みなさんとても参考になりました!ありがとうございます。
個人的に>>105のストアコンプがチトカコイイ
0107デフォルトの名無しさんNGNG
strspn
これの読み方がわからん・・・ストリングスパンか?
0108デフォルトの名無しさんNGNG
>>107
man strspnしてみたら

NAME
strspn - span a string

とかいってるんで、それであってますな。
0109デフォルトの名無しさんNGNG
うち(Linux)のman 3 strspnには
NAME
strspn, strcspn - search a string for a set of characters
と書いてある・・・(しょぼーん)
説明のどこにもspanなんて単語はないし。書けよヴォケ
0110デフォルトの名無しさんNGNG
ストリングのストリじゃなくストラとよぶ人が
多いのはなぜだろう。俺もなんだが。もっとも、相手により確実に
意味を通じさせることが必要な場合はエスティーアールと発音するけれども。

ちょとすれ違い気味だが、俺的に今思いついた気になるもの:

Windows API:
BitBlt びっとぶろっと?びっとぶりっと?びっとぶろっくとらんすふぁ?

UNIX commands:
sed せど?えすえど?えすいーでぃー?すとりーむえでぃた?
ar あー?えーあーる?あーかいぶ?
wc だぶるしー?わーどかうんと?
tr てぃーあーる?とらんすりたれーと?とらんす?
od おど?おーでぃ?おくたるだんぷ?
rm あーるえむ?りむーぶ?
mv えむぶい?むーぶ?
chown ちょうん?ちぇんじおーなー?
等など。UNIXコマンドは類挙にいとまが無いな。いくらでも続けられる。
0111108NGNG
>>109
うちはFreeBSDっす〜
0112デフォルトの名無しさんNGNG
>>104
> まろっく、きゃろっく、りあろっく
なぜ「りーろっく」じゃない?

>>110
> BitBlt びっとぶろっと?びっとぶりっと?びっとぶろっくとらんすふぁ?
Windows APIというより画像処理用語だがビットブリットでいいはず。
0113デフォルトの名無しさんNGNG
mallocの読み方にこだわっても、ま、ろくな事は無いな。
0114デフォルトの名無しさんNGNG
>>113
( ´∀`)σ)Д`)
0115デフォルトの名無しさんNGNG
( ´д)ヒソ(´д`)ヒソ(д` )
0116デフォルトの名無しさんNGNG
まぁ他の香具師とプログラム系の話ほとんどしない香具師なんで参考にならんと思うが。

>>101
stdio → すとぅどぅあいおー || すたんだーどあいおー
stdlib → すとぅどぅりぶ || すたんだーどりぶ
malloc → まろーく
extern → えくすたーん
strcmp → すぅとぅるこんぷ || えすてぃーあーるこんぷ

>>110
BitBlt → びっとぶると

sed → せっど
ar → えーあーる
wc → だぶりゅーしー
tr → てぃーあーる
od → おーでぃー
rm → りむーぶ || あーるえむ
mv → むーぶ || むぶ
chown → しーえいちおうん
0117デフォルトの名無しさんNGNG
質問っす。
fwrite()に関してなんすけど
形 式 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

この第3引数の"size_t nmemb"ってなんじゃーい?
たとえば
struct chinko {
int a;
char b;
char c[9];
} HOGE;
ってな構造体をfwrite()するには
fwrite ( &HOGE, sizeof(HOGE), ??, fp);
この第3引数は構造体のメンバの数、つまり"3"って
記述するの?
0118デフォルトの名無しさんNGNG
>>117
違うっす。書き込みたい構造体の数っす。
1つだけ書き込みたいなら1。
0119デフォルトの名無しさんNGNG
getcとputcで全て代用出来るジャン
この2個で十分だZE!
0120デフォルトの名無しさんNGNG
ハハハ!!!
0121デフォルトの名無しさんNGNG
>>101
stdio → すたんだーどあいおー
stdlib →すたんだーどらいぶらりー
malloc → めもりーあろけいと
extern → えくすたーん
strcmp → すとりんぐこんぺあー

str-をストレングスとか言ったころが懐かしい。
0122デフォルトの名無しさんNGNG
>>117
number of memory blocks.
つまり、sizeバイトのメモリブロックを何個書くか。
正常に書きこめた場合、fwrite()の戻り値はnmembに等しくなる。
#けどバッファリングされるので、実際の書き出しは保留される可能性があるので注意。
0123デフォルトの名無しさんNGNG
fwriteの第二引数は1でいいよな
0124デフォルトの名無しさんNGNG
>>119
俺もgetc, putcが一番好きだな。。。そう効率が悪いものでもないし
stdioの関数およびマクロ群の中で、或る意味では一番問題が少ない。
# MultiThread環境では効率上大問題だが

fwrite/freadはwrite/readを元にしているのにインタフェース的に
より不格好になっているし、何回read/writeが実行されるかわからんとか
そういう所が好きじゃない。
while ((n = read(0, buff, sizeof(buff)) > 0)
  write(1, buff, n);
は端末が標準入力である場合、適切に行単位の入力をこなしてくれるが
freadでは指定したバイト数を必ず読み込もうとしてしまう。
0125デフォルトの名無しさんNGNG
>>124
>俺もgetc, putcが一番好きだな

>freadでは指定したバイト数を必ず読み込もうとしてしまう。

素朴な疑問だけど、ストリーム系と低Lvを混在させるの?
それともgetcで全てを賄うの?
0126デフォルトの名無しさんNGNG
outb() inb()マクロ
使いなよ
0127デフォルトの名無しさんNGNG
BCDコード(2進化10進コード)を使いたいのですが。
どうすればよろしいでしょうか?
0128デフォルトの名無しさんNGNG
fread fwrite は
ストリーム系ジャン
0129デフォルトの名無しさんNGNG
>>128
>>124もよく読もう。
0130デフォルトの名無しさんNGNG
>>127
BCDコードライブラリをどこからか探してくる。
0131デフォルトの名無しさんNGNG
プログラム内で環境変数に値をセットして、呼び元で
その環境変数の値を使用したいのですが、
どのようにしたら良いのでしょうか?
このプログラムは、cshから実行し、
そのcshでその環境変数を使いたいのです。
よろしくお願いします。
0132デフォルトの名無しさんNGNG
>>131
Unixなどでは親プロセスの環境変数は換えられません。
そして擦れ違い。
0133デフォルトの名無しさんNGNG
>>130
レスありがとうございます。
しかし、どこにあるのでしょう・・・。
検索してみましたがひかかりません><
0134デフォルトの名無しさんNGNG
>>125
勿論「同一のファイルに対しては」混在させない。
getc/putc以外は「嫌いだ」と云ってるだけで、使わない訳ではないよ。
少なくとも*printfは、(Cでは)必要だろう。



0135デフォルトの名無しさんNGNG
printfこそCの関数の代表だ。
0136デフォルトの名無しさんNGNG
プリント腐
0137125NGNG
>>134
納得しますた。
0138デフォルトの名無しさんNGNG
printfでは'\0'を出力できない。

よって
fputc>>>fprintf
0139デフォルトの名無しさんNGNG
>>138
fprintf(f, "%c", 0);
0140デフォルトの名無しさんNGNG
>>138
出せますが。
printf("%c", 0);
0141デフォルトの名無しさんNGNG
printf("'\\0'");
0142デフォルトの名無しさんNGNG
Ruby>>>printf≧VB
0143デフォルトの名無しさんNGNG
配列の[ ]の中に変数を入れることは不可能なのですか?
という質問をしようとしてこのスレに来て、>>1のリンク先を読んでみたのですが、
>>配列の大きさはコンパイル時に定数でなければならない。
ここらへんですか〜。
初歩的で申し訳ないですが、アドバイスお願いします。
0144デフォルトの名無しさんNGNG
>>134
「同一のファイル」というのを勝手に「同一の(ソース)ファイル」
と脳内補完してしまって、一瞬(゚Д゚)ハァ?と思ったのはナイショだ(w
0145デフォルトの名無しさんNGNG
>>143
実行時に配列の大きさを決めたいってことか?
たとえば(これできないけど)
void func(size_t s) {
 char a[s];
}
みたいなことやりたいとか?

だったらmalloc使いな。
0146143NGNG
>>145
どのように使えばいいのでしょうか?
初歩的で申し訳ないですが、アドバイスお願いします。
0147デフォルトの名無しさんNGNG
>>143
そんな貴方にalloca()
ご利用は計画的に
0148143NGNG
サンクスです♪
具体的には、
デバイスの数をまず調べ、その数だけ文字列を用意して、
ひとつずつデバイスの名前を入れていく感じにしたかったんです。
 char device[デバイスの数][32文字];
みたいに。

リロードしてビックリ。>>146は誰?
まぁいいかー。
0149デフォルトの名無しさんNGNG
このC言語って・・・・
http://homepage2.nifty.com/arkmage/index1.html
ガクガクプルプル
かなりすごいウィルスなのでは??
対策ってもうとってるのか?俺が知らないだけか??
もし対策とってないとしたらUNIX系は全滅・・・もうダメポ・・・・
0150143NGNG
>>148
あなたこそ誰?
成りすましは勘弁して。
0151143NGNG
(笑
こんな初心者を騙って何のメリットあるんだ〜。
0152デフォルトの名無しさんNGNG
gt;gt;149のって何ですか??
0153デフォルトの名無しさんNGNG
 ( 笑 < リフレク!
ポワン
0154143NGNG
どこかで数を取得し、その数だけ配列変数を用意するという場面は、
よくある気がするんですけどね〜。どうなんでしょうか?
mallocも調べてみましたが、ちょっと難しそうです・・・。
0155デフォルトの名無しさんNGNG
じゃ、newでもしとけ
0156デフォルトの名無しさんNGNG
printf = プリン・豆腐
0157デフォルトの名無しさんNGNG
C99ならstaticで(ry
0158デフォルトの名無しさんNGNG
int func(int size)
{
 int *a;
 a = malloc(sizeof(int) * size);
/* 処理 */
 free(a);
 return 0;
}

エラーチェック無しだけど基本はこんなでいいんだよね?
0159デフォルトの名無しさんNGNG
できれば
a = (int *) malloc(sizeof(int) * size);
だね。

後、私は癖で
if (a) {
 free(a);
 a = NULL;
}
とするかな。
0160デフォルトの名無しさんNGNG
>>154
ならvectorでも使っと毛
0161デフォルトの名無しさんNGNG
>>159
C89以前の方ですか?
0162デフォルトの名無しさんNGNG
C++でもキャストしないといけないはず。
C++でmalloc使うのもどうかと思うけど
0163デフォルトの名無しさんNGNG
>>162
C++ では、じゃない?
0164143NGNG
>>155-163
ありがとうございました♪
C++ならもっとかんたんにできるのですか?
0165デフォルトの名無しさんNGNG
>> 101
亀ですみませぬ。

stdioすたんだーどあいおー
atdlibすたんだーどりぶ
mallocまろっく
externえくすたーん
strcompえすてぃーあーるこんぷ


まんまですね(苦笑)
正しいのかは知らず。
0166デフォルトの名無しさんNGNG
>>164
こんな感じ。

int* a = new int[size];
// 処理
delete [] a;
0167デフォルトの名無しさんNGNG
vector <int> a(size);
というのもある。
delete 書かなくていいんで楽。
0168デフォルトの名無しさんNGNG
malloc をエムアロック、
realloc をリアロックと読むのに、
calloc をコーロックと読んでしまう…
0169デフォルトの名無しさんNGNG
extern → えっくすタン
0170デフォルトの名無しさんNGNG
malloc マロック
calloc カロック
realloc リアロック
0171143NGNG
ありがとうございます♪
さっそく試してみますね。
0172デフォルトの名無しさんNGNG
>>159
free(NULL);は正常に動くぞー(つうか害は無いぞ)。
まあ癖ってんならしょうがないか。
0173デフォルトの名無しさんNGNG
>>163
古いCだと必用。
0174デフォルトの名無しさんNGNG
stdio.h → エスティディアイオーヘッダ
stdlib.h → エスティディライブヘッダ
malloc → マロク
calloc → カロク
realloc → リアロク
extern → エクステン
strcmp → エスティアールコンプ
0175デフォルトの名無しさんNGNG
>>173
なるほど。
0176デフォルトの名無しさんNGNG
>>174
ライブってのは初めて聞いた
リブとかライブラリならよく聞くけど
0177143NGNG
2次元のcharを扱いたいのですが、
 char moji[size1][size2];
そういう場合、intをcharに置き換えるだけではだめですよね。
応用力なくて申し訳ないです。
0178デフォルトの名無しさんNGNG
char **p;と宣言して、char *とcharの配列を動的につくる。

int i;
p=malloc(sizeof(char *)*size1);
for(i=0;i<size1;i++)
p[i]=malloc(size2);
0179デフォルトの名無しさんNGNG
本気なのかネタなのか判断に迷うところだ…
0180デフォルトの名無しさんNGNG
もしくは、1次元配列を2次元配列かのように扱うか。

#define INDEX2(i, j, size) ((i) * (size) + (j))
#define MALLOC(type, size) (type*)malloc(sizeof (size) * (size))

p = malloc(sizeof (char) * size1 * size2); /* char p[size1][size2]; みたいなもの */
/* こんな感じで処理
 p[INDEX2(i, j, size2)] = i * j;    (p[i][j] = i * j; に相当)
*/
free(p);
0181デフォルトの名無しさんNGNG
いくらなんでもネタだろう。
ていうか、漏れは二次元以上の配列は使わないな。
全部一次元で代用。
楽だし…
0182デフォルトの名無しさんNGNG
MALLOC 消すの忘れてた。
しかも間違えてるし。

#define MALLOC(type, size) (type*)malloc(sizeof (type) * (size))
                                ~~~~~
だな。
0183デフォルトの名無しさんNGNG
>>180
なんかスゲェ見にくいよ。
0184デフォルトの名無しさんNGNG
>>183
じゃ、書いてみて。
0185178NGNG
ネタ?
なんか間違っているかな(^_^;)
0186デフォルトの名無しさんNGNG
初心者なんですけど…わからないよ〜。簡単なコトらしいんだけど…
どーかあたしに愛の手を。m(_ _)m
#include<stdio.h>
#define AST "********************"
#ifdef NEW

void main(void){
int i,j,k=1,n;
printf(" n = ");
scanf("%d",&n);
for(i=1; i>=1 ; i+=k){
printf("%*.*s\n", n+1, i*2-1 , AST );
if(i == n)
k= -k;
}
}
#endif
でビルドするとエラーが2個でます。
>LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
>Debug/rennsyu21.exe : fatal error LNK1120: 外部参照 1 が未解決です。
たぶんプリプロセッサあたりをなんかどーかするんでしょうけど、わかりません。
誰かよかったらお教えくださいませ。
0187デフォルトの名無しさんNGNG
calloc コーラック
0188デフォルトの名無しさんNGNG
>>178
まぁ、その配列をソートすることがある場合や
ジャグ配列を作りたい場合はそうするね。

そうでない場合は鬱陶しい上に解放が面倒なので
あまり使わないんじゃないかな。
使うときは便利なんだけどね。

>>186
NEW が定義されてないから
#ifdef から #endif までが無視されて、
main が無くなってエラー。
0189143NGNG
>>185
俺がネタと言われてるんじゃないですか〜。
嫌な思いをさせてしまって申し訳ないです。
はじめたばかりの初心者なので、ものすごいこと言ってるかもしれないです。
1次元で代用する方法を考えてみますね。
0190デフォルトの名無しさんNGNG
int mainじゃないと駄目って事かな?
0191デフォルトの名無しさんNGNG
>>187
calloc は 0 クリアを伴うから malloc とは別物ジャン。
0192デフォルトの名無しさんNGNG
>>186
??=ifdef NEW

↑何の為にやってんの?
 ここではじかれてるだけじゃん。
 釣られた?
0193186NGNG
うおおお!ありがとうございます。試してみます>ALL
0194191NGNG
>>187
スマソ。読み方のやつか。
0195190NGNG
ちょっとこの場合では的外れだた(-_-;)
0196デフォルトの名無しさんNGNG
ちなみに void main は別に使って悪いものではない。
例えば、終わらないプログラムは void main で良い。
0197178NGNG
あ、そうか。size2の値が常に同じならば別に>>178のようにしなくてもいいのか。
0198186NGNG
>>190
はわわ〜。うぐぅ。
実は、NEWの定義の仕方がわかりません〜〜エーン
#ifdef NEW
のあと、どう記述すればいいんでしょうか?
ヘルプミ〜
0199デフォルトの名無しさんNGNG
>>198
もしかして、

??=ifndef NEW
??=define NEW

みたいに したいのか?
0200デフォルトの名無しさんNGNG
>>198
ネタですか?
#ifdef NEW
を書いたのは自分じゃないの?
用が無いなら消せばいいし、どーしてもつけておきたいならその前に
#define NEW
とか書いておけばいい。
0201デフォルトの名無しさんNGNG
>>199
??= って一瞬何のことかと思ったぞ。
# が書けないキーボードを使っているのか?
0202デフォルトの名無しさんNGNG
例えば、VC++なら
mainは
mainCRTStartupから呼ばれるが、
voidだった場合はどうなるんだろう?
0203186NGNG
じつは〜、正直に言いますと、
私は学生で、学校から配布されたソースを書いてビルドしているだけです。
だから、もーわけがわからない状態でして…それでこのスレに逃げ込んできました。

少々、長くなりますが( 大体2スレ分くらい )そのソースを部分じゃなく、
全部をアプしてもかまわないでしょうか? 2スレ分を容量をとることになるのですが・・・
あつかましくってすみません・・・・
0204デフォルトの名無しさんNGNG
>>202
たまたま eax に入ってる値が返るんじゃない?
0205デフォルトの名無しさんNGNG
>>203
2レスの間違いだよね?
0206デフォルトの名無しさんNGNG
( ´д)ヒソ(´д`)ヒソ(д` )
0207デフォルトの名無しさんNGNG
2スレ分って!
モノスゲェ量じゃねぇかよ!
1-1000までを2つ分!?
0208186 その1NGNG
たのんます、相談にのってくださいまし〜〜〜〜m(_ _)m
#include<stdio.h>
#define AST "********************"
#ifdef NEW

void main(void){
int i,j,k=1,n;
printf(" n = ");
scanf("%d",&n);
for(i=1; i>=1 ; i+=k){
printf("%*.*s\n", n+1, i*2-1 , AST );
if(i == n)
k= -k;
}
}
#endif
/* つづきます */
0209デフォルトの名無しさんNGNG
extern "C" を使わずに
C++とリンクするには
どうしたらいいですかね?
なるべく複雑でないやりかたで教えてください。
0210186 その2NGNG
#ifdef OLD
void main(void){
int i,j,k=1,n;

printf(" n= ");
scanf(" %d",&n);

for (i=0 ; i>=0; i+=k){
for (j=0; j<2*n-1; j++){
if(j+1 < n-1 ll j-1 > n-1 )
printf(" ")
else
printf("*");
}
if(i == n-1)
k *= -1;
}
}
#endif
0211186 その3NGNG
#ifdef OLD2
void main(void){
int i,j,k=1,n;

printf(" n = ");
scanf(" %d ",&n);

for (i= -n+1;i<= n-1;i++){
for(j=1; j<=2*n-1 ; j++){
printf( i / (( j<2*n-j)? j : 2*n-j)? " " : "*");
}
printf("\n");
}
}
#endif
以上です。お願いいたします!どうかご教授くださいませ〜〜!m(_ _)m
0212デフォルトの名無しさんNGNG
>>209
素直に extern "C" 使いなされ。
こういう風にできるからさ。
extern "C" {
void foo();
void bar(int a);
int hogehoge(double a, int b);
}

>>208 >>210-211
どれをコンパイルしたいかによって
#define NEW
か
#define OLD
か
#define OLD2
かを、ファイルの先頭あたりで行えば良い。
0213186 NGNG
あのね、今日テストなんだけど、この問題がビルドできなくって困っていたところなんでチュ。
たすけて〜
0214デフォルトの名無しさんNGNG
誰だよこんなソース書いた奴!
こんなの参考にしない方が今後の為だゾ!

……。
cc -DNEW source.c
とかかな?
0215デフォルトの名無しさんNGNG
#define NEW
#define OLD
#define OLD2
のどれか1つを
#ifdef NEW
の前の行に挿入する
0216デフォルトの名無しさんNGNG
>>211
#define AST "********************"
の下あたりに
#define NEW
を入れる、じゃあだめ?
0217デフォルトの名無しさんNGNG
>>208 == >186
先頭に以下の3つのうちどれか1つの行を入れれば動くと思われ。
#define NEW
#define OLD
#define OLD2

つーか「上の3つのうちどれを指定するか」で
「#ifdef〜#endifで囲まれた3つのうちどれを有効にするか」
を決めている訳だが。
0218デフォルトの名無しさんNGNG
乱交会場はここですか?
0219デフォルトの名無しさんNGNG
コンパイルオプションの学習じゃねえの?
0220186 NGNG
おおおおっ!奇跡の予感!
0221デフォルトの名無しさんNGNG
#ifdefの意味知るだけで解決できる問題だと思うんだが。。。
0222デフォルトの名無しさんNGNG
>>212
おそらくC++からCをリンクするのではなく
CからC++をリンクしたいのだと思われ
0223デフォルトの名無しさんNGNG
テストがあるって事は、それに足る講義が行われたはずだよな?
何でコンパイルすらできないんだ?
0224デフォルトの名無しさんNGNG
どんなに複雑でもいいから
extern "C"
以外でお願いできませんでしょうか?
022517NGNG



     な   ぜ   そ   ん   な   に   e   x   t   e   r   n    "C"   を   拒   否   す   る   ?



0226186 NGNG
やったー!!!(^−^)できました!
#define OLD2 でできました!
いや〜〜〜ありがとうございます!>ALL
0227デフォルトの名無しさんNGNG
>>224
ひょっとしてあれか?
ライブラリはあるが、その中身に手を加えられないってことか?
0228デフォルトの名無しさんNGNG
>>224
アセンブラに出力してシンボル名を書き直したら?
0229186 NGNG
(^−^)
皆様、本当にありがとうございました!m(_ _)m
それでは!
0230デフォルトの名無しさんNGNG
#ifndef ぬるぽ
#define ぬるぽ 0
#endif
0231デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>230
0232186 NGNG
>>223
A.授業についていけない、おちこぼれだったからです。(^^;
0233230NGNG
>>231
はえー(ワラ
0234デフォルトの名無しさんNGNG
>>231
用意してたの?
0235デフォルトの名無しさんNGNG
>>232
でもコンパイル作業くらいはわかっただろ?
もしかしてプログラミングなのに実習がなかったのか?^^;
0236231NGNG
ぬるぽスレ開いてコピペしただけだよ(w
リロードのタイミングがよかっただけかも(w
0237186 NGNG
>>235
担当の先生が答えを教えてくれないんですよ…、
自分で勉強しろ、こんぐらい雑魚でもわかる筈だろ…って。
でも私はプログラミングの経験が足りないから、シンプルなところでつまづいて
しまって…、簡単なんだけど、なかなか気づかない、一言で言えば私の勉強不足なんです。
0238デフォルトの名無しさんNGNG
>>237
勉強に関しては自分で勉強するてのは原則ではあるんだが…
質問しにいって答えなかったとかならちと問題ありかも
0239186 NGNG
>>238
先生と乖離している部分があって…先生は簡単なことだから説明を省略してしまったようです。
#defineなんて簡単なことだし。すばらしい先生なんですけど。
でも、確かに簡単なことなんだけどバカのボクにはわからなくって。
家に帰ってコンパイルしてみたらエラーでるし、今日試験だし・・・・
正直パニクッたからこのスレにきました。
0240デフォルトの名無しさんNGNG
先生を すばらしいと 言える あなたは すばらしい。
0241デフォルトの名無しさんNGNG
単発質問スレを立てずにここに来ただけで十分ましだな。
0242デフォルトの名無しさんNGNG
>>186 あたし
>>237 私
>>239 ボク
0243デフォルトの名無しさんNGNG
>>242
観察するなよw
0244デフォルトの名無しさんNGNG
みんな「してやられたぜ!」な気分かな〜と思って。
0245デフォルトの名無しさんNGNG
>>224
何で extern "C" が必要かを知らないクチかな?
オーバーロード、名前空間という C++ の機能を考えれば
分かると思うよん。
VC++ なら次のコードをビルドしてみれ。

void foo() { }
void foo(int) { }
namespace hoge { void foo(); }
extern "C" void foo(int, int) { }
void main() { foo(); foo(0); hoge::foo(); foo(0, 0); }

多分こんなリンクエラーが出ると思う。
Test.obj : error LNK2019: 未解決の外部シンボル _foo が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl hoge::foo(void)" (?foo@hoge@@YAXXZ) が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl foo(int)" (?foo@@YAXH@Z) が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl foo(void)" (?foo@@YAXXZ) が関数 _main で参照されました。

オブジェクトファイルとかの中では実際には
 extern "C" foo → _foo
 hoge::foo() → ?foo@hoge@@YAXXZ
 foo() → ?foo@@YAXXZ
 foo(int) → ?foo@@YAXH@Z
とか名前が変わってるわけ。(変わり方はコンパイラ依存)
extern "C" のある時(Cを使った時)とそうじゃないときじゃ
全然名前の変わり方が違うっしょ?
C++ だと引数の型や名前空間の情報も名前に含めるの。
これが同じ名前の関数を複数定義できる仕組みでもあるわけだけど。

extern "C" を使わないで何とかするんじゃなくて、
extern "C" を使って何とかする方向で考えるべきだと思われ。
0246デフォルトの名無しさんNGNG
↓わかったか!
0247デフォルトの名無しさんNGNG
>>246
おおむねわかったぜジョニー
0248デフォルトの名無しさんNGNG
これ C++ スレの話だよな。
0249デフォルトの名無しさんNGNG
>>245
勿論、解った上で聞いてるんだが…。
そうですか、無理ですか。
0250デフォルトの名無しさんNGNG
じゃあ、C++のライブラリをCで使う方法を教えて下さい。
0251デフォルトの名無しさんNGNG
無茶言うな
0252デフォルトの名無しさんNGNG
ユークリッドの互除法で最大公約数を求めるプログラムを作ってみたんですが、
これ以上に簡潔な書き方ってありますでしょうか??暇な人いたら見てやってください。
#include <stdio.h>
int uclid(int,int);
void main()
{
int a,b;
while (1){
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
if (a <= 0 || b <= 0) break;
if (a >= b) printf("%d\n",uclid(a,b));
else printf("%d\n",uclid(b,a));
}
}
int uclid(int a,int b)
{
int n;
while (a%b != 0){n=a; a=b; b=n%b;}
return (b);
}
0253デフォルトの名無しさんNGNG
void ?foo@hoge@@YAXXZ(void);
とかやって使えばいいじゃん。
? とか @ が識別子に使えないならコンパイラを改造してさ。
0254デフォルトの名無しさんNGNG
11.14:
void main()と宣言してうまくいかないわけがないと思う。なぜなら main()から戻る代わりに、exit()を呼んでいるから。だいたい今使っ ているO/Sはプログラムのexit値/戻り値を無視する。

A:

main()から戻ってくるかどうかは関係ないし、そのステータスを見る かどうかも関係ない。問題はmain()の宣言がおかしいと、呼び出し側 (実行時のスタートアップのコード)がmain()を正しく呼び出すことす らできないかもしれないことにある。

君が使っているO/Sは終了時のステータスを無視して、void main()で もうまく動くかもしれない。しかし、このやりかたは移植性が低いし、 正しくもない。ボク女(;´Д`)ハァハァ
0255デフォルトの名無しさんNGNG
>>253
ただ呼ぶだけじゃだめだな。
コンパイラがthisをどう渡すかとか、vtblの扱い方とか知らないと。
0256デフォルトの名無しさんNGNG
>>254
ボク娘は確かに萌えるが、何故に?
0257デフォルトの名無しさんNGNG
exit()で終了するのは綺麗ではないと思う。
たとえmainからでもちゃんとreturnしたいね。
0258デフォルトの名無しさんNGNG
カーネルのコードとか、void main 使ってるよね。確か。
0259デフォルトの名無しさんNGNG
mainはないよ
0260デフォルトの名無しさんNGNG
zoid main(zoid)
0261デフォルトの名無しさんNGNG
じゃ、デーモンだったかな?
0262デフォルトの名無しさんNGNG
漏れも exit() はキライ
構造化の基本を無視してる
0263デフォルトの名無しさんNGNG
exit嫌いはC使う資格なし
0264デフォルトの名無しさんNGNG
俺も嫌いだ。
が、面倒な時は使う。
0265デフォルトの名無しさんNGNG
>>264
面倒じゃないときはどうしている?
0266デフォルトの名無しさんNGNG
bool 値返して全部ちゃんとエラー処理してる。
0267デフォルトの名無しさんNGNG
ああ、エラー時に即終了させるってのがいけないと言っているのか。
0268デフォルトの名無しさんNGNG
ていうか、むしろexit使う時なんてある?
使ったことないよ。
0269デフォルトの名無しさんNGNG
ちゃんとエラー処理してれば、自然に main に行き着くと思うのだが。
0270デフォルトの名無しさんNGNG
main内でreturnでなくあえてexitを使う意味とは?
まさかvoid mainだから?
0271デフォルトの名無しさんNGNG
exitとかロングジャプンとか
一度は使ってみたいけど
機会がない
0272デフォルトの名無しさんNGNG
>>269
void usage()
{
  fprintf(stderr, "cmd: [-H | -L ] [-Aoutd] [file...]\n");
  exit(1);
}
などは典型的な例だが見たことないか?
mallocに失敗した場合にできることが殆どないプログラムの
場合は、単にエラーを吐いて死ぬようなmallocラッパーを使うことも
多いだろう。
0273デフォルトの名無しさんNGNG
>>272
なるほど、
でも、やっぱり使わないなぁ…
所詮は好みの問題か。

他にはcoolな使い方無いかな?
0274デフォルトの名無しさんNGNG
>>252
uclid()の仕様が……
大小判断くらい関数内でしてもいいんでないかい?
それと、私ならscanf()は使わない。

どうでもいいけど、
while (1)
と
return (b);
がもにょる。
0275デフォルトの名無しさんNGNG
私はexit()を使わない方。

int main(int argc, char **argv)
{
 /* 処理 */
 if (/* 条件 */) {
  usage(argv[0]);
  return EXIT_FAILURE;
 }
 return EXIT_SUCCESS;
}
0276デフォルトの名無しさんNGNG
>>275
mainにいないときは?
0277デフォルトの名無しさんNGNG
argv[0]を渡す意味がわからん。
0278デフォルトの名無しさんNGNG
漏れは

return usage(/*argv[0]もあるかな*/);

かな。
argv[0]はウィンドズだと変になるからねぇ。
0279デフォルトの名無しさんNGNG
>250
COMをまなびなはれ
0280デフォルトの名無しさんNGNG
>>276
main() 以外のいろんな箇所から、使用法を表示して直ちに終了という処理が
必要になるなら、プログラム設計をやり直した方がいい。
0281デフォルトの名無しさんNGNG
#include <stdio.h>
int uclid(int a,int b){
int n;
while(a%b){n=a; a=b; b=n%b;}
return b;
}
void main(){
int a,b;
while (1){
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
if (a <= 0 || b <= 0) break;
printf("%d\n",uclid( a<b?b:a, a<b?a:b));
}}
0282デフォルトの名無しさんNGNG
a,bにunsigned付けときゃ負の判定要らんか?
0283デフォルトの名無しさんNGNG
mallocって充分に速いのか?
予め多く確保しておいた方がいいのか?
0284デフォルトの名無しさんNGNG
ファンクションの定義というのはどうやったらいいのでしょうか?
関数の定義の仕方は解るのですが、同じような感じにやったらいいのでしょうか?
初心者な質問ですみません…
0285デフォルトの名無しさんNGNG
その前に関数とファンクションの違いを述べてくれ。
0286デフォルトの名無しさんNGNG
>>283
測定すればいい。それが「十分に早い」かどうかは、そのプログラムに対する
性能要求・環境・mallocの実装の質etc...に依存するので、一般的な回答は
有り得ない。
それでも敢えて云うならば、平均的なC++プログラムではそれこそ山のように
new/deleteが暗黙に使用される(自分で呼んだつもりはなくとも、stringや
vectorのような一般的な道具を使うたびに当然暗黙には使用される訳だ)
ことを考えれば、いわゆるHosted environmentにおいてCを使っている分には、
mallocの性能なんぞ気にする必要はなかろう。
0287デフォルトの名無しさんNGNG
今学校から携帯で書き込みです
五個の配列を合計して割って平均値を出したいのですがこのソースでできますか?今コンパイル環境がないのでよろしくお願いします
int test[5]={100,90,80,70,60}
int count,avg;
avg = 0;
for(count=0; count<=4; count++){
avg=avg+test[count];}
printf(゙%d\n゙,avg/5);
0288デフォルトの名無しさんNGNG
>>287
出来ない。
0289デフォルトの名無しさんNGNG
ネタでないことを祈るが
1行目の;が(ry
avg(ry)sum(ry
ダブルコーテーションが(ry
mai(ry
0290デフォルトの名無しさんNGNG
全角文字のA→Zまでを出力したいんだけど、
○の部分にはなにをいれればいいです?
検索のキーワードのヒントだけでもいいです。

#include<stdio.h>

int main()
{
unsigned int i;

for(i = 'A'; i <= 'Z'; i++)
{
printf("%X, %○\n",i, i);
}

return 0;
}
0291デフォルトの名無しさんNGNG
>>290
カコイイ!
0292デフォルトの名無しさんNGNG
>>287
つまり、テスト中に携帯からカンニング中ということですか?
0293デフォルトの名無しさんNGNG
>>290
マック使いカコイイ!
それかX68kか?
0294290NGNG
あ、ちなみにVC6です。

>>291, >>293
やっぱ、このソースじゃ全角文字の出力は無理?
0295デフォルトの名無しさんNGNG
''でASCII以外の文字囲めるの?
0296デフォルトの名無しさんNGNG
unsigned int i;
for(i='A'; i<='Z'; i++)
{
 printf("%04xH, %c%c\n", i, i>>1, i&0xff);
}

マックだよね?
0297296NGNG
>>294
マックじゃねぇのかよ。
じゃあひっくり返したらいいよ
0298デフォルトの名無しさんNGNG
>>297
ひっくり返すってのは1バイト目と2バイト目をひっくり返すってこと?
0299デフォルトの名無しさんNGNG
>>295も云ってるが、今どきの普通の計算機ではchar型=1byte=8bitであって、
少なくとも俺が知っている範疇のC言語ではシングルクオートによる
文字リテラルではchar型しか扱えないんだから、その中に
ワイド文字がブチこんである時点でよく分からない。
本当はL'A'
と書いてあったのか?
だとすると、エンディアン変換を適当に行って1バイトずつ出力しても
思ったとおりの結果にはならない可能性が高いよ。ワイド文字の
エンコーディング方式は規格上は何も定義されていないが、
多くの処理系はそれをUCS2/UCF16/UTF32などでエンコードするからね。

0300デフォルトの名無しさんNGNG
>UCS2/UCF16/UTF32
すまんUTF16の間違いね。もちろん。
0301デフォルトの名無しさんNGNG
>>299
少なくともSunOSでは扱える。
Versionが4の頃と5になってからではバイト順が変わってしまった気がするけど。
0302デフォルトの名無しさんNGNG
#include <stdio.h>
int main(){
unsigned int i, z, w;
i=*(unsigned int *)"A\0\0";
w=(i&0xff)<<8;
i=(i>>8)|w;
z=*(unsigned int *)"Z\0\0";
w=(z&0xff)<<8;
z=(z>>8)|w;
for(; i<=z; i++)
{
printf("%02x%02xH, %c%c\n", i>>8, i&0xff, i>>8, i&0xff);
}
}

携帯だから確認できん、だれか試して。
0303デフォルトの名無しさんNGNG
わざわざ引っくり返さなくてもprintf()で順番変えればいいじゃん。
0304デフォルトの名無しさんNGNG
>>303
forの時にヤバイのよ。
0305デフォルトの名無しさんNGNG
どうせ実装依存なんだから、
i += 256;
でいいと思ったり。
0306デフォルトの名無しさんNGNG
リッチなカニチャーハンの本の誤植?は改訂版でも修正されてないですか?
0307デフォルトの名無しさんNGNG
>>302
お、できた。
ありがとう。
0308デフォルトの名無しさんNGNG
3連文字って誰が使うの? インド人?
メヂャーな国で使うとこってあるの?
スペーンとかフランスとか、、、
0309デフォルトの名無しさんNGNG
strdupってC999から標準になった?
なったよね?
0310デフォルトの名無しさんNGNG
>>308
北欧各国で使うんでない?
0311デフォルトの名無しさんNGNG
forkはC9999から標準になる予定
0312デフォルトの名無しさんNGNG
C9999なんて要らん。C9989で十分。
0313デフォルトの名無しさんNGNG
C99999から文字列型stringを標準サポート
0314デフォルトの名無しさんNGNG
その前にガベコレ
0315デフォルトの名無しさんNGNG
 ぬ  る  ぽ
0316デフォルトの名無しさんNGNG
>>315
ガッ
0317デフォルトの名無しさんNGNG
ここって初心者の質問でもOKでしょうか。

int hage[3000];
という配列の hage[1901]からhage[2030]までを値を代入して初期化したいのですが、
hage[]={ 1,2,3,4,5,6,7,8,9 ・・・・・};
みたいなふうにして、1901から値を代入することってできますか。
方法があれば教えてください。
今は、別配列にいったん入れてからコピーしています。
0318デフォルトの名無しさんNGNG
初心者の質問しか受け付けません

>>317
入れる値がばらばら(規則性がない)なら一つずつ入れるかあなたの言うようにmemcpyなどで別配列からコピーするしかない。
0319デフォルトの名無しさんNGNG
>>317
年を入れるつもりなのだな。
それなら、int hage[130]で宣言して、i+1901で参照すればいいのでは?
0320317NGNG
回答ありがとうございまふ
入れる値は規則性は、厳密に言えば無くはないんですが、複雑で別プログラムで計算したものを
代入しています。
やっぱり方法はないんですか。
配列は最終的には、3000全部使う予定なので>>319さんの方法ではだめなんです。

int hage[1900]=[1,2,3,4,5,6,・・・];
みたいに書くことができれば理想なんですが。
0321デフォルトの名無しさんNGNG
C言語は、どのくらいで習得できますか?
0322デフォルトの名無しさんNGNG
>>321
そのうちに習得できます
0323デフォルトの名無しさんNGNG
>>321
大体1週間くらいあれば十分かな。
0324デフォルトの名無しさんNGNG
>>321
この週末だけで習得可能 
0325デフォルトの名無しさんNGNG
http://ime.nu/3.141592653589793238462643383279502884197169399375105820974944592.jp/
0326デフォルトの名無しさんNGNG
>>320
コンパイラが耐えられるのであれば、何らかのプログラムで
初期化する式(コード)を生成して、それをソースにするという手はある。
PerlとかRubyとかawkとかいったスクリプト言語系ならお手軽だろう。
0327デフォルトの名無しさんNGNG
>>287
宿題スレに行け
0328デフォルトの名無しさんNGNG
union {
 int a[3000];
 struct{
  int b[1900];
  int c[2100]={1,2,3,3,5,6};
 };
};

ってのは無理なのですか?
0329デフォルトの名無しさんNGNG
>>328
名前の無い構造体って作れたっけ?
0330デフォルトの名無しさんNGNG
>>329
問題はそこでなく、配列を途中から初期化することで、、
0331デフォルトの名無しさんNGNG
>>328
・書式が間違っている。
・1900+2100は4000だろう。計算はできるだけ自分でするな。
・こうすりゃできるけどやっぱり面倒だぞ。

#define SEC1LEN 1900
#define SEC2LEN 1100

union {
 struct {
  int sec1[SEC1LEN];
  int sec2[SEC2LEN];
 } sec;
 int all[SEC1LEN + SEC2LEN];
} data = {{{0,}, {1, 2, 3, 4, 5,}}};
0332デフォルトの名無しさんNGNG
まぁ、何にせよ memcpy か for かで代入するのが一番いいと思うが。
0333デフォルトの名無しさんNGNG
->これウザくない?
strub point *p;
p->x
を
p.x
ってかけるようにしてくれよ。
構文上あいまいになることもなさそうだし。
0334デフォルトの名無しさんNGNG
p->xはたしか
(*p).xって書くのがめんどいからあるんじゃなかったっけ
0335デフォルトの名無しさんNGNG
>>333
. と -> の優先度は同じだが?
巨大な構造体を関数に渡す時はポインタを使った方が効率が良いんじゃないか?
0336デフォルトの名無しさんNGNG

p->xとp.xは違うデアリマス。セグメンテーションフォールト起こしそうであります。
0337デフォルトの名無しさんNGNG
構造体の配列
0338デフォルトの名無しさんNGNG
プログラム談議に花を咲かせているところ申し訳ないが、
今日はどうしてもみんなに言っておかなければならないことがあるんだ。
そしてみんなも、この言葉を胸に深く刻み込んで、
これからの人生を力強く生きていって欲しい。


 貧 乳 マ ン セ ー !
0339デフォルトの名無しさんNGNG
デバッグができません!!!!!!!!
助けてください!!!!!!!!!!!!!!
0340デフォルトの名無しさんNGNG
>>338
氏ね。

だが貧乳マンセーにはもげしく同意。
0341デフォルトの名無しさんNGNG
>>333
CではいいがC++がとんでもないことになるのでやめてくれ
0342デフォルトの名無しさんNGNG
なんでCではいいんだよ。
0343デフォルトの名無しさんNGNG
↑仮定の話だという事が理解できないヤシ
0344デフォルトの名無しさんNGNG
リトレンディアンと
ビッゲンディアン
どっちが好き?
漏れはリトレンディアンかな。
MIDIとかネットでメンドイけどね…
0345デフォルトの名無しさんNGNG
ポインタの場合は参照先を、
そうでない場合はそれ自身を使う、
という仕様で何か問題ある?

::, ., -> は全部 . に統一しる!
0346デフォルトの名無しさんNGNG
>>343
仮定・・・?
0347デフォルトの名無しさんNGNG
>>345
Dではそうなってるよ
0348デフォルトの名無しさんNGNG
>>347
struct HOGEEE **pの場合はどうするんだろ。
二回間接参照するのか?
0349デフォルトの名無しさんNGNG
'.'と'->'を統一しろなんて言ってる香具師は、
きっと「漏れ2重ポインタも理解できます」なんて面接で言っちゃうんだろうなぁ。
0350デフォルトの名無しさんNGNG
>>348
Dでダブルポインタ使うメリットってあんまり無いぞ。
0351デフォルトの名無しさんNGNG
>>347
>>350
Dの話ならスレ立てて勝手にやってくれ。

>>349
この前「ダプルポインタは理解できますがトリプルポインタは自信がありません」と言った奴がいたよ。
0352デフォルトの名無しさんNGNG
じゃあ変数もvar型で統一して、整数も文字列も代入・演算できるようにすれば?
0353デフォルトの名無しさんNGNG
>>345
アロー演算子が嫌なら (*p).hoge とでもやっとけば?
0354デフォルトの名無しさんNGNG
トリプルポインタは
漏れもちょっと自身がないな。
0355名無しさんNGNG
そもそもポインタは一つだけにすべし。二回以上の参照は悪。
char *argv[] だ。
0356デフォルトの名無しさんNGNG
やさしいCのファイルに文字を出力するところでつまずいてるので、
助けていただけませんか?
ファイルをオープンして、それに書き込むところの
fputs("Hello!\n", fp);
の処理なのですが、このfpはいったい何を指してるのでしょうか?
なぜfpが必要なのでしょうか?教えていただけませんか?

もし、全体のソースコードが必要なら載せます。
では、よろしくおねがいします。
0357デフォルトの名無しさんNGNG
ポインタ配列はどうなるんだ?
0358デフォルトの名無しさんNGNG
>>356
その本に書いてあるはずだが。
0359356NGNG
>358
読んでも、FILE *fpはファイルポインタ、ということしか書いてなく、
fputs("Hello!\n", fp);のfpの意味がわからないのです・・・。
どうか教えていただけませんか?
0360デフォルトの名無しさんNGNG
>>356
ファイルハンドルに決まってる堕炉。
0361デフォルトの名無しさんNGNG
>>359
ならば聞こう。
fpを渡さずにどうやって書き出すファイルを識別するんだ?
0362デフォルトの名無しさんNGNG
>>356
FILE* fp = fopen("hogehoge", "w");
fp->fputs("hogehoge");
と言う事だ、わかったか?
0363デフォルトの名無しさんNGNG
>>362
> fp->fputs("hogehoge");

ちょっとまて。
0364デフォルトの名無しさんNGNG
ぬるぽ
0365356NGNG
あぁ、理解できました。その書き出すファイルを識別するためのものなのですね。
で、もうひとつ質問です。
私今自分が書いた文字をテキストに書き出そうとしてるのですが
char memo[100];
scanf("%s",memo);
でmemo[]に格納した文字があるとしますよね?
そしたら、その文字をtxtファイルに書き出すときfputsで
どのようにすればいいのでしょうか?
今までは
printf("%s",memo);
でできたのですがfputsでやる場合はどうすればいいのか・・・

fputs("%s",memo,fp);
かなと思ってやってみたところできなく、fpとは何かの質問をしたわけです。
どうかよろしくお願いします。
0366デフォルトの名無しさんNGNG
ぶっぶー。
fputsのプロトタイプ
int fputs(char * buf, FILE * fp);
0367デフォルトの名無しさんNGNG
おおっと、const忘れてたぜ。
0368デフォルトの名無しさんNGNG
>>365
fputsのソースを読めば解る
0369デフォルトの名無しさんNGNG
fputs(memo,fp)


?
0370356NGNG
う〜ん、わかりません・・・。
char memo[100];
scanf("%s",memo);
で入力した文字をテキストに書き出すのは
fputs()でもできるんですよね?
0371356NGNG
>369
ありがとうございました。
その方法でできました。
どうもありがとうございました。
0372デフォルトの名無しさんNGNG
> char memo[100];
> scanf("%s",memo);
うお!こっこれは、噂のノーガードパターン??
0373デフォルトの名無しさんNGNG
> 今までは
> printf("%s",memo);
> でできたのですがfputsでやる場合はどうすればいいのか・・・

この前提が間違っている。
fputs() と対であるのは printf() ではなく puts() だ。
printf() と対なのは fprintf()。
0374デフォルトの名無しさんNGNG
DOSで、ひらがなや漢字をキーボードから入力したいのですが
それはどうやればいいのでしょうか?
IMEが使えないし・・・
教えていただけないでしょうか?
0375デフォルトの名無しさんNGNG
fopen成功したかチェックとfcloseも忘れるな
0376デフォルトの名無しさんNGNG
>>374
Cとは関係ない
0377デフォルトの名無しさんNGNG
>>374
いまどきDOSなんか使わないでWindows使いなよ。
コマンドプロンプトもあるんだし。
0378デフォルトの名無しさんNGNG
本当にみなさんありがとうございました。
>>373
いえ、そういう相対的な意味ではなく、
「今まではDOS窓にprintf()でできた。ファイルに書き込むのはどうやるんだ?」
という意味です。まだ入門書レベルなのでfprintf()やputs()等は知りません。

>>375
それは大丈夫です。
しっかりとfclose(fp);をつけてますので。
0379374NGNG
いや、
char hoge[10];
gets(hoge);
等で文字を入力するとき、DOS窓から漢字などを入力したいのです。
どうか教えていただけませんか?
0380デフォルトの名無しさんNGNG
IMEが使えないなんてウソだろ。
C:\>dosime
C:\>selkkc
とか試したか?
0381デフォルトの名無しさんNGNG
何でどの参考書もわざわざクセのあるprintf scanf から教えるんだろう。
gets puts から始めりゃいいんじゃねぇの?
getsの文句はとりあえずおいといて
0382デフォルトの名無しさんNGNG
メモ帳からコピペが簡単
0383374NGNG
>380
それはやってないですが、
char hoge[10];
gets(hoge);
のようなばあい、それは使えませんよね?
いきなり文字入力画面になるので。
0384デフォルトの名無しさんNGNG
だからWindowsでアプリ組めって
0385デフォルトの名無しさんNGNG
>>381
printf scanf はデバッグに便利
0386デフォルトの名無しさんNGNG
>>383
Alt + 半角/全角キー
押しても出てこないのか?
普段マウスでIME使う人?
0387デフォルトの名無しさんNGNG
>>383
gets()は使うな。
0388デフォルトの名無しさんNGNG
>>386
374じゃないけど、Alt + 半角/全角で出たよ
普段は半角/全角だけでやってる
Alt + 半角/全角はWin95以来使ってない
0389デフォルトの名無しさんNGNG
>>378
fclose()のエラーチェックも忘れるなよ。
0390374NGNG
>384
Windowsの文字入力ダイアログのようなものを作れってことですか?
それが一番やりたいんですけど、本にも載ってませんし
作り方がわからないんですよ。
Javaスクリプトなどなら簡単なのですが・・・。
Cでダイアログ形式はできないんです。
0391356NGNG
>>389
エラーチェックとは何をすればいいんですか?
main関数の最後にfclose(fp)をつけるだけじゃだめなのですか?
0392デフォルトの名無しさんNGNG
>>390
BCC DeveloperとBCCForm and BCCSkeltonを拾ってきなさい。
0393デフォルトの名無しさんNGNG
>>356

fclose()の戻り値をちゃんと確認すること。
勿論、fputs()の戻り値もちゃんと確認しろよ。
ちなみに、どっちも正常終了なら0だ。
0394374NGNG
>392
VisualStudio.NETではできないのですか?
同じようなことを。
0395デフォルトの名無しさんNGNG
>>390
猫逝け。以上。
0396デフォルトの名無しさんNGNG
>>394
VC++もってるならVC++のダイアログエディタを使いなさい。
VC++ならMFC使ってちょちょいのちょいで出来るでしょ?
0397374NGNG
>395
モニタ通して見るの疲れるんで、明日本買ってきます。

>396
わかりました。まだVisualStudio内のVisualC++で
コンソールアプリの製作しかしたことないんで・・・。
ダイアログエディタ、使ってみます。
便乗質問ですが、VisualStudioの使い方覚えるのに
VisualC++の本を買うのは正解でしょうか?
やめといたほうがいいですか?
0398デフォルトの名無しさんNGNG
>>397
ヘルプで十分
0399374NGNG
>398
わかりました。

というか・・・
ついさっきVisualStudio→新規プロジェクト→VC++→MFCアプリで
やってみたのですが、ダイアログエディタなんて見当たらないのですが・・・。
ツールバー一式を見ても見当たらないし・・・
どこにあるんですか?
0400デフォルトの名無しさんNGNG
リソース
0401デフォルトの名無しさんNGNG
C言語に勉強にVisualStudioですか?んったくおめでてーなー。
0402374NGNG
リソースビューのことですか?
それならMFCアプリではなくてもありますね。

でも・・・何もない・・・。
MFCアプリとして新規プロジェクトを作ったらリソースビューにも
いろいろあってわかったのですがコンソールアプリとして作った場合、デフォルトでは
何もないんです。
やっぱり全然使いこなせてないなぁ。
0403デフォルトの名無しさんNGNG
>>401
黙れ小手川
0404374NGNG
すいません。
やっぱり、自分で手探りでやってみます。
わからなくても、それが自分のためになると思ったので。
今までの自分の書き込みを見たら教えて厨丸出しだったので。
どうもすいませんでした。
0405デフォルトの名無しさんNGNG
>>348
* か [ ] してから . だろうな。
0406デフォルトの名無しさんNGNG
>>404
KKCFUNC.SYS
COMMAND.COM
MSIME.SYS
MSIMED.SYS
MSIMEK.SYS
ADDDRV.EXE
MSIMEKEY.INI
MSIMER.DIC
MSIME.DIC
DOSIME.SYS
を用意してpathを通す。


//バッチファイルでDOSIME.SYSを組み込む
ADDDRV DOSIME.SYS

//DOSIME.SYSの記述
devicehigh=KKCFUNC.SYS
devicehigh=msimek.sys /A3 /SB32 /SD32
devicehigh=msime.sys /D*msimer.dic /C1 /N /A3 /Dmsime.dic
//スイッチはネット調べるよろし。
0407374=404NGNG
>>406
ん?それは私に対してのレスですか?
0408デフォルトの名無しさんNGNG
>>406
入力用ダイアログ作るって事になったんだから、もう良いじゃんよ。
0409デフォルトの名無しさんNGNG
スレ違いも甚だしいな
0410404NGNG
今ダイアログエディタの使い方を覚えて、
文字の入力できるダイアログを作ろうとがんばってます。
0411デフォルトの名無しさんNGNG
超初心者の質問ですがすいません。
今、cygwinと言うソフトを使ってCの勉強を始めようと思ったのですが、
メモ帳で書き込んだファイルを読み取ってくれません。
(cygwinの表示画面にls、CATなどを打ちこむと、
 NO SUCH FILEとか出てしまいます。)
どうすれば良いか、わかる方いらっしゃいませんか?
スレ汚しすいません。 sage
0412デフォルトの名無しさんNGNG
>>411
それはC以前の問題だ。
cygwinスレいけ(あるかどうかしらんが)
0413デフォルトの名無しさんNGNG
関係ないけど>404の行動ができるやつは
2chにどれくらいいるんだろう
0414デフォルトの名無しさんNGNG
>>413
本人の書き込みであって欲しいけどね。
0415デフォルトの名無しさんNGNG
>>412
むしろPC初心者板。
hello.c.txtなどというファイルを作ってるに5120ウォン
0416デフォルトの名無しさんNGNG
>>413
むしろああいう書き込みは不愉快^^;
0417404NGNG
>413
>414
ありがとうございます。

>416
なんでですか?
0418デフォルトの名無しさんNGNG
で、できたの?
0419デフォルトの名無しさんNGNG
>>418
ありがとうございました。
0420404NGNG
いえ、まだです。
ダイアログエディタで作ったダイアログを.rcファイルとどう絡ませればいいのか
わからないんです。
作った.exeを起動したら、win文字入力ダイアログが出てきて、
文字を入力、保存。
すると保存した文字はmemo.txtに保存され、TClockのツールチップとして表示・・・。
こんなんを作りたいんですが・・・。
.cのソースはできたんですけど、DOSで開かないでWinで開くのにはどうしたらいいのか・・・
0421デフォルトの名無しさんNGNG
>>420
どっちかというと
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/
向けかと。
コンソールアプリとWin32APIアプリと使いわけてる?
0422404NGNG
>>421
いえ、使い分けてません。
VisualStudioで、新規プロジェクト、VisualC++、コンソールアプリ、
の手順で作成しましたから。
そっちのスレにいって聞いたほうがいいですか?
0423デフォルトの名無しさんNGNG
質問する前に基本的なことぐらい勉強しとけ
0424デフォルトの名無しさんNGNG
VC++ なら Windows スレじゃなくて VC++ スレだろ
0425デフォルトの名無しさんNGNG
よっしゃ、教えてくれ!
rubyはなぜ.でつなぐんだ?
0426デフォルトの名無しさんNGNG
>>425
まことに遺憾ながら、あなたの発言を原因に地球が滅ぼされる事が決定されました。
0427デフォルトの名無しさんNGNG
>>404
MFCはMFCのAppWizardで作れって。
0428デフォルトの名無しさんNGNG
愛子様のご成長を見守るスレ
0429デフォルトの名無しさんNGNG
しつもん。
char *p = "Hello, C";
printf("%s\n", p);
この場合、
pの指す値("Hello, C")はどこにあるのですか。
そしてこいつの内容は"Hello, C"であるといつまで保証されていますか。

ぼくにはわかりません。
0430デフォルトの名無しさんNGNG
>>429
その餌じゃ大漁は無理ぽ
0431デフォルトの名無しさんNGNG
>>429
>どこにある
どこか。それはコンパイラが知っている。
>いつまで
必要なだけ。書き換えなければいつまでもそのままだろ。
0432429NGNG
わりとまじめに質問してるんですけど。

char *p = "Hello, C";
(何らかの処理)
printf("%s\n", p);
とした場合、
printfでpが参照されている時点では、pが指す値は"Hello, C"であると保証されているのですか?
0433デフォルトの名無しさんNGNG
>>432=429
何らかの処理の間に書き換えてしまう可能性は常にある。
だから、誰も保証はしないだろ。
何らかの処理の間に書き換えてさえいなければ大丈夫だ。
0434デフォルトの名無しさんNGNG
文字列リテラルが書き換え可能である保証はない。
たぶん不可能な処理系の方が多いのでは。
0435デフォルトの名無しさんNGNG
FAQ だな。
C FAQ 読んできてよ。
0436429NGNG
>>433
あ、そらそうですよね。
たとえば、
void foo(){
char str[] = "Hello, C";
char *p = "Hello, C";
(何らかの処理。p,strの指す内容の書き換えは行わない)
printf("%s\n", str);
printf("%s\n", p);
}
という場合、配列strの内容については、
こちらが明示的に書き換える処理を行わない限り"Hello, C"
でありつづけることが保証されているように思えます。
といいつつ、本当はよく知りません。

pの指す内容については明示的に領域を確保していませんよね。
この場合、どのように扱われるのでしょうか。
一時的にメモリのどこかに確保されるとは思うのですが、
そこから先どういう扱われ方をするのかわかりません。
その内容はいつ破壊されていてもおかしくない。ということなのでしょうか。
0437デフォルトの名無しさんNGNG
>>434
仕様上は不可能。
constがついていないのは過去のソースとの互換性のためかと。
char *p="ぬるぽ"; これでいちいち警告を出されたらたまらん。
0438デフォルトの名無しさんNGNG
>>436
pの指す内容はコンパイラがどっかに確保してくれてる。
というか、文字列で明示的にどこかを指すように保証してるじゃないか。

んでも、厳密に文字列リテラルがどこにあるかを知ってるのは
コンパイラじゃなくてリンカだろうな。リンク時に確定するはず。
0439デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>437
0440ぬNGNG
ぽ
0441デフォルトの名無しさんNGNG
pが指す"Hello, C"文字列の内容が書き換えられないことは仕様で決まっていても
pがいつまでも"Hello, C"を指してる保証はまったくないわけだが
0442デフォルトの名無しさんNGNG
>>441
誰がそんなこといった??
0443デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>440
0444デフォルトの名無しさんNGNG
>>442
*p = 'a'; は出来ないが、p = NULL; は出来るって事だろ。
0445デフォルトの名無しさんNGNG
>>444
できるけど、誰も「できない」とは言っていないでしょ?
ひとりごと
0446デフォルトの名無しさんNGNG
>>436
"Hello, C" と "%s\n" はどっちもリテラル
だからこれは両方とも同じ結果になる
char *p = "Hello, C";
printf("%s\n", p);

char *p = "Hello, C\n";
printf(p);
0447デフォルトの名無しさんNGNG
void tst1(){
char *p= "Hello, C\n";
char a[] = "Hello, D\n";
p=a;
*p='B';
printf(p);
}

void tst2(){
char *p = "Hello, C\n";
printf(p);
}

void tst3(){
char *p = "Hello, C\n";
*p='B';
printf(p);
}
0448デフォルトの名無しさんNGNG
void test(){
 char a[];
 char *b;

 printf("%d %d %d\n", a[0], a, &a);
 printf("%d %d %d\n", *b, b, &b);
}

(´∀`)なんじゃこりゃ
0449デフォルトの名無しさんNGNG
>>446
>"Hello, C" と "%s\n" はどっちもリテラル
>だからこれは両方とも同じ結果になる
>char *p = "Hello, %C";
>printf("%s\n", p);

>char *p = "Hello, %C\n";
>printf(p);

違う結果だ。
0450デフォルトの名無しさんNGNG
\%C
0451デフォルトの名無しさんNGNG
%%%%C
0452デフォルトの名無しさんNGNG
perlを一通り勉強し終えたので
次にc/c++に移りたいと思っているのですが
cを学習してからc++に移るべきか、それとも
c++だけでcの学習は無くてもc++の内容を理解できるか、
どなたかお教えいただけませんか。
0453デフォルトの名無しさんNGNG
>>442,445

432が保証されてるかどうか聞いてるんだから保証されてないと答えるのは当然だと思うが。
それとも誰かが保証されてると答えてからでないと、保証されてないと答えてはいけないのか?
0454デフォルトの名無しさんNGNG
>>452
俺の経験から行くと、Cの仕様書を読んでからC++をはじめたほうがいい。
多言語経験があればC++から始めてもまったく問題なく使えるが、
一見C++とCの共通項に見えて実はCにしかできないこと、Cにはできないこと、などがあいまいになってしまう。

普通こういうコミュニティとかではCが共通語として使用されるので
Cで書いたつもりになってても、じつはC++にしかない機能を使ってたりなんてことがよくある。
0455デフォルトの名無しさんNGNG
未だに分からんのだけど、
仕様書と規格書の違いは何?
0456411NGNG
≫412≫415
遅れましたが、レスどうもです。
言われたとおり初心者板で聞いてみます。
でも、.txt なんて打ってないんですが…。
ありがとうございました!!!
0457デフォルトの名無しさんNGNG
ANSI規格・JIS規格・ISO規格・IEEE規格
0458デフォルトの名無しさんNGNG
>>454
レスどうもです。
背中を押して頂きました。
やはり横着をして楽をする訳には
いきませんね。
cから、学習を始めます。
0459 NGNG
浮動小数点がどのように表現されているか知りたくて
Intel Pentium III Xeon , Debian GNU/Linux 3.0r1, GCC 2.95.2 で試してみました。

1)float に適当な浮動小数点を代入。
2)sizeof (float) によると4バイトらしい。
3)メモリに格納されている float をアドレスの小さい方から見てみる。

0.5 => 0,0,0,63
1.0 => 0,0,128,63
2.0 => 0,0,0,64
4.0 => 0,0,128,64
-0.1 => 0,0,128,191

む・・・・規則がわからん。
0460デフォルトの名無しさんNGNG
符号と仮数部と指数部
0461 NGNG
いや、それはわかるし、 IEEE 標準のフォーマットも知ってるんだけど、
なんでそれで >>459 みたいな表現になるのかと・・・
0.5 と 1.0 の関係とか・・・
0462sageNGNG
>>459
とりあえず IEEE754 か IEC559 嫁
0463デフォルトの名無しさんNGNG
>>461
そこまで分かってるなら…
x86はリトルエンディアンだから、アドレスの大きい方から逆順に見ないと
だめだし、10進数のままじゃ理解しにくいだろうから2進で表示したら?
0464デフォルトの名無しさんNGNG
俺のx86はビッグ円ディ案
0465 NGNG
>>462
単純に 32bit 上位から
符号 1 bit
指数 8 bit
仮数 23 bit
じゃない・・・・のか?
いまから IEEE 754 読む。
0466デフォルトの名無しさんNGNG
PS2ってビッグなのな。驚いた。
0467 NGNG
PS2 で動く Linux 持ってるのか・・・いいなぁ。
あれって、限定品なんだったっけ?
なんか一時申し込みが殺到したよっていう記事を見た気がする。
0468 NGNG
すまん、 Linux 持ってるなんて書いてなかったな。
0469デフォルトの名無しさんNGNG
構造体のサイズを知りたいときは
sizeof(kouzoutai)で測れますよね。
それでは、char buf[3000];
という配列をsizeofで計測すると
3000が返ってきますよね?
このbufの中に例えば200バイトしか
入ってなかった場合、そのサイズを求めるには
strlen()を使用するものなのでしょうか?
スペースがbufの中に含まれているので
微妙です。
どなたか御教授お願いいたしますです。
0470デフォルトの名無しさんNGNG
>>467
違う。公開されている改造コードがそうなっていた。
PSはリトルなんだけど。
0471デフォルトの名無しさんNGNG
本来はビッゲンディアンの方が標準だろ?
インテル系は昔の奴の互換するためになってるんだろ?
昔は16bitだったし…
0472デフォルトの名無しさんNGNG
>>470
Linux持ってるけどリトルエンディアンだったよ>PS2
0473デフォルトの名無しさんNGNG
>>469
入れた覚えがなくても、なにかしら入っている。
文字列の長さを知りたかったらstrlen
0474デフォルトの名無しさんNGNG
PDP11がCの最初だからいいのでは?
ワードマシン?
0475 NGNG
BIAS かよ!
http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html
ありがとうマイクロソフト。
0476デフォルトの名無しさんNGNG
昔は何で逆になるんだよ!とリトルエンディアンをキモがってたんだが、
一般に使われてる数字の表記法に問題があるだけだと気づいてからは
今は同じ理由でビッグエンディアンがキモイ。

まぁ、普段はどっちだろうと気にしないんだけどな、
クロスプラットフォームのデータは意識的にどっちかにあわせないといけないからめんどいな。
0477デフォルトの名無しさんNGNG
>>476
お前がいなくても世間は動いているけどな。
0478デフォルトの名無しさんNGNG
>>476
はっきりいってお前は、親から世間を
教えてもらえなかったのがまずかったのかな。
普通の日本人は理解しているぜ。
0479 NGNG
CORBA とか COM とかなら
どっちかに決まってるんだったっけ?
0480デフォルトの名無しさんNGNG
ウチはミドルエンディアンやで。
0481448NGNG
volatileつけたらうまく動きました。
くだらないこと聞いてすみませんでした。。。
0482デフォルトの名無しさんNGNG
うちはナイスミドルエンディアンだが
0483デフォルトの名無しさんNGNG
1 little
2 little
3 little endian
0484デフォルトの名無しさんNGNG
ビッグエンディアン厨ウザイ
0485デフォルトの名無しさんNGNG
黙れRuby厨
0486デフォルトの名無しさんNGNG
Pearl>>>Ruby≧その他
0487デフォルトの名無しさんNGNG
>>479
決まってません。というか、どちらでも平気。
基本的に送信側が送ってきたバイトオーダーに従う。

そいやDCE RPCはPDPエンディアンの記述もあったな〜
0488デフォルトの名無しさんNGNG
>>486
真珠?
0489デフォルトの名無しさんNGNG
>>488
コイツ は パール を 知らねぃのか? プ
0490デフォルトの名無しさんNGNG
Perlはその他の中に入っているもよう
0491デフォルトの名無しさんNGNG
>>489
プ
0492デフォルトの名無しさんNGNG
真珠を買うお金もないのね。
0493デフォルトの名無しさんNGNG
真珠がなければるびぃを買えばよいのではなくって?
0494デフォルトの名無しさんNGNG
assertはリリース時には消す?NDEBUG定義してそのままにする?
0495デフォルトの名無しさんNGNG
>>494 VCの話?
0496デフォルトの名無しさんNGNG
Version Controlはあまり関係ない
0497デフォルトの名無しさんNGNG
#define printf(hoge)#define puts()

int main()
{
 printf("ぬる");
 puts("ぽん");
 return 0;
}

これでprintfとputsは中身まで含めてちゃんと消える?
どっちかダメ?
0498デフォルトの名無しさんNGNG
文字列を入力させる時に、バグの温床になりやすいscanfを使わず、
sscanfとfgetsでチェックしながら入力させる・・・・・・ということを聞き、
早速、

char str[20];
char buf[20];
for (i = 0; i < MAX; i++){
  while (1){
   fgets(buf, MAX, stdin);
     if (sscanf(buf, "%s", str) == 1);
       break;
   printf("もう一度入力して下さい。\n");
}

みたいな感じで実践してます。ここで疑問に思ったんですが、文字列だけでなく
数値を入力させる際にも気をつけておくべき「定石」みたいな方法があると思うんです。
こういったエラーを防ぐときに、みなさんが実務で使われている方法ってどんなものなんでしょうか?
上の改良すればいけるんじゃないかとは思ってるんですが・・・・
0499デフォルトの名無しさんNGNG
>>497
> #define printf(hoge)#define puts()
#define printf(hoge)
#define puts(hoge)

こうしないとエラーになる。
しかし、printf()は可変引数だから一般的にはこれだけじゃダメ
0500498NGNG
ちょっと追加です。
数値を入力する際の、型のサイズ越えとか、間違えて文字列を入力してまった、とか
そういう部分でのエラー検出方法ですね。
0501デフォルトの名無しさんNGNG
おれはぬるぽエンディアン
0502デフォルトの名無しさんNGNG
int? if(BOOL b);

if()の戻り値ってint型なの?
0503デフォルトの名無しさんNGNG
if*文*に戻り値などない
0504デフォルトの名無しさんNGNG
>>498
・fgets()の使い方が変。
fgets()用バッファとサイズを揃えるのが一般的。
なので、
char buf[20];
fgets(buf, sizeof(buf), stdin);
とするか、
#define TMP_BUF_LEN 20
fgets(buf, TMP_BUF_LEN, stdin);
などとする。
・全体のロジックは不明だけど少なくとも{}がアンマッチ。
0505デフォルトの名無しさんNGNG
JISAKU(char *buf, char *buf2){
char hoge;
sscan(buf,"%02x",buf2);
hoge = *(int *)buf2;
*str +=3;
}
上記のような関数があってmain側で呼び出す際に
char hogeを利用したのですが、いかようにすればよろしいの
でしょうか?初心な質問で申し訳ございませんが
御教授お願い致します。
0506デフォルトの名無しさんNGNG
return hoge;
0507デフォルトの名無しさんNGNG
>>499
#define printf
#define puts

引数に副作用が無いならコレで OK
0508デフォルトの名無しさんNGNG
hoge1.txt, hoge2.txt, ...
という複数のファイル編集を下のような方法で行っているのですが、
もっと標準的な方法はあるのでしょうか?

char filename[12];
for(int i=1;i<=MaxNumberOfFiles;i++){
sprintf(filename,"hoge%d.txt",i);
fp=fopen(filename,"w");
/* 編集 */
fclose(fp);
}
0509デフォルトの名無しさんNGNG
それ、漏れもマジにビビッタよ。
本当に凄い奴だと思った。
http://homepage3.nifty.com/digikei/ten.html
0510デフォルトの名無しさんNGNG
朝からくだらない質問でスイマセン。
main(){
int i,a[10]={35,67,28,19,83,98,71,58,5,90}
int max,min;
max=a[0]; min=a[0];
for(i=1;i<10;i++){
if(max<a[i]) max=a[i];
if(min>a[i]) min=a[i];
}}
このプログラムの中間コードと目的コードを教えて欲しいのです。
また、UNIXコマンドで生成できるのであればそのコマンドを
教えていただけませんでしょうか・・。m(__)m
0511デフォルトの名無しさんNGNG
>>508
標準的な方法は知らないが、すくなくともおれだったら
fopenからfcloseまでの部分を別の関数にまとめる。
0512デフォルトの名無しさんNGNG
>>510
質問の意味がよくわからない。中間コードとはなんだろう。
目的コードとは? UNIXコマンドで何を生成したいんだろう。

処理系がgccだとして、-save-tempsが求める答えなのかな。
0513デフォルトの名無しさんNGNG
>>510
cc -S
cc -c
0514デフォルトの名無しさんNGNG
>>512
ttp://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2002/1/lecture1.pdf
みたいなもの、らしいです(自分もよく理解してないっす)

>>513
サンクスです。
えと、 cc -Sが中間コードでcc -cが目的コードでしょうか?
googleで検索しても英文字のせいかうまく検索できないっす。。。。泣
0515デフォルトの名無しさんNGNG
>>514
AcrobatReader入っていないから読めないんだけど、なんて書いてある?
0516デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=cache:K0xJA_ZnwfkC:www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2002/1/lecture1.pdf+&hl=ja&ie=UTF-8&inlang=ja

中間コードの出力のしかたはわからないや。
0517510NGNG
>>515
こっちのほうがわかりやすいかも
ttp://www.hi.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/10th.html

プログラムのアセンブリコードを最適化したのが中間コード・・らしいです。
昨日からずーっと目的コードを調べてるのに一向に理解できない(TωT)

0518デフォルトの名無しさんNGNG
>>510
スレ違いじゃないか、とは思わないか?
コンパイラの本でも読めば?
0519デフォルトの名無しさんNGNG
>プログラムのアセンブリコードを最適化したのが中間コード
はぁ?
なんか、物凄く一般的でない話になってないか?
0520デフォルトの名無しさんNGNG
中間コードねえ。処理系によるけど構文木やPコードやバイトコードかね。
gcc の場合は gasm に落として最適化するから、
それが中間コードと言えなくもない。
0521デフォルトの名無しさんNGNG
>>520
gasmってなんでつか?
0522510NGNG
うーん 確かにスレ違いっぽいですね。報告です。

今、なんとか中間コードを生成するコマンドを発見しました。

gcc -S test.c でアセンブリコード生成
gcc -O2 -S test.c 最適化されたコード(中間コード?)を生成

egcsをインストしてようやくできました。
0523デフォルトの名無しさんNGNG
中間コード
 オブジェクトファイルやらアセンブラコード等
 Winなら *.obj *.s *.asm 等

目的コード
 ロードモジュール
 Winなら *.exe *.dll

↑なんじゃないの?
0524デフォルトの名無しさんNGNG
そういう用語ってまぎらわしいな
人によって呼び方が違ったり訳し方が違ったり・・・
objectには目的という意味がある
コンパイルで生成するobjファイルを目的ファイルと言ったりする
それをライブラリとかとリンクして実行ファイルにするから
objファイルは中間ファイルとも言うし中間コードとも呼ぶ

目的プログラムとも呼ぶのか・・・・
http://www.geocities.co.jp/SiliconValley-Oakland/4509/information/report_01/j025.html
0525デフォルトの名無しさんNGNG
いろいろなところで見かける
ASC2
ってなんのことですか?
0526デフォルトの名無しさんNGNG
>>525
> いろいろなところで見かける
ど こ だ ?
0527デフォルトの名無しさんNGNG
ASO�Uなら知ってるが
0528デフォルトの名無しさんNGNG
それは ASCII だ
0529デフォルトの名無しさんNGNG
>>522
おいおい…
>gcc -S test.c でアセンブリコード生成
>gcc -O2 -S test.c 最適化されたコード(中間コード?)を生成

-O2をつけると最適化はされるけど、吐き出すのはつけないとき同様アセンブリコードじゃないのか?
っていうか、それで違うものが吐き出されたら不気味だぞ。

>>521
gasmはアセンブラね。
上記-Sをつけたときに出力されたコードやプログラマが書いたコードをアセンブルするツールだ。
例外があることを承知で書けば、

cソース
↓cプリプロセッサ
↓パーサ
↓ジェネレータ
アセンブリコード
↓アセンブラ
オブジェクトモジュール
↓リンカ
ロードモジュール

って流れになる。
0530初心者(2日目)NGNG
ほんまに初歩的な質問です。
数字を表示するときに、1を01、というふうに2桁で表示されるには
どうしたらいいいんでしょうか? 10は10でいいんです。

教えてください。
0531初心者(2日目)NGNG
(誤)で表示される
(正)で表示させる
です。
0532デフォルトの名無しさんNGNG
>>530 printf
0533初心者(2日目)NGNG
>532 いや。。printfで、どのように。。。
小数点の桁合わせはWebページで見つけたんですが、
整数のほうがわからなくて。スミマセン
0534デフォルトの名無しさんNGNG
>>530 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
0535デフォルトの名無しさんNGNG
gcc -dr で中間言語をはく
0536デフォルトの名無しさんNGNG
Java仮想マシンをターゲットにできる
C Compilerにはどのようなものがありますか?
0537初心者(2日目)NGNG
>>534
ありがとうございます。読んでみます
0538デフォルトの名無しさんNGNG
>>536
.NET環境をターゲットにできるCコンパイラならあるけど?
Java仮想マシンをターゲットにするならC言語やめてJavaにするしかないでしょ。
0539デフォルトの名無しさんNGNG
上のほうにも似た質問があるんですが、標準入力から文字列を入力する際、
入力された文字列が配列の範囲を越えてしまった時に、警告を出した上で
もう一度入力させるにはどうすればいいでしょうか?

void main(void){

 int i, j;
 char str[5][20];
 char buf[20];

 for (i = 0; i < 5; i++){
  while (1){
   fflush(stdin);
   fgets(buf, sizeof(buf), stdin);
   if (sscanf(buf, "%s", str[i]) == 1)
    break;
   printf("もう一度入力して下さい。\n");
 }
}

今はこんな感じで作ってます。
空白だけを入れた場合の警告は出るようにしています。
しかし、配列の上限を越えた入力をチェックする方法が解からず、
しょうがないのでループの先頭でバッファに溜まった分を切り捨てるようにしています。
これを解決するスマートな方法ってないですかね。。。
0540デフォルトの名無しさんNGNG
>>539
そんな対話志向な設計、標準Cでできましたっけ?
0541デフォルトの名無しさんNGNG
>>539
bufを大きく取った上で、超えた分は捨てていいならfflush()は妥当じゃない?
私ならbufの最後に改行コードが入ってなければ読み捨てるようにするけど。
0542デフォルトの名無しさんNGNG
>>539
fflush()をstdinに対して実行した結果は、処理系依存です。
0543デフォルトの名無しさんNGNG
>>529
gasなら知ってるんだが…。
GASMってのもあるとは知らなかった。全然読めんが。
ttp://gasm.cjb.net/
0544デフォルトの名無しさんNGNG
int WAKARAN(char *str,char *str2){
int piyo;
char dmy[512];

printf(" str = %s\n", str);
sscanf(str, "%02x",piyo);
*str2 = piyo;
return 0;
}
main(int ac, char *av[]){
FILE *ifp,
char buf[512],tmp[512];
int x,res;
if ((ifp = fopen(av[1], "r")) == NULL);exit(1);
fgets(buf,512,ifp) !=NULL;
for( x=0; x < 16; x++){
res = WAKARAN(s,hoge);
if ( res != 0 ){
printf("Fmq_ipTRSF56:Error\n");
break;
}
DATA->usr[x] = *hoge;
*hoge +=3;
}
printf("usr = %s\n",DATA->usr);
こんなプログラムあるんですが、実行するとエラー(core)してしまいます。
構造体の存在は書ききれなかったので省略しています。
なぜウゴカナイのかご指導いただけると幸いです。お願い致します。
0545デフォルトの名無しさんNGNG
>>544
引数つけたか?
つければ即終了すると思うぞ。
0546デフォルトの名無しさんNGNG
>sscanf(str, "%02x",piyo);
間違い

>}
dmyが使われていない

>main(int ac, char *av[]){
戻り値の型がない

>if ((ifp = fopen(av[1], "r")) == NULL);exit(1);
パラメータがないときに異常終了しそう

>fgets(buf,512,ifp) !=NULL;
条件判断の結果が捨てられている

>res = WAKARAN(s,hoge);
sもhogeも宣言されていない

>DATA->usr[x] = *hoge;
DATAが宣言されていない

>printf("usr = %s\n",DATA->usr);
main()が終了してない
0547デフォルトの名無しさんNGNG
>>546
実行できているんだから文法エラーになるようなことは指摘するなよ。
0548544NGNG
みなさん、ありがとうございます。
虫食いしてみたところ
>>546さんのおっしゃる通り
sscanf()がぁtぃぃようです。。。
何がおかしいのでしょうか?
ご指摘頂けると幸いです。
お願いいたします。
0549デフォルトの名無しさんNGNG
>>548
それはscanfがして、だからだよ。
0550デフォルトの名無しさんNGNG
・書式の間違い
・引き数の間違い
0551デフォルトの名無しさんNGNG
関数の宣言についてですが、あれはソースを読みやすくするだけですか?
それとも何か動作に影響があるのでしょうか?
よろしくお願いします。
0552デフォルトの名無しさんNGNG
>>551
プロトタイプ宣言のことならコンパイル時の引数及び型チェックを厳密にするため。
0553デフォルトの名無しさんNGNG
天罰が下ります
0554デフォルトの名無しさんNGNG
>>551
宣言すると>>552の言うようにチェックを厳密にしてくれるだけでなく、
暗黙の型の格上げを行わなくなる場合もあるので要注意。
0555551NGNG
ありがとうございました。
普段は宣言しておいたほうがよさそうですね。
0556デフォルトの名無しさんNGNG
「プログラミングWindows第5版(上)」のP.53にこんな記述がありました。

配列が大域的であれば(つまり、関数の外で定義されていれば)、
文字列配列は次のような文で初期化できる。

char a[] = "Hello!";

この配列を関数の局所変数として定義する場合には、
次のようにstatic変数として定義しなければならない。

static char a[] = "Hello!";


なんでだー!!
関数が呼ばれるたびに、文字列が配列にコピーされるのを防ぐためですか?
でも、「定義しなければならない」って……。
0557デフォルトの名無しさんNGNG
http://www.st.rim.or.jp/~phinloda/cqa/cqa9.html
の最後のQAをみるといい。
0558デフォルトの名無しさんNGNG
>>556
つまり、過去の文章を引き摺っているわけやね。
0559556NGNG
>>557-558
あ、なるほど。納得しました。
ありがとうございました。
0560デフォルトの名無しさんNGNG
今C言語でプログラムを作っているのですが、
2次元配列のメモリを動的変数で確保するにはどうすればいいのですか?
調べたところ、for文を使って1次元配列みたいなものを繰り返し作成して
確保していたのですが、一般的にはどうするのですか?
よろしくお願いします。
0561デフォルトの名無しさんNGNG
>>560
このスレを読めばわかる。
0562デフォルトの名無しさんNGNG
char piyo[512]
こんな配列があって要素をひとつ
ずらしたい場合ってどうすればよろしいのでしょうか?
ポインタだったら、*p++って感じですよね?
それが配列の場合はどうなるんでしょう、、、
御教授お願いイタします。
0563デフォルトの名無しさんNGNG
>>562
memmove()
0564デフォルトの名無しさんNGNG
>>556-559
ジエン気味やな。
0565デフォルトの名無しさんNGNG
>>561
すいませでした。それとありがとうございました。
0566562NGNG
>>563さそ
ありがとうございます。
memmoveを使用する。。。
ワタシの想像で
for ( i=0; i <32; i++){
.....HOGE->mona[i] = piyo[i];
こんな感じを想像していたのですが
memmoveで実現できるのでしょうか?
0567デフォルトの名無しさんNGNG
>>562
char base[10000];
char *piyo = base + 5000;
0568デフォルトの名無しさんNGNG
なんでみんな適当な変数名に「hoge」ってつけるんだろう・・・。
ホゲってなんだ?
0569デフォルトの名無しさんNGNG
>>568
fooとかbarの日本語版だと思われ。
0570デフォルトの名無しさんNGNG
http://hoge.com/
0571デフォルトの名無しさんNGNG
適当な変数名
hoge
geko
ugo
だんだん苦しそうになっていく…
0572デフォルトの名無しさんNGNG
かれこれ5年ぐらい前からhoge使ってるやついた
0573デフォルトの名無しさんNGNG
>>566
> for ( i=0; i <32; i++){
> .....HOGE->mona[i] = piyo[i];
そういうのは要素をずらすとは言わないと思うが、いったい何をやりたい?
0574566NGNG
>>573サソ
31 32 33 34.....
こんなテキストファイルを読み込んで
sscanfで%02xでとり、構造体の配列に
ひとつづついれていきたいのです。。。
まじアタマから煙でそうっす。
御教授くだせぇぇぇ。。。
0575デフォルトの名無しさんNGNG
sscanf()のフォーマットに"%02x"は間違い。

1行に16進文字列が固定数入っているなら、寧ろstrtol()を使ったほうが楽かも。
0576デフォルトの名無しさんNGNG
Cで標準ライブラリだけを使って安全に文字列入力するにはどうしたらいいのでしょうか?
0577デフォルトの名無しさんNGNG
fread
0578デフォルトの名無しさんNGNG
getc 一択
0579デフォルトの名無しさんNGNG
>>578
fgetcを使わないでgetcを使うことのメリットは?
0580デフォルトの名無しさんNGNG
>>579
君はその2つの違いを理解しているのかね?
0581デフォルトの名無しさんNGNG
gets 以外は
正しく使えば安全だよ
0582デフォルトの名無しさんNGNG
>>580
getcはマクロかもしれないってだけじゃないの?
0583デフォルトの名無しさんNGNG
#define getc fgetc
#define putc fputc
0584デフォルトの名無しさんNGNG
漏れはC言語が好きだが、
貧乳の方がもっと好きだ。
0585デフォルトの名無しさんNGNG
漏れはC言語が嫌いだが、
貧乳の方がもっと嫌いだ。
0586デフォルトの名無しさんNGNG
Ruby≧貧乳>>>Pearl>C>>>巨乳
0587デフォルトの名無しさんNGNG
>>576
そんなことやめとき。しんどいだけや。
0588574NGNG
>>575サソ
ご指摘ありが�dございますた!

ボキも貧乳好きだ。
0589デフォルトの名無しさんNGNG
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/kaorin/
0590デフォルトの名無しさんNGNG
実数の加減算を行うプログラムを作れ。
例123.45+67.89=191.34
ただし入力には、getchar()を使い、char型として1文字ずつ受け取る。
解釈できない文字が含まれた場合、それが入力された時点でそこまでの計算するものとする。
できなければエラーを表示して打ち切りでもよい。冒頭の0をゆるしてもよい。
scanfやatoi関数など既存の関数は使わないこと。

意味不明、焼肉定職
0591デフォルトの名無しさんNGNG
>>590
出題者に何でそんな無意味な制限を付けるのですかって文句を言えば良い。
0592デフォルトの名無しさんNGNG
kprintfって標準?
0593デフォルトの名無しさんNGNG
なんじゃそれ?
0594デフォルトの名無しさんNGNG
k = kernel
0595デフォルトの名無しさんNGNG
>>591
無意味じゃないだろ。
学習段階なら、atoi()などのライブラリ関数がどうやって
文字列から数値に変換しているかを一度は自分で試すべき。
0596デフォルトの名無しさんNGNG
>>590
宿題マル投げなら、専用のスレあるから。
そっち逝け。
0597 NGNG
argv を main 以外の場所で取得できる?
もしできるなら方法を教えてください。
0598デフォルトの名無しさんNGNG
char hoge[128];
この配列を
switch(なんでもいい){
case A:
for ( i=0; i <16; i++){
 hoge[15]までなんらかの処理}
その次に同じように
case B:
for ( i =0; i <16; i++){
hoge[16]からhoge[31];まで処理する}

こんな風にしたいんですが
case Bのfor文の記述がわかりません。
case Aではhoge[0]からhoge[15]
case Bではhoge[16]からhoge[31]という仕様にしたいと思っています。
ベタで書くことができないので、ウマイ処理がございましたら
御教授頂きたいです。おながいします。
0599デフォルトの名無しさんNGNG
>>597
argvをどっかに保存しる。
0600デフォルトの名無しさんNGNG
>>597
VC++なら__argvで。
_argvじゃないよ。
二個ね
0601デフォルトの名無しさんNGNG
☆★暇な人!荒らしがやりたい人!ここへ逝こう!ってか逝って。★☆
管理人がクソ厨なブタ野郎だからいじり倒してサイトを閉鎖させちゃえ!
閉鎖できた人は「荒らし王」の称号が手に入る!さぁ!荒らせ!!!!!

http://www.geocities.co.jp/Bookend/6473/
0602デフォルトの名無しさんNGNG
>>595
floatだのdoubleだのに直すのに標準ライブラリの
力を借りないと思いっきり移植性が…とか一瞬思ったんだが、
べつにそんなの使わなくても計算できることに気づいた。
いい問題かも、これ。
0603デフォルトの名無しさんNGNG
>>599 >>600
thx


>>599
argv をどっかに保存って、グローバル以外に良い方法はありますか?
0604デフォルトの名無しさんNGNG
シングルトンクラスがあるじゃないか
0605デフォルトの名無しさんNGNG
数値の前を0で埋めたいのだが、その桁数を変える方法ってわかりますか?
具体的には、
char hoge[10];
int i;
sprintf(hoge, "%03d", i);
みたいなので、「3」を場合によっては4とか5とかにしたいのですが。。。

0606デフォルトの名無しさんNGNG
シングルトンクラス?
0607デフォルトの名無しさんNGNG
>>598
for (i = 16; i <= 31; i++) {
 処理(hoge[i]);
}
か
for (i = 0; i < 16; i++) {
 処理(hoge[i + 16]);
}
じゃダメなの?

>>603
グローバルに持たずにパラメータで渡せないの?
ex.)
void 下請け(char **argv);

int main(int argc, char **argv)
{
 下請け(argv);
}

void 下請け(char **argv)
{
}
0608デフォルトの名無しさんNGNG
>>605
sprintf()のマニュアルをよく読もう。

sprintf(hoge, "%0*d", len, val);
0609デフォルトの名無しさんNGNG
2次元配列から片方の配列のみを取り出す方法ってありますか?
つまり、配列 a[i][j] のjの部分のみを取り出したいんです。
また、その逆も行いたいんですがわかる方いたら教えていただけないでしょうか
0610デフォルトの名無しさんNGNG
>>605
char format[] = "%03d";
format[2] = digit - '0';
sprintf(hoge, format, i);
0611610NGNG
>>608
ネタより先に正しい答えを出しちゃイヤン
0612605NGNG
>>608
ありがとうございます。
0613デフォルトの名無しさんNGNG

int n = 6, m = 2;
char format[10];
char hoge[10];

sprintf( format, "%%0%dd", n );
sprintf( hoge, format, m );

0614デフォルトの名無しさんNGNG
>>609
二次元配列の片方って考え方が既に間違っている。
よく判っていないなら、配列の要素を一つずつコピーすべし。

>>611=610
ごめん。たまたまリロードしたら見えたんで。

>>613
以下同文。
0615デフォルトの名無しさんNGNG
>>603
typedef struct {
 int argc;
 char ** argv;
} MAINARG;

MAINARG * get_mainarg() {
 static MAINARG arg;
 return &arg;
}

/* これをmainで呼ぶ */
void init_mainarg(int argc, char ** argv) {
  MAINARG * arg = get_mainarg();
  arg->argc = argc;
  arg->argv = argv;
}

・・・素直にグローバルに置いた方が良いと思ふ。
0616デフォルトの名無しさんNGNG
だからwindows.hをインクルードすればはじめから __argv がグローバルにあるってば。
0617デフォルトの名無しさんNGNG
Win厨は消えてくれい
0618デフォルトの名無しさんNGNG
stdlib.hっしょ?
0619デフォルトの名無しさんNGNG
何でargvがグローバルだと嫌なの?
グローバルで確保しても良い(問題無い)変数の1つだと思うけど?
0620598NGNG
>>607サソ
アリガ�dであります。
char hoge[128]にどこまで入っているかは
わからない状態なんです。仕様記載漏れすみません。
んーどうしたもんなんでしょう、、、
0621デフォルトの名無しさんNGNG
>>620
訳が分からない
もっと分かり易く説明汁
0622デフォルトの名無しさんNGNG
x-0.2xからx+0.2x(xはfloat型の変数)までの範囲の乱数を
発生させる場合どうかけばいいのでしょうか?
例えばx=0.0000100なら0.0000080から0.0000120までの乱数です。
0623デフォルトの名無しさんNGNG
((0から0.4の乱数)+0.8)*xじゃだめなの?
0624622NGNG
>>623
ransu=(((float)rand%5*0.1)+0.8)*x
こんな感じでしょうか?間違ってたら訂正おねがいします・・・
0625622NGNG
ransu=((float)rand()/RAND_MAX*0.4+0.8)*x;
でできました!スレ汚しすいませんです・・・
0626デフォルトの名無しさんNGNG
標準じゃないが
get_commandline()
とかそんなのが大概用意されてるだろ?
それ使えよ。
どうせ(略)クソコードだろ
0627†♥NGNG
gcc-cygwinを最近つかいはじめた初心者です
疑問に思ったんですがそもそもコンパイラってDOSとかUnixと
ペアで出来てる物なんですか?
それともcygwinだけですか?
0628デフォルトの名無しさんNGNG
>>627
Cコンパイラ=C言語ソースプログラムを機械語へ翻訳する機械
歴史的にCコンパイラはunixという土壌でOSと共に発展してきた
経緯で強い影響を受けてはいるが、一般的にコンパイラと
OSには”ペアで出来ている”という関係はない。
世の中にはOSがないマイコン向けCコンパイラも、コンパイラの
動作OSとは違うマシンで動くコードを生成するコンパイラだってある。
0629628NGNG
書いてみたけど読めば読むほど>>627の意図がよくわからん。
見当違いっぽいな。すまそ。
0630†♥NGNG
>>628
ありがとうございます
ずうずうしくもう壱つ質問
catとかlsとかのコマンドは
一般的に何をみなさん使ってるんですかね?
やっぱDOSが多い…ですか?
0631デフォルトの名無しさんNGNG
>>630
いわれたことを全く理解してない香具師ハケーン
0632デフォルトの名無しさんNGNG
>>628
確かにコンパイラを作成する理論はOSとは独立だけど、
C言語の場合、Unixの開発ときっても切り離せない関係にあるのでは?
C言語でUnixを書き、そのUnixの上でC言語コンパイラとその改良
を行って、そのC言語で再び改良されたUnixを書く。この繰り返しが
初期のUnixの開発では良く行われた。
逆に言えば初期の言語がアセンブラ並にプリミティブじゃなきゃ
そのコンパイラを動かしてくれるOSなんて皆無だったし、コンパイラが
ある程度OSの機能を代替できなければ実装不能な机上のものだった。
コンパイラがOSと独立するようになったのは、もうコンパイラそのもの
の開発よりも、OSの洗練、アプリケーション管理とかライブラリ管理とか
が重要になった1970年代後半以降の話でしょう。
0633デフォルトの名無しさんNGNG
一般的に、と断った上で書いているようだが、さて
0634デフォルトの名無しさんNGNG
あるマシンで別のマシンのソフトの開発を行うことを
「クロス開発」といいます

cat,lsはUNIXのコマンド
dirはdos、UNIX両方にあるようですね。

Cygwinということは、WINDOW用のソフトですよね。
ゲームですか?
0635†♥NGNG
>>631〜>>634

テキスト系エディタ
↓
ソースプログラム
  ↓
コンパイル
  ↓
実行形式
  ↓
  実行
この流れを
みなさんDOSを使って
やっているのかな?って思ったんですよ
それともなんですか?音声認識でやってるんですか?
実はマウス使うのがやっととか?
Unixとの関係が上がってますがそんなのCの参考書の
(はじめに)の所に書いてあってわかってます
…って言うか誰も聞いとらん

0636デフォルトの名無しさんNGNG
>>635
お前の質問のレベルがその程度ってことだよ
0637デフォルトの名無しさんNGNG
>>635
難しく考えすぎ
>>全
初心者にしては話がわかるな…
と思ったのは俺だけか?この初心者のレス開始から順に読んで
行けばわかりそうだけどな
0638デフォルトの名無しさんNGNG
若Verに
カキミダサレださださ
0639デフォルトの名無しさんNGNG
>>635
もしかしてコマンドプロンプトのことをDOSと勘違いしている馬鹿?
0640デフォルトの名無しさんNGNG
>>635
とりあえず意味は分かるけど「DOS」というと普通はMSDOSを
指すんで紛らわしいから使わんほうがいいと思われ。
実際には「コマンドプロンプト」とか「コンソール」のつもりで
云ってるんだよね?
コンパイラ、リンカをどのように実行させるかは人による。
例えばVC++のような統合開発環境ではエディタ、コンパイラ、リンカ、
デバッガなどは全てGUIの統合開発環境上で実行できるので、そもそも
コンパイルのフェーズを意識する必要もあまりないが、別にcl.exeやlink.exe、
nmake.exeを直截実行しても構わないし、ソースコードは単なる
テキストファイルに過ぎないのだから、どのようなテキストエディタ
を用いても構わない。それどころか
C:\> type con >test.c
のような方法であってもさしあたりは構わない。
ただしnotepad.exeはファイル名の拡張子の
付け方について多少おせっかいなところがあるので止めた方がよい。
0641デフォルトの名無しさんNGNG
>>635
よくわからんが士ね。といいたくなった。
0642デフォルトの名無しさんNGNG
みなさんDOSを使って
みなさんDOSを使って
みなさんDOSを使って
みなさんDOSを使って
0643†♥NGNG
>>639
ありえない
プログラム初心者=バカ 違う
>>640
ありがとうございます
Visual C++6.0SPは持ってるんでけどね
>全員
でも一つ分った事はプログラムが出来ないだけでみなさん
ものすごく卑下するんですね
感じ悪
(結果>cygwin は Unix コマンドだと何かと簡単だからと一言欲しかった)
0644デフォルトの名無しさんNGNG
>>643
なにが「ありえない」だか
ではどういう意図で「DOS」と書いたのか説明してみろ

それと「卑下」する、とは自分を低く扱う事
0645デフォルトの名無しさんNGNG
>>635の
> それともなんですか?
以降のほうが感じ悪。

0646デフォルトの名無しさんNGNG
>>644
Windowが立ち上がる前のDOSで一連の流れを実行する事は可能
又低水準であるがゆえWindousをおっぴろげ無い方がより効率的に
処理速度をかせげるから?と言いたいんじゃないの?
卑下はヒゲって意味で言ったんじゃないの?
0647デフォルトの名無しさんNGNG
Cで質問なんですが、
->
ってどういう処理なんでしょうか?

img1->data = (char *)pdata1;

という処理で使われていて、
img1はX-windowのXImage

pdata1は

pdata1 = (unsigned short*)mmap(0, X_SIZE*Y_SIZE*2, PROT_READ|PROT_WRITE
, MAP_SHARED, *video, 0);

こんなかんじで処理されています。
0648デフォルトの名無しさんNGNG
逝っちゃったよ多分…>>643
0649デフォルトの名無しさんNGNG
>>647
マニュアル嫁、構造体や共用体のポインタからメンバを選択する演算子
0650デフォルトの名無しさんNGNG
char** get(){
   char *a[] = { "age", "sage" };
   return a;
}
ってなことやりたいんだけど、これだとローカルのアドレスだから
static char *a[] = { "age", "sage" };
でOKなんだけど、実際はリテラルじゃない文字列の配列なので、
可変長の文字列の可変長の配列を作って返したいんですけど、
こういう場合ってどうしてます??
mallocの場合はどっかで開放が必要なんですよね。
0651デフォルトの名無しさんNGNG
>>650
別にmalloc使えばいいべ。freeを忘れなければよいし、すぐに終了する類の
プログラムであって、mallocの量がそれほどでもない場合は一切freeしない
という手も有る。
Bohem GCのようなGCライブラリ使うってのも手だが、それぐらいなら
C++使っちゃったほうがいいよな。。。
0652デフォルトの名無しさんNGNG
>>650
> 可変長の文字列の可変長の配列を作って返したい
どれがいいと思う?
・C++を使う。
・mallocを使う。
・C++のStirng, Vectorを真似て実装する。
0653デフォルトの名無しさんNGNG
strlen()でスペースと"#"を無視して
レングスを測りたいんすけど、
いかようにすればよろしいでしょうか?
ごきょうじゅお願いします。
0654デフォルトの名無しさんNGNG
>>653
> strlen()でスペースと"#"を無視して
strlen()じゃできないと思うが、全部無視したいのか?

> レングスを測りたいんすけど、
ところでなんでカタカナ?
0655デフォルトの名無しさんNGNG
>>653
spaceと#を取った文字列作るか、
その長さからspaceと#の数引けばいいんじゃない
0656デフォルトの名無しさんNGNG
レスありが�d
strlen()じゃできないっすかー。
どんなもの使うべきでしょうか?

カタカナに特にいみはないっす。
0657デフォルトの名無しさんNGNG
自分で関数書く
0658デフォルトの名無しさんNGNG
誰か2バイト文字の検索系詳しい人居る?
OpenNap-NGのsearch.cを2byte文字に対応させたいのだけど・・・
さっぱり・・・


http://220.37.152.5/opennap-ng-0.46.tar.bz2
一応ソースね
0659デフォルトの名無しさんNGNG
例えば、『あああ』というキーワードで『あああいいうえ』をヒットさせたいのですが・・
トークン1つ1つ切るしかないのでしょうかね?

わかる人書いてくれるとうれしいです。
0660デフォルトの名無しさんNGNG
strstr()で何か問題が?
0661デフォルトの名無しさんNGNG
ワイド文字で処理する
0662デフォルトの名無しさんNGNG
>>660
素朴なstrstr()ではいわゆる「Overlap」の問題が起きる。
1) マルチバイト文字の片割れと別の文字がマッチしてしまう
2) マルチバイト文字が二つ並んでいる状態で、1文字目の2バイト目と
2文字目の1バイト目の並びに別の文字がマッチしてしまう
UTF-8は1)2)が発生しないように設計されている。SJISやEUC-JP
では発生する。
>>658
別に詳しくは無いが...
見たところ素朴なcharのインクリメントやtolower()のようなものを
使っているようだが、通常そういう箇所は軒並み書き換える必要が有る。
エンコーディング方式がわからんが、内部コードをUTF-8にすることが
可能なら、↑に挙げた理由により、多少は楽になるよ。UTF-8であれば、
文字列中の任意のバイトについて、
・マルチバイト文字の片割れかどうかを判定する
・それがマルチバイト文字の先頭バイトか後続バイトかを判定する
・「前の文字」に移動する
・「次の文字」に移動する
といったことが極めて容易にできる。逆に、これらの道具(材料)があれば、
何をすればいいかは分かるだろう。
無論、ワイド文字を使えるのなら、その方が楽だが。
0663デフォルトの名無しさんNGNG
マルチバイト文字をマルチバイト文字で検索するのであればバッティングすることはない
よって余計なことを考える必要はない
0664デフォルトの名無しさんNGNG
EUCだとバッティングする
0665デフォルトの名無しさんNGNG
なぁ、なんで引数をとらない関数の宣言or定義で
func(void)
と書かずに
func()
と書くの?
0666デフォルトの名無しさんNGNG
昔からの書き方
0667デフォルトの名無しさんNGNG
C言語からプログラミング始めてるんだけどCの本以外にアルゴリズムの本も必要ですか?
必要なら評調べて買うんで
0668デフォルトの名無しさんNGNG
何でCから始めるのかその理由を聞きたい。
0669デフォルトの名無しさんNGNG
CスレでCから始める奴を質問する理由を聞きたい。
0670デフォルトの名無しさんNGNG
Cは避けて通れないって本にかいてありました
0671デフォルトの名無しさんNGNG
アルゴリズムは文法みたいな物でCの本は単語みたいな物って書いてあったので
必要なのかなって
0672デフォルトの名無しさんNGNG
>>653
size_t strlen(const char *s)
{
  size_t cnt = 0;
  for(;*s != '\0'; s++)
    if(*s != ' ' && *s != '#')
      cnt++;
  retrun cnt;
}
0673デフォルトの名無しさんNGNG
>>671
用もないのに読んでも実際使う頃には忘れてる
とりあえずどんなアルゴリズムがあるか
名前と概要だけ知ってればいい
0674デフォルトの名無しさんNGNG
reallocでアドレスが変わった場合も、中身はコピペされるんだよね?
0675デフォルトの名無しさんNGNG
うん。だから何?
0676デフォルトの名無しさんNGNG
される
0677デフォルトの名無しさんNGNG
>>675
死ね
0678デフォルトの名無しさんNGNG
>>671
http://www.cs.u-gakugei.ac.jp/~miyadera/LECTURE/algo2/program.html
0679665NGNG
>>666
標準委員会的にはどうなのよ。
int func(...)
を
func(...)
って書くのと同じくらいスッキリしないんだけど。

それとも、JAVAやC++のクラスメソッドでいうところの
暗黙の*thisの存在故にvoidとは書かない、てのが
Cでも何となく習慣化してるということ?
0680デフォルトの名無しさんNGNG
>>673
>>678
わかったサンクス
とりあえず本買わないでHPで学習してくるよ
0681デフォルトの名無しさんNGNG
Cでは
func()
と
func(void)
は意味が違うくないか?
0682デフォルトの名無しさんNGNG
>>681
プロトタイプ宣言ではな。
0683デフォルトの名無しさんNGNG
ある値より大きくて一番近い2のべき乗を返してくれる標準関数みたいなのありますか?
0684デフォルトの名無しさんNGNG
>>683
そんな使い道のなさそうな関数が標準関数にあるわけないだろ。
自分でかけ
0685デフォルトの名無しさんNGNG
知らない
0686デフォルトの名無しさんNGNG
あ、C言語ってべき乗も無かったんだけ。めんどう。
pascalなら ^ だYO!
0687デフォルトの名無しさんNGNG
じゃ、GNUなんかでべき乗なんかが入ってるソース希望。
0688デフォルトの名無しさんNGNG
>>686
べき乗ならpow()
0689デフォルトの名無しさんNGNG
powはpowerのことだけど、読み方はポウだよね。
0690デフォルトの名無しさんNGNG
powってdoubleっしょ。
組み込みにはきついな。
0691デフォルトの名無しさんNGNG
自分で ipow でも作れ
師ね
0692デフォルトの名無しさんNGNG
>>691
なんでlpowじゃないんだよ。
しね
0693デフォルトの名無しさんNGNG
>>692
int で十分だろうが
SHINE
0694デフォルトの名無しさんNGNG
VB挫折したのでCに戻ってきました・・・・
またよろしくお願いします。
0695デフォルトの名無しさんNGNG
>>687
整数の(オーバーフローを無視した)べき乗なら、書くのは簡単だろ。
K&Rにも乗ってるが
int power(int base, int n)
{
  int res = 1;
  while (n-- > 0)
    res *= base;
  return res;
}

0696692NGNG
>>695
K&Rもintかよ(激怒)
0697デフォルトの名無しさんNGNG
695のようなやつで、オーバーフローの把握が出来るものがあったらな...
0698665NGNG
static const unsigned short Pow[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
// assume 16bit short

そんなことよりvoid引数の見解を述べてくれよ。
0699デフォルトの名無しさんNGNG
Cだけでオーバーフロウの検出ってどうやるの?
前回の結果よりも小さかったらオーバーフロウとか?
0700デフォルトの名無しさんNGNG
>>698
ANSI C以前はvoidがなかったから。
終了。
0701デフォルトの名無しさんNGNG
>>697
正確にはunsignedにするだけでオーバーフローは発生しないことになるが
多分そういうことを云いたいんじゃないよな。
多倍長計算ができるライブラリでも使ってみたら?
0702デフォルトの名無しさんNGNG
strtolはきちんとオーバーフローを発見するよね(^o^)
0703デフォルトの名無しさんNGNG
>>701
突然負の値になったりはしないけど、桁落ちはするからオーバーフローするっていわない??
オーバーフローってそういうものじゃないとか?
0704デフォルトの名無しさんNGNG
>>665
プロトタイプ宣言がANSIで導入された機能であることは知ってるんだよな。
K&R流の書き方では

定義:
double func(a, b)
 int a;
 double b;
{
  :
}
宣言:
double func();

となるが、宣言が無い場合は戻り値はintと仮定されるから
intを戻す関数の宣言は省略可能で、事実省略されることが多かった。
ANSIの規格でK&R風の書き方を許しているのは単なる妥協の産物だろ。

ANSI Cで仮引数リストが書かれていない場合は、引数が空という意味ではなく
"引数は、なんでもよい(K&R風宣言と見なし、チェックしない)"
という意味だから、voidと同じではない。そういう意味ではANSI C
のプロトタイプ宣言の機能を利用するなら、voidは省略するべきではない。
0705デフォルトの名無しさんNGNG
>>703
本来は
>突然負の値になったり
することを云う。K&Rあたりにはunsigned演算ではオーバーフローは
発生しないとちゃんと書いて有るから、持ってるなら読んでみ。
機械のレベルではキャリーフラグが立ったりする訳で
asmならチェックするのも簡単だが、Cでは簡単・高速・移植性のたかい
方法でチェックする方法は存在しないだろう。
0706デフォルトの名無しさんNGNG
>>705
おーそうなのか。サンクス。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtoul.3.html
このstrtoulの説明でも範囲外と言っているだけで、オーバーフローとは言っていないな。
0707デフォルトの名無しさんNGNG
ダビスタ製作してるのですが馬生産部分のアルゴリズムを
どうしていいか解りません。いい方法ありませんか?
0708665NGNG
>>704
サンクス。

ok、要するにC++(のメンバ関数)で仮引数リストを空のままにすることとは
意味が違うということだな。
これまで、Cのソースではvoid指定してきたから安心できたよ。

スレ違いだが、C++の場合はどうなのよ。
>>679に書いた理由でvoid指定しないのがスタンダードなの?
それともみんな単に省略してるだけ?
0709デフォルトの名無しさんNGNG
プロ言C++に書いてないのか
0710デフォルトの名無しさんNGNG
禿はそんな細かいことまで書かない
0711デフォルトの名無しさんNGNG
>>708
C++ではK&R風の宣言は許していないし、引数リストを省略した場合の意味は
voidと同じになる。この点はC++とANSI Cの異なるところで、
引数リストを(K&R風の意味で)省略したCのソースをC++から使う場合は
注意が必要。
0712665NGNG
>>709
書いてない。

EC++, More EC++, Accelerated C++, その他の教本も当たり前のように
func()
だ。プライマーは見てない。

唯一のヒントは、虎本の
「引数を取らないメソッドは、voidを付けずに空の括弧だけで宣言するという点で、
 JavaとCとは異なります(C++とは似ています)。」
という一節だが、理由までは言及していない。

じゃぁstaticメンバ関数とかグローバル関数はvoid付けるのかというと、
C++3版でも当たり前のように空括弧だ。
0713デフォルトの名無しさんNGNG
C++ではfunc() = func(void)
動的メンバも静的メンバもネームスペースレベルの関数も同じ
thisは関係無いと思うが
0714デフォルトの名無しさんNGNG
C++で()か(void)は趣味の問題程度
あるいは、もしコーディング規約があるなら従うくらい
0715665NGNG
>>713
>>714
わかった。
大衆に迎合して、今まで通り空括弧でいくよ。

しかしint戻り値の省略の廃止やプロトタイプ宣言の厳格化など厳しくなったC++で
なんでこの点だけアバウトのままにしたかね。
パラメータ宣言の省略は禁止にすればよかったのに。互換性の問題か?
0716658NGNG
レスくれた方サンクス

非常に参考になりました。
ただ、自分にコードが書けるかどうか・・・(汗

とりあえず、今からぼちぼちやっていきます。
0717デフォルトの名無しさんNGNG
>>715
引数がないんだから、何も書かないのは当然。
にもかかわらず、引数に void が書けるのは C との互換性のため。
0718デフォルトの名無しさんNGNG
>>715
引数がないんだから、何も書かないのは当然。
にもかかわらず、引数に void が書けるのは日下部陽一のファンだから。
0719デフォルトの名無しさんNGNG
デコンストラクタのような元々引数を渡せない関数の場合は空括弧にして、
普通に引数は渡せるけど使わないときは(void)にしてる。
0720デフォルトの名無しさんNGNG
>>719
いい事を教えてやろう。
食パンににんにくを擦り付けてトーストにし、オリーブオイルを塗って醤油
をちょっとかけて食べると、うまい。

ところでデコンストラクタって何?
0721プログラムってなんじゃ(゚Д゚)ゴルァNGNG
プログラム書いてる友人にC言語やりたいんだけどと、話したら
「( ゚Д゚)ハァ?、初心者はVisual Basicしとけ」といわれました。
プログラムについて何にも知らない香具師が
C言語にチャレンジするのは無謀なんでしょうか・・・
スレ違いだったら吸いません
0722デフォルトの名無しさんNGNG
>>721
( ゚Д゚)ハァ?と言い返しておきましょう。ていうか折れCしか知らんし。
0723デフォルトの名無しさんNGNG
>>721
Javaにしとけば?とCスレで言ってみるテスト。
0724デフォルトの名無しさんNGNG
>>723
死ね 糞言語薦めるな

>>721
Rubyがいいよ
0725デフォルトの名無しさんNGNG
ANSIでCの規格を策定する際、過去との互換性のためにかなり議論したそうじゃない。
リッチーもこんなに広く使われると予想したならば最初からもうちょっとましな仕様にしたのかな。
0726デフォルトの名無しさんNGNG
>>725
C++は過去との互換性を多少犠牲にして論理性を向上しているね。
でも元がCだけに文法的に相当無理をしていると感じられる部分が
たくさんあり、C++はとても文法が汚くなってしまったのではないか。

C99はCのマイナーチェンジだよね。根本的には何も変わっていない。
0727デフォルトの名無しさんNGNG
初心者にお勧めする言語
Scheme, Ruby, Python, Java

日本でコミュニティが一番大きいのはRubyかなあ…
別に上に挙げたのでなくてもいいけど、
きっちり使えるようになったら別の言語に手を染めてみるべし。
二番目に手を出すならCがお勧め。

Lisp系は一度やっとくといいと思うよ。
0728デフォルトの名無しさんNGNG
Lispは基本教養だからな
0729デフォルトの名無しさんNGNG
Cはunix系の鯖借りたりアカウント取ったとき便利だよ
Cならデフォルトで使えると思っていい
Cが使えないのは例外的な場合

マイナーな言語はインストールされてないんじゃないの?
root権限なくてインストールできなくて使えない
使えない言語覚えてもしょうがない

Lispは基本教養なの?
Unixの入門書じゃ見かけないよ
0730デフォルトの名無しさんNGNG
プログラマとしての教養
0731デフォルトの名無しさんNGNG
教養ですか
パソコンスクールとか英会話学校とか資格試験とか
そういうのが好きならいいかもね
0732デフォルトの名無しさんNGNG
Lispなんざイラネ、emacs使いたきゃ覚えてろ
0733デフォルトの名無しさんNGNG
初心者君ですみませんが
printf()等で
%*s等の記述に用いられる
*は何を意味するのでしょうか?
0734デフォルトの名無しさんNGNG
>>733
検索すれば初心者脱出できますよ!
0735デフォルトの名無しさんNGNG
>>732
教養のない香具師
0736デフォルトの名無しさんNGNG
電脳クラブみたいな問題だしてるサイト、本、メルマガしらない?
0737デフォルトの名無しさんNGNG
>>733
マニュアル読もうよ。
一つだけ注意点。
一部の初心者向けの本で、
printf()系のフォーマットとscanf()系のフォーマットは「同じ」と
嘘を書いてある場合があるので要注意。
#そんな本なら捨ててしまえ。
0738デフォルトの名無しさんNGNG
>>733
iomanipのsetw()と似ている
0739デフォルトの名無しさんNGNG
教えて下さい。
・サブネットアドレス(1〜32)を数値(例えば24なら0xFFFFFF00)に変換するような
効率の良いコーディング方法はありますか?
・あと、ある文字列に対し、ビット誤り率が与えられて(例えば0.008)文字列を
ビット誤り(ランダム、バーストどっちでも良い)させてくれる効率の良い
方法はありますか?

二つもあつかましいですが、よろしくお願いします。
0740デフォルトの名無しさんNGNG
>>739
#define SUBNET(bit) (unsigned int)(((int)0x80000000)>>(bit-1))
こんなんでどうだ?
一応、漏れの書き方は処理系依存だと思うが。

後者はパス。酔ってっから。
0741739NGNG
>>740
ありがとうございます。
しかしこの方法では、例えばbit=2なら0x40000000となるんじゃないでしょうか??
0742740NGNG
>>741
処理系は?
一応gcc3.1(PPC)では、bit=2の時、0xc0000000になるよ。
その為に(int)して符号付きにしてっから。
0743740NGNG
って、答えを待たずに寝るんだけどね。

皆様、良い仮眠を。
0744739NGNG
>>740
あっ、gccっす。
私も明日試してみます。
おやすみなさい。。
0745デフォルトの名無しさんNGNG
#define SUBNET(bit) (0xFFFFFFFF&~(~0ul<<(32-(bit))))
0746デフォルトの名無しさんNGNG
#define SUBNET(bit) (0xFFFFFFFF&~(~0ul<<(( ;゚Д゚)))))) ガクガクブルブル
0747デフォルトの名無しさんNGNG
>>739
#define SUBNET(bit) (0xFFFFFFFF^(((unsigned)0xFFFFFFFF)>>bit))
0748デフォルトの名無しさんNGNG
sizeof(int)==32ならば、、、
#define SUBNET(bit) (((unsigned)~0)<<(32-(bit)))
0749デフォルトの名無しさんNGNG
>>748
256bitマシン(・∀・)イイ!!
0750デフォルトの名無しさんNGNG
>>749
あるの?
>>745とかぶったな・・・マスクして下位32bitを取り出せばいいのか。
0751デフォルトの名無しさんNGNG
>>745
なんで結果を反転させているの??
0752デフォルトの名無しさんNGNG
>>749
256bit以上で256とは限らないけど(・∀・)イイ!!
>>748==750
>>749は
(sizeof(int)==4&&CHAR_BIT==8)の間違いに対する突っ込み
0753748NGNG
おいおい、指摘されるまで気づかなかったぞ(恥恥恥
なにがsizeof(int)==32だ
(sizeof(int)*CHAR_BIT)==32だろ

>>749>>752
サンクス
0754デフォルトの名無しさんNGNG
islowerは大抵マクロだけど、tolowerは関数なのか。
0755721NGNG
遅くなりましたが、レスして頂いた方々ありがとうございました。
非常に勉強になりました。皆さんのレスを参考に勉強してみようと思います。
皆さんのような初心者に助言出来る漢に早くなりたいです。
恥ずいので、sage(´Д`;)
0756デフォルトの名無しさんNGNG
サブネットアドレスで、/2なんてみたことねー
0757デフォルトの名無しさんNGNG
typedef struct HOGE hoge;

struct HOGE{
 int n;
 char buff[INT_MAX];
};

この順番でもいいの?
未定義の識別子とかエラーにならない?
0758デフォルトの名無しさんNGNG
FreeBSEとNetBSEではどちらがオススメですか?
0759デフォルトの名無しさんNGNG
私メル友がすっごくすっごく欲しくってー、\(⌒∇⌒)/
探してたら(◎_◎)なんとっ!☆彡(ノ^^)ノ☆彡ヘ(^^ヘ)☆彡(ノ^^)ノ☆彡
素敵な掲示板♪を発見!!!!(^o^)//""" パチパチパチ
あやしい所とか…{{ (>_<;) }} ブルブルすごい数の掲示板がありますけど、
これ全部1人の方が管理しているんですか?(@@;)すごすぎ …
てなわけで、ついつい書いちゃったのらー(o^v^o) エヘヘφ(`∇´)φカキコカキコ♪
メル友に、なってくれるよねっ。(*^-^*) お・ね・が・い♪(* ̄・ ̄)ちゅ♪ッ
アドレス[email protected]
0760デフォルトの名無しさんNGNG
Free Bovine Spongiform Encephalopathyでしか?
0761デフォルトの名無しさんNGNG
>>757
typedefではstruct HOGEという型にhoge_tを割り当てるだけ。
struct HOGEをこの段階で参照しているわけではないので問題なし。
そうでないとこう言うことができない。
typedef struct HOGE hoge_t;
struct HOGE {
int n;
hoge_t *pNext;
};

それはいいけど、INT_MAX個の配列の方が(文法上問題なくても)無理っぽ。
0762デフォルトの名無しさんNGNG
int a=2;
a *= 1.5;

の結果ってコンパイラによって違うんですか?
LSI-C86だと a == 2
LightCだと a == 3
になるんですが。
0763デフォルトの名無しさんNGNG
LSI-C86は、標準では整数型の範疇で処理しようとするので要注意。
普通のコンパイラなら、doubleの演算を行なうので3になるはず。
0764デフォルトの名無しさんNGNG
>>762
gccでオプティマイズしたら、
int a = 3;
と同じコードを出力してきた。
0765デフォルトの名無しさんNGNG
つられつられて、母を訪ねて三千里。
gcc,と,bcc,と,mscとか,あんしcを比べてみれば?
0766デフォルトの名無しさんNGNG
char s[512], hoge[512];
struct AHYA{
unsigned char piyo[2];
}
printf( "s =%s\n", s);
$3438 /* 文字列 */
sscanf( s, "%x", hoge );
printf( "hoge =%x\n", *(int *)hoge);
$3438 /* "34""38"の2バイト */
このhogeの中身を
AHYA.piyoに格納したいのですが
どうにもいれることができません。
童貞だったときに、あせって尻の穴に
ティンコを挿れようとし、怒られた気分です。
どなたか御教授くださいませ。
おながいします。。。
0767デフォルトの名無しさんNGNG
>>766
structの定義の仕方を勉強し直してらっしゃい。
0768762NGNG
>>763
ありがとうございます。
ちょっとLSI-Cのマニュアル見てみたんですけど、これに関する記述は見つからなかったです。
「標準」というのがどういう場合かわからなくて不安です。
0769766NGNG
>>767サソ
スマソ・・・
変数定義し忘れておりますた。
スマタスマタ・・・(;´Д`) ハァハァハァハァハァハァハァ
struct AHYA{
} sumata;
ということで、再度御教授おながいいたします!!
0770デフォルトの名無しさんNGNG
質問の意味がわかりません。
他の人お願いします。
0771デフォルトの名無しさんNGNG
>>768
LSI-Cの代入演算子は、代入されるべき型へのキャスト後に演算を行なう仕様だったかと。
即ち、
int a = 2;
a *= 1.5;
は
通常のcが
a = (int) ((double) a * (double) 1.5);
と解釈してdoubleで乗算を行なうのに対してLSI-Cでは
a = a * (int) 1.5;
と解釈してintで乗算を行なう。
なので、代入演算子には注意が必要。
0772デフォルトの名無しさんNGNG
K&R読んでたんだが
添点の読みかた教えてください
てんてん?そてん?
0773デフォルトの名無しさんNGNG
>>772
添点ソエテ
0774デフォルトの名無しさんNGNG
茶道だと、点前(てまえ)とかいうもんな。
0775デフォルトの名無しさんNGNG
野点(のだて)というのもある。
0776デフォルトの名無しさんNGNG
>>773
ATOK14じゃ変換できねーぞおい。
0777デフォルトの名無しさんNGNG
777
0778デフォルトの名無しさんNGNG
>>773
goo国語辞典でも出てこない罠。

つーかおまいら、ここはC言語スレですよ?
0779デフォルトの名無しさんNGNG
K&Rの何頁だい?
0780デフォルトの名無しさんNGNG
C言語は日本語の基礎を理解していないと習得できない。
1978,Brian W. Kernighan
0781デフォルトの名無しさんNGNG
K&Rは、日本語の基礎を理解していたのか・・・
0782デフォルトの名無しさんNGNG
>>781
日本語の勉強はしていたらしいとマゾレス
0783デフォルトの名無しさんNGNG
蟹飯って名前いいよね
0784デフォルトの名無しさんNGNG
>>782
K&R日本語第2版の訳者前書きにそういうエピソード出てくるよね。
0785デフォルトの名無しさんNGNG
ベテランはCの標準関数は全く使わないんだってね!!
0786デフォルトの名無しさんNGNG
そう。ベテランはクラスライブラリを利用する。
0787デフォルトの名無しさんNGNG
C言語スレで何言ってるの
0788デフォルトの名無しさんNGNG
ベテランはハンドコンパイルしてハンドリンクする。
0789デフォルトの名無しさんNGNG
本の話になるのですが
独習CとK&R、買うんだったらどっちがいいでしょうか?
もしよければ、みなさんのオススメの本も教えてくらさい
0790デフォルトの名無しさんNGNG
プログラミング初心者なら独習
それ以外ならK&R
0791デフォルトの名無しさんNGNG
なるほど
じゃあ自分は初心者だから独習かな
返答ありがとうございました
0792デフォルトの名無しさんNGNG
毒手C言語
0793791NGNG
それと、790さんの答えをいただいて
もう1つ質問なのですが
どんなことが出来れば上級者で
どんなことが出来なければ初心者なのでしょうか?
愚問スマソ
0794デフォルトの名無しさんNGNG
定義が存在しない以上、そんなことを判断することは出来ない
0795デフォルトの名無しさんNGNG
事前の設計無しに無理なく10万行のコードを書き上げられること。
0796デフォルトの名無しさんNGNG
プログラミング技術とC言語利用術を区別できれば初心者脱出。
0797デフォルトの名無しさんNGNG
>>795
クズコーダーの方ですか?
0798デフォルトの名無しさんNGNG
>>797
嫉妬ですか:-)
0799デフォルトの名無しさんNGNG
上級者とか言ってて恥ずかしくならないか?
そんなに級がほしけりゃパソコン検定でも受けてろ
0800デフォルトの名無しさんNGNG
おれはPG初段だけどね
0801デフォルトの名無しさんNGNG
さーて、これから憂鬱本でも読むとするか。
0802デフォルトの名無しさんNGNG
>>795
まともに設計して 30K ステップ程度のものを
100K ステップ書いたのだとしたら相当無能ですが。
0803デフォルトの名無しさんNGNG
ANSI/ISO準拠のCのパーサを空で書ける奴は間違いなくCのベテラン。
コンパイラ書きでもなければ、Cという言語自体のベテランである必要はない。




0804デフォルトの名無しさんNGNG
>>795
> 事前の設計無しに

(・∀・)ニヤニヤ
( ´,_ゝ`)プッ
(゚Д゚)ハァ?
0805デフォルトの名無しさんNGNG
ステップって何?
行数との違いは?
0806デフォルトの名無しさんNGNG
>>805
正確な定義はしらん。というか多分無いだろう。
構文規則で云うところの「文(statement)」のような気もするが、
複文(compound-statement)のように、他のstatementを(再帰的に)含む
文の扱いが自明でないので、違う気もする。
現実的にはコメントや空白のみの行、空行等を除いた行数を「ステップ数」
と云っていることが多いと思われ。

0807805NGNG
>>806
即レスありがとう御座いました。
0808デフォルトの名無しさんNGNG
独習って無駄なことがだらだら書かれてあんなに量が多くなってるんだと
おもうけど
それは間違い?
0809デフォルトの名無しさんNGNG
毒手って無駄などくがだらだら染みこんであんなに手が黒くなってるんだとおもうけど
それは間違い?
0810デフォルトの名無しさんNGNG
黒人差別か
0811デフォルトの名無しさんNGNG
学校のほうでLinux上でC言語のプログラムを組んでるんですが
Linuxでは動くプログラムがBorlndのコンパイラではコンパイルはできるのですが
実行ファイルが正常に動かないんです。何か解決方法あれば教えていただけないですか
0812デフォルトの名無しさんNGNG
それだけでわかるかよ。
リンクできたのならLinux独自の関数(各種システムコールとか)を使っているせいではないだろうし。
0813デフォルトの名無しさんNGNG
>>811
コードによってはコンパイラ毎に動作が異なることがあるし
バグがあった場合その症状が出たり出なかったりすることもある。
単純にバグだと思ってBorland Cでデバッグしなよ。
0814デフォルトの名無しさんNGNG
>>813
即レスありがとうございます.
やはり、コンパイラが異なるからからですか。とりあえずやってみます。
0815デフォルトの名無しさんNGNG
>>814
コンパイラのせいにするな。
0816デフォルトの名無しさんNGNG
Linuxでは初回のmallocが0fillされてて初期化し忘れてもちゃんと動いて
それをWinに移植するとちゃんとバグってくれる。フフフフフ
0817デフォルトの名無しさんNGNG
>>811
単に gcc 拡張を使っているんじゃないのか?
それか、もとのLinuxでも、警告が出ているのを無視しているとか。
他のコンパイラだと警告レベルのものを、Borlandだとエラーで止めることがある。
0818デフォルトの名無しさんNGNG
>>817
コンパイルもリンクもできたと言っているが。
0819デフォルトの名無しさんNGNG
同名関数の挙動の違いによるものに一票
0820デフォルトの名無しさんNGNG
不正な領域に書き込みしているに一票
0821デフォルトの名無しさんNGNG
UnitTestをしていないのが悪いに一票
0822デフォルトの名無しさんNGNG
エラーチェックしていないだけとか・・・
0823デフォルトの名無しさんNGNG
ぬるぽが悪いに一票
0824デフォルトの名無しさんNGNG
ファイルをfopen("/home/giko/mona.txt", "r")みたいに指定してるとか。
0825デフォルトの名無しさんNGNG
>>824
かつエラーチェックしていないってやつね。
0826デフォルトの名無しさんNGNG
1byte余計に書き込んでいるバグを2年も気づかず、ある日思い出したように
(ソース変更してないのに)プログラムがクラッシュしだした。
Windowsでの実話。俺が悪いんだが、Windowsって不思議なOS。

0827Y.KusakabeNGNG
>>826
よくありますね。そういうこと。
0828デフォルトの名無しさんNGNG
環境かえるとバグを発見しやすいからgcc&linuxのプロジェクトでも
いっつもVCでビルドとおるようにしてるよ。VSの方が使いやすいって事もあるけど。
0829デフォルトの名無しさんNGNG
どうせこんなの改行コードの違いとか程度のことじゃねーの?
0830デフォルトの名無しさんNGNG
p = malloc(0);

↑0バイトの領域確保しても問題ないですか?
常にNULLでぃすか?
0831デフォルトの名無しさんNGNG
>>830
0バイトでも問題無いんじゃねーの?
0バイトの時に、*pに大して全く参照も代入もしないんであれば。

但し常にNULLとも、NULLで無いとも言えない。
処理系に依存してたと思う。
心配なら、mallocする前に引数チェックしる。
0832デフォルトの名無しさんNGNG
え〜っと、自分の頭が悪いに一票
0833怒りNGNG
質問でございます。
どうあがいても、コンパイラにプロトタイプ宣言のない関数の呼び出しって
怒られます。すげーむかついてます。
なんででしょうね?不思議ですね。
考え得る原因はなんでしょうか。
0834デフォルトの名無しさんNGNG
>>833
プロトタイプ宣言が無いから。
0835デフォルトの名無しさんNGNG
>>833
本当に足掻いたか?
足掻いたソースを見せてみろ。
0836怒りNGNG
やっぱりそうきたかー
なんか怒られつつも実行できたから、余計にむかついてるんです
すざけんな!
0837怒りNGNG
836は>>834への返答です
足掻くというのはなんでしょうか?
何度もすみません。
0838怒りNGNG
あと”ふざけんな!”ってのは(すざけんなになってるけど
俺が使ってるボーランドのコンパイラに向けての叫びです。
何度もすみません。
0839デフォルトの名無しさんNGNG
>>833

int main()
{
func();
return 0;
}

こういうのがいけない。
funcの呼び出しの前にint func(void);など(もちろん実際の関数定義と同じもの)と書いておく。Cならエラーにならないけど、C++だとエラーになる。
ちなみに通常printfなどで警告がでないのは、それのプロトタイプがかかれたファイル(stdio.h)をインクルードしているから。
0840怒りNGNG
「足掻く」で「あがく」って読むんですね、、。
どうか見捨てないでください。ソース書きます。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


/* 定数 */
#define GAME_COUNT 5 //ゲーム回数
#define INITIALIZE_POINT 10 //得点の初期値
#define NOT_USED 0 //未使用カード
#define USED (-1) //使用済みカード

/* グローバル変数 */
int computer_card[3];
int computer_point;
int player_card[3];
int player_point;
int card[4][13];

/* プロトタイプ宣言 */
void showpoint();
void shuffle();
int getcard();
void showcard();
void judge();

int main(){
て感じですが、、、
0841デフォルトの名無しさんNGNG
>>840
肝心の「プロトタイプ宣言のない関数の呼び出し」の部分を書かないとだめでしょ(^_^;)
0842841NGNG
多分stdio.h,stdlib.h,time.hにない関数を使っているんじゃないかなぁ。
0843怒りNGNG
はい。main関数の中で
for(i = 0; i < GAME_COUNT; i++){
showpoint();//現在のプレイヤの得点を表示
shuffle();//カードを初期化

computer_card[0] = getcard();//コンピュータにカードを1枚配る

player_card[0] = getcard();
player_card[1] = getcard();//プレイヤにカードを2枚配る

showcard();//カードを表示
の部分のshowpoint(), shuffle, getcard()及びこのあとの関数全部に
警告が出ます。もちろんいっちゃん下のほうで全関数を定義してるんですけども
うぅぅ、、、
0844デフォルトの名無しさんNGNG
悪いこと言わんからプロトタイプ宣言はやっとけ。
ちゃんと動いてるというのがたまたまちゃんと動いているように見えるだけかもしらんし。
プロトタイプ宣言があればそういう危険性はかなり減らせるぞ。
(あくまで減るだけな。なくせはしない)
0845デフォルトの名無しさんNGNG
mainを一番下に移動しろ
0846デフォルトの名無しさんNGNG
>>840
この問題とは関係ないけど、Cの場合、プロトタイプの引数リストの省略はやめた方がいい。voidならvoidとかく。
0847デフォルトの名無しさんNGNG
>>843
問題なさそうだが・・・・
0848デフォルトの名無しさんNGNG
プロトタイプと関数の定義に食い違いがあるとか?
0849怒り改め開放感NGNG
>>844-846様方
>>845様のいうようにmainを一番下に移動しても
警告が出て、きれました。
そこで、>>846様のいうように引数を全てvoidに書き換えた所、
問題なくコンパイルできました。
感動しました。
今後もこのプログラム技術板にくだらない質問を投げかける可能性があります。
そのときも、どうか今回のような暖かい対応をしてやってください。
まじでありがとうございました。
やっと寝れそうです。
0850デフォルトの名無しさんNGNG
警告メッセージを書いてくれるとよかったとおもいます
0851デフォルトの名無しさんNGNG
>>849
え?BCCってそういう挙動をするの?
gccじゃならないけど(^_^;) 多分VC++でも。
どちらが正しいんだろう。
0852デフォルトの名無しさんNGNG
>>850
書いてあるぞ。
0853怒り改め開放感NGNG
>>850
はい。警告メッセージは、

警告 W8065 bj.c 162: プロトタイプ宣言のない関数
'showpoint' の呼び出し(関数 main)

でございました。
何度もすみません。
0854デフォルトの名無しさんNGNG
BCCは

/* プロトタイプ宣言 */
void showpoint();
void shuffle();
int getcard();
void showcard();
void judge();

これらをどう見ているんだろう。
0855851NGNG
VC++6.0でもならなかった(もちろん/W4はつけた)。
0856デフォルトの名無しさんNGNG
/* プロトタイプ宣言 */
void showpoint();
どう解釈されるか、だな。
cの場合、()の場合は引き数の宣言の省略と見做される。
つまり、プロトタイプ宣言にさえなっていない。
c++の場合、()の場合はvoidの省略と見做される。
つまり、引き数がないことの宣言とか解釈される。

どっちみち、cなら(void)って書いておけ。
0857デフォルトの名無しさんNGNG
プロトタイプ宣言にはなってるだろ。
Cであれば、 void showpoint(); は void showpoint(...); と見倣される。
0858デフォルトの名無しさんNGNG
>>857
なってません。
任意の引数がOKというのと引数に関する情報がないというのは別。
そもそも...単独というのはCでは許されない。
0859デフォルトの名無しさんNGNG
これだからc++だけ齧ってc知らない奴は……
0860デフォルトの名無しさんNGNG
多分ボーランドのコンパイラのバグだと思うぞ
0861デフォルトの名無しさんNGNG
void main(void)の場合は正常、
main()の場合はエラー
bccはこのようなことになるのに
gccだとエラーがでないのは何故ですか?
どちらが正常ですか?
0862デフォルトの名無しさんNGNG
void main じゃなくて int main が正解
0863デフォルトの名無しさんNGNG
少なくとも、エラーと警告の区別もつかない>>861以外。
0864デフォルトの名無しさんNGNG
>>861
お前のコーディングが間違っている
コンパイラがエラーに厳しいか甘いかの違い
0865デフォルトの名無しさんNGNG
void* main(void)
0866デフォルトの名無しさんNGNG
int mainだと警告になりましたbccでやると
void mainだと正常

正解はint mainでしたか 
なかなか基本的な部分で違いがあるので混乱しますね
レベルが低いということでしょうか
この程度も統一できないということは
0867デフォルトの名無しさんNGNG
>>866
レベルが低いということでしょうか
この程度も理解できないということは
0868デフォルトの名無しさんNGNG
正常ならばいちいち警告を出す必要は無いと思うが、、、
cとc++の違いによるものですか?
0869デフォルトの名無しさんNGNG
main の return 忘れてるだろ
0870デフォルトの名無しさんNGNG
BCCはデフォルトでいろいろ警告がウザいのは事実ではあるが。
0871デフォルトの名無しさんNGNG
main()
みたいに戻り値を省略したらintを返すと解釈される
だからintを返さないとエラー
0872デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
printf("c\n");
return(0);
}

#include <stdio.h>
void main(void)
{
printf("c\n");
}
この二つはどちらが正常ですか それともどこが間違っていますか?
0873デフォルトの名無しさんNGNG
>>872
>>1からリンクされてるものをみましょう。
0874デフォルトの名無しさんNGNG
いや、
char * main(void)
{
printf("c\n");
return "successful";
}
が正解だろ。
0875デフォルトの名無しさんNGNG
書籍を3冊見たら3冊とも違うパターンでした
872のような二つと単なる main() だけの記載のものと
三者三様でした
0876デフォルトの名無しさんNGNG
>>875
↓これが正解
FILE *main(double argc,size_t *argv[])
0877デフォルトの名無しさんNGNG
>>875
>>1からリンクされてるものをみましょう。
0878デフォルトの名無しさんNGNG
11.15:
僕がいつも使っている『ほんとおの馬鹿向けのC』には、いつもvoid main()と書いてる。

A:

たぶんその本の著者は自分も対象読者の一人に数えているのだろう。 不思議なことに、例題のコードでvoid main()と書いてる本は多い。 そういう本は間違っている。

0879デフォルトの名無しさんNGNG
>>859
いやー、ごめんね。普段Cなんていう化石使ってないから・・・
0880デフォルトの名無しさんNGNG
わかりました
わかる人が誰もいないということですね
0881デフォルトの名無しさんNGNG
ANSI規格的には int main() が正しい
0882デフォルトの名無しさんNGNG
わかりました int main() でやります
0883デフォルトの名無しさんNGNG
MSDNライブラリのサンプルもvoid main()になっているよね。
0884デフォルトの名無しさんNGNG
mallocしたヒープ領域を明示的にfreeせずにmainを抜けた後に
OSが自動的に開放してくれることを期待したコードを書いても大丈夫ですか?
それとC言語のgotoってどのようなケースで使われるのでしょうか?
0885デフォルトの名無しさんNGNG
>>884
gotoはifと組み合わせてwhileのかわりに使う。
0886デフォルトの名無しさんNGNG
>>884
そのOSでfreeせずに抜けるコードを作ってためしゃいいのでは?
0887デフォルトの名無しさんNGNG
int mainの次はfreeかよ
0888デフォルトの名無しさんNGNG
freeの次はdeleteかよ
0889デフォルトの名無しさんNGNG
過去ログ検索って何ですか?
0890デフォルトの名無しさんNGNG
>>889
C言語と関係あるんですか?
0891デフォルトの名無しさんNGNG
>>889
HANDLE FindPastLog(LPCTSTR lpszName, DWORD dwReserved);
0892デフォルトの名無しさんNGNG
残念ながら間に合いませんでした。
0893デフォルトの名無しさんNGNG
>>884
breakもreturnも、言ってみれば飛び先の確定しているgoto。
つまり、関数分けを使いたくないときに使われることがたまにある。

ex)
void func(void)
{
 初期処理();
 if (条件) {
  goto end;
 }
 本処理();
 end:
 終了処理();
 return;
}
この場合、条件判断を本処理に入れればgotoは不用になる。
或いは、次のように書いてもいい。
void func(void)
{
 初期処理();
 if (!条件) {
  本処理();
 }
 終了処理();
 return;
}
0894デフォルトの名無しさんNGNG
(・∀・)チンポ!! (・∀・)
0895デフォルトの名無しさんNGNG
(・∀・)ヌルポ!! (・∀・)
0896デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >.__Λ∩
  _/し' //. V・∀・)/
 (_フ彡        /  ←>>895
0897デフォルトの名無しさんNGNG
int arr[3][3][3];
int *(*ptr)[3][3];
のとき、ptr が arr[1][1][1] を指すようにする方法を教えてください。
0898デフォルトの名無しさんNGNG
ptr = &arr[1][1][1];
0899897NGNG
訂正です。
誤 ) int *(*ptr)[3][3];
正 ) int (*ptr)[3][3];

>>898
それだと、int * から int (*)[3][3] に変換できない。といわれます。
0900デフォルトの名無しさんNGNG
>>897
その定義では ptr はサイズ[3][3]の int型へのポインタの配列を
指しているから、キャストするだけでは無理。
0901デフォルトの名無しさんNGNG
>>900
ptr = (int (*)[3][3])&arr[1][1][1];
0902デフォルトの名無しさんNGNG
>>901
期待する結果が出ました。ありがとうございました。
単にキャストするだけでよかったのですね。
ptr = arr + 1 + 3 + 9;
などとやっていました。
0903デフォルトの名無しさんNGNG
>>364
ガッ
0904デフォルトの名無しさんNGNG
>>893
gccだとラベルのアドレス取得とポインタへのgoto使えるから、
関数内ジャンプテーブルなんてことも出来るんだけどね。

これってC99でも仕様に取り込まれてないよね?
0905デフォルトの名無しさんNGNG
>>904
ない。
0906デフォルトの名無しさんNGNG
変数a、bを入れ替える場合、こういうのでいいんですか?

int a,b;
int hoge;
hoge = a+b;
a = hoge-b;
b = hoge;

これでいいのでしょうか?
もっとうまく、見やすくする方法とかないですか?
単純なことですがどうかよろしくお願いします。
0907デフォルトの名無しさんNGNG
int tmp=a;
a=b;
b=tmp;
0908デフォルトの名無しさんNGNG
int a, b;
int tmp;

tmp = a;
a = b;
a = tmp;

?
0909906NGNG
あぁ、そういうやり方がありましたか。
どっちも>906より見やすいですね。
0910621ですNGNG
基本的なしつもんなのですが…

C言語でファイルを読み込む際、途中から読み込むにはどうしたらいいのでしょうか?

(例) test.txtに保存されてある情報
-----------------------------------------
name:takasi
age:20
kao:c:\windows\デスクトップ\data\kao1.bmp

name:taro
age:22
kao:c:\windows\デスクトップ\data\kao2.bmp

name:yasiro
age:25
kao:c:\windows\デスクトップ\data\kao3.bmp
-----------------------------------------
とあった場合、test.txtをopenした時、先頭の行から読み込むのではなく、「taro」だけの部
分を読み取りたいのですが…
(具体的にはtaroとageの部分とkaoの部分を一緒にテキストファイルから取得したい)

どういうふうにCにすればいいのかでまた困っている状態ですので教えてください

0911デフォルトの名無しさんNGNG
すいません、621ですという名前、間違いです。
ただの名無しなのでこのスレ中の621さん、スマソ つД;)
0912デフォルトの名無しさんNGNG
>>910
"name:taro" が出てくるまで普通に読め。
0913デフォルトの名無しさんNGNG
('A`)fseek
0914デフォルトの名無しさんNGNG
>>910
Windows 専用で良ければ、ファイルを以下のように直した後
-----------------------------------------
[takasi]
age=20
kao=c:\windows\デスクトップ\data\kao1.bmp

[taro]
age=22
kao=c:\windows\デスクトップ\data\kao2.bmp

[yasiro]
age=25
kao=c:\windows\デスクトップ\data\kao3.bmp
-----------------------------------------
const char *inifile = "test.txt";
const char *section = "taro";

int age;
char kao[MAX_PATH};

age = (int)GetPrivateProfileInt(*section, "age", 0, inifile);
GetPrivateProfileString(section, "kao", "NUL", kao, sizeof(kao), inifile);

>>913
どこにシークしろと
0915デフォルトの名無しさんNGNG
>>910
FILE *f = popen("sed -n '/^name:taro/,/^$/{//q;p;}' test.txt", "r");
fgets(name, sizeof name, f);
fgets(age, sizeof age, f);
fgets(kao, sizeof kao, f);
0916デフォルトの名無しさんNGNG
sedかっこいい。
0917デフォルトの名無しさんNGNG
fseek だと固定長にするしかないな。
0918デフォルトの名無しさんNGNG
> 基本的なしつもんなのですが

一体どういう意味でこれを書いたのか教えてもらいたい。
0919デフォルトの名無しさんNGNG
基本的なつけもんなのですが
0920デフォルトの名無しさんNGNG
根源的な質問なんですがどうしてC言語使いは性格の歪んだ人が多いのでしょうか?
初心者ですので懇切丁寧に教えてください。
0921デフォルトの名無しさんNGNG
> C言語使いは性格の歪んだ人が多いのでしょうか?

その事をどうやって知り得ましたか?
0922デフォルトの名無しさんNGNG
>>921
自分がそうなりました。
0923デフォルトの名無しさんNGNG
>>920
頑固なジジイなんだからしょうがないじゃん。
0924デフォルトの名無しさんNGNG
公文的なポケモンですが・・・しまった、後が続かない。

>>910
typedef struct USER {
 char name[20];
 int age;
 char kao[200];
} User_t;
とでもしておいて、

User_t *getUserData(FILE *fp);
んな関数作って、

User_t *pUser;
FILE *fp = fopen("test.txt", "r");
do {
 pUser = getUserData(fp);
} while (strcmp(pUser->name, "taro") != 0);
fclose(fp);
printf("%s の年齢は %d、顔は %s を見ろ。\n", pUser->name, pUser->age, pUser->kao);

とでもすればいいんでないの?
0925デフォルトの名無しさんNGNG
教えて下さい。
#define MSG(p) ("test" + p + "\n")
というようなマクロを作りたいのですが、
うまくいきません。
pには文字列を入れる場合と、数値の場合があるのですが、
それぞれどのようなマクロを作ればよいでしょうか?
0926デフォルトの名無しさんNGNG
文字列リテラル用
#define MSG(str) "test" str "\n"

定数用
#define MSGi_(n) MSG(#n)
#define MSGi(n) MSGi_(n)
0927925NGNG
>>926
ありがとうございました。

定数用の#nはどのように使うのですか?
0928デフォルトの名無しさんNGNG
MSGi()は正確には定数用じゃなくてなんであろうと文字列化して"test"と"\n"
と連結するマクロだが、MSGi_()はwork用のマクロなので直接使うものではない。
0929デフォルトの名無しさんNGNG
賢い人!教えてください。
int main()
{
  FILE *fp;
  char c;
  fp = fopen("c:\\hoge.txt", "wb");
  c='.';
  fwrite(&c, 1, 1, fp);
  fwrite(&c, 1, 1, fp);
  ??
  fclose(fp);

   return 0;
}
2バイト目を削ってサイズが1バイトのファイルとしてクローズさせるには
どんな関数を使えば良いのでしょう?
0930デフォルトの名無しさんNGNG
freopen()
0931デフォルトの名無しさんNGNG
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/wara/
0932デフォルトの名無しさんNGNG
>>929
ftruncate()とかchsize()
0933デフォルトの名無しさんNGNG
>>932
天才!まさに、これがやりたかったのです。
fseekじゃあ移動するだけでした。(汗
0934デフォルトの名無しさんNGNG
>>933
そんなもん使うなんて設計がおかしくねぇの?
0935デフォルトの名無しさんNGNG
flock使う時は必用になることがある
0936デフォルトの名無しさんNGNG
素直に必要な部分だけのファイルを作って
renameがおすすめ。
0937デフォルトの名無しさんNGNG
/* ファイルを単純に切り詰める。 */
void truncFile(char const *file, size_t len)
{
FILE *fpOrg;
FILE *fpTmp;
char *pBuf;
char const *pTemp;

pBuf = malloc(len);

fpOrg = fopen(file, "r");
fread(pBuf, 1, len, fpOrg);
fclose(fpOrg);

pTemp = tmpnam(NULL);
fpTmp = fopen(pTemp, "w");
fwrite(pBuf, 1, len, fpTmp);
fclose(fpTmp);

rename(pTemp, file);

free(pBuf);
return;
} /* きたねぇコードだ */
0938デフォルトの名無しさんNGNG
おっと忘れた。
len = fread(pBuf, 1, len, fpOrg);
にすればlenがファイルより長くても安心だな。
勿論、malloc()、fopen()、fwrite()、(write後の)fclose()、rename()の
戻り値のチェックも忘れずに。
0939デフォルトの名無しさんNGNG
同名ファイルがあってもrenameできるのか?
0940デフォルトの名無しさんNGNG
最後の return; ってなんでしか
0941デフォルトの名無しさんNGNG
>>939
マニュアルページを見る限りできるように思う。
できなきゃremove()するまで。
>>940
真面目に戻り値を返す意図があった名残。
0942デフォルトの名無しさんNGNG
Cにtmpnam()というライブラリ関数があるので、テンポラリファイルには
この関数を使って名前作成しよう。
0943937=938=941NGNG
>>942
使ってますが何か。
0944デフォルトの名無しさんNGNG
int rename( const char *oldname, const char *newname );

戻り値
成功すると 0 を返します。エラーが発生すると 0 以外の値を返し、
グローバル変数 errno に以下のどちらかの値を設定します。

EACCES
 newname で指定したファイルまたはディレクトリが既に存在するか、
 パスが無効で作成できない。
 あるいは、oldname がディレクトリであるのに、newname で別のパスを指定した。
ENOENT
 oldname で指定したファイルまたはパスを検出できない。
EINVAL
 名前に無効な文字が使われている。
0945デフォルトの名無しさんNGNG
> マニュアルページを見る限りできるように思う。
どういう読みかたしたのか知らんが出来ない

> できなきゃremove()するまで。
最初からそうしとけ
0946デフォルトの名無しさんNGNG
>>944
環境は?
0947デフォルトの名無しさんNGNG
>>946
関数    必要なヘッダー      互換性
rename  <io.h> または <stdio.h>  ANSI, Win 95, Win NT
0948デフォルトの名無しさんNGNG
>>942
|説明
|   tmpnam() 関数は、ファイル名に使える文字列へのポインタを返す。この名前を持つファイル
|   は、ある時点では存在していなかった。従って幼稚なプログラマはこの文字列がテンポラ リ
|   ファイルのファイル名として適していると考えるかもしれない。
それに同じファイルシステム上に作られるという保証はない。

>>945,947
一般的にUNIXでは可能。
0949デフォルトの名無しさんNGNG
>>947
注:古いMSDNライブラリ
0950デフォルトの名無しさんNGNG
renameなんて関数が標準ライブラリにあったんだな・・・
0951デフォルトの名無しさんNGNG
よく分からないんだけど tmpnam() は使わずに自作しろってこと?
0952デフォルトの名無しさんNGNG
てか問答無用で(removeして)renameするなら、
> fpTmp = fopen(pTemp, "w");
この時点で目的のファイル名にしておけば
0953デフォルトの名無しさんNGNG
ところで、UNIX上でrenameして
指定されたnewnameのファイル/ディレクトリが既に存在していた場合どうなるの?
既存の方は消される?
あるファイル名を既存のディレクトリ名にrenameしたら、そのディレクトリは消える?
Windowsだと同名のファイルとフォルダは共存出来ないけど…
0954デフォルトの名無しさんNGNG
unixでもディレクトリはアンリンクされませんよ。
ファイルはアンリンクされるけど、
他のプロセスがそのファイルをオープンしている限りディスク上からは消えない。
0955デフォルトの名無しさんNGNG
>>953
> 指定されたnewnameのファイル/ディレクトリが既に存在していた場合どうなるの?
> 既存の方は消される?
removeはターゲットがファイルの場合はunlink, ディレクトリの場合はrmdir
相当の処理を行う。よって

> あるファイル名を既存のディレクトリ名にrenameしたら、そのディレクトリは消える?
既存のディレクトリ配下にファイルやディレクトリが存在しない場合は消える。
存在する場合、rmdirも失敗するので、removeも失敗する。

> Windowsだと同名のファイルとフォルダは共存出来ないけど…
Unixでも同じ。
0956デフォルトの名無しさんNGNG
>>951
mkstemp()とか。
0957デフォルトの名無しさんNGNG
>>955
ディレクトリもひとつのファイルだしな。
0958デフォルトの名無しさんNGNG
>>954-955
なるほど、要するに既存の場合はremoveを試みてくれるわけね。
どうもありがとう。
0959951NGNG
ああ、これですか
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/tmpnam.3.html
>この名前を持つファイルは、ある時点では存在していなかった。
この部分の解説きぼん。。
0960デフォルトの名無しさんNGNG
tmpnam()を実行した時点ではそのファイル名が存在していなくても、
ファイルを作成しようとした時にそのファイル名が存在しない事は保証されない、
という事かな
0961デフォルトの名無しさんNGNG
>>959
tmpnamを呼んだ時点では存在しなくても、その後実際にファイルを作成しようと試みるまでに他のプロセスによって作成されてしまうかもしれない。

ということでしょ?
0962951NGNG
>>960-961
あーやっぱりそれかあ。どうもです。
mktemp()のほうには書いてあった。
>その名前がすでに存在しているかどうかテストして、そのファイルをオープンする間に競合がある事から
0963デフォルトの名無しさんNGNG
tmpnamって変な略し方
0964デフォルトの名無しさんNGNG
tmpnam() は TMP_MAX回を超えて呼び出すとNULLを返すように
なり、はっきり言って全然実用的じゃない。俺は使わない。
0965デフォルトの名無しさんNGNG
C言語でエディタを作るとき、
while(fgets(buffer,BUFFERSIZE,fp)!=NULL){
}
のBUFFERSIZEを#define BUFFERSIZE 4096
としてるんですが、4096を超えるファイルに対応するには
どうしたらよいですか?
0966デフォルトの名無しさんNGNG
複数回に分けて読み込んでバッファ的に分かれているけど同一行フラグを立てるとか。
0967デフォルトの名無しさんNGNG
#define BUFFERSIZE 4294967296 にしろ。
0968デフォルトの名無しさんNGNG
どうでもいいがエディタを作ろうという奴が>>965のような質問を
すること自体が驚きだ。
内部構造はgapped bufferかlinked listなんでしょ?
同じように動的に行を読めばいいだけの話。

0969デフォルトの名無しさんNGNG
そういやエディタ作ってるやついたな
作りかけのやつうpして質問してた
0970デフォルトの名無しさんNGNG
>>968
gapped buffer、linked list
ってなんですか?
0971デフォルトの名無しさんNGNG
おいおい、そんなことも知らずにエディタ書こうとしているのか?
今時はソフトウェア作法も読まないのかねぇ。
0972デフォルトの名無しさんNGNG
while( !feof(fp) ){

fread(buffer,sizeof(char),BUFFERSIZE,fp);

fwrite(buffer,sizeof(char),BUFFERSIZE,stdout);
}
こうやってあるバイナリファイルを画面出力するとBEEP音が2回くらい鳴るのですが
どうして?
0973デフォルトの名無しさんNGNG
>>972
そのファイル中にベルコード(0x7)が含まれているからだろ。
0974デフォルトの名無しさんNGNG
>>972
\a
0975デフォルトの名無しさんNGNG
>>972
メーカーにクレーム
0976739NGNG
>>739でも質問しましたが、再度質問です。
・あと、ある文字列に対し、ビット誤り率が与えられて(例えば0.008)文字列を
ビット誤り(ランダム、バーストどっちでも良い)させてくれる効率の良い
方法はありますか?

どなたか良いコーディング方法がわかる方アドバイスください。

ある関数に引数で、バッファのポインタとバッファ長を渡し、
ビットエラーレート0.008がわかっていて、
ランダムで誤りを生成したいです。
よろしくお願いしますm(__)m
0977デフォルトの名無しさんNGNG
ある数字を有効数字3けたにかえるにはどうしたらいいでしょう
0978デフォルトの名無しさんNGNG
次スレ立ててもいい?
0979デフォルトの名無しさんNGNG
>>978
よろ。
0980デフォルトの名無しさんNGNG
どうせFAQしかないから過去ログ検索だけで十分だろ。
0981デフォルトの名無しさんNGNG
>>980
それを言ったら2ch全て(ry
0982デフォルトの名無しさんNGNG
次スレたてました。移動よろ。

C言語なら、俺に聞け! Part 51
http://pc2.2ch.net/test/read.cgi/tech/1046104909/l50
0983デフォルトの名無しさんNGNG
ぬるぽ
0984デフォルトの名無しさんNGNG
>>977
文字列に直して先頭3文字以降を0にして戻すとか。整数の場合ね。
0985デフォルトの名無しさんNGNG
>1000
おつかれ
0986デフォルトの名無しさんNGNG
ミノガサナイゼ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >.__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>983
0987デフォルトの名無しさんNGNG
>>976
質問の意味が理解できない・・
0988デフォルトの名無しさんNGNG
ぬるっぽ
0989デフォルトの名無しさんNGNG
>>988  Λ∩
. V`Д´)/←>>988
0990デフォルトの名無しさんNGNG
stricmpみたいに大文字小文字区別せず処理する標準関数は
他にありますか?
0991デフォルトの名無しさんNGNG
>>982
モツカレー
0992デフォルトの名無しさんNGNG
  y               y
   i、   __ _, --- 、_ _  r'
   `ヽ (ノ´ 二ニ二 て) /
     i、,〉'<入_li il_入>tイ、ノ
0993デフォルトの名無しさんNGNG
>>990
strnicmp
0994デフォルトの名無しさんNGNG
strcasecmp
strncasecmp
だろ
0995デフォルトの名無しさんNGNG
>>992
何これ?
0996デフォルトの名無しさんNGNG
>>995
(=゚ω゚)ノ 蝉の頭部です
0997デフォルトの名無しさんNGNG
((((;゚Д゚))))ガクガクブルブル
0998デフォルトの名無しさんNGNG
998!!!
0999デフォルトの名無しさんNGNG
999!!!!!!!!
!!!!!!!!!!
1000デフォルトの名無しさんNGNG
  | M ヽ
  |从 リ)〉
  |゚ ヮ゚ノ| 1000 キタ…
  ⊂)} i !
  |_/ヽ|」
  |
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。