FTP、CGI、SSI、telnetが自由に使える超高速レンタルサーバ。
工夫しだいで、楽しさ100倍。 www.binboserver.com
月額千円サーバ | サブドメインコース | BIGなサーバ

サブドメインコース:CGIやFTPが使いたい・お金を掛けたくない人のために。
 *****.syo-ten.com *****.gasuki.com *****.zansu.com
 お好きな名前を無料で使えます。早い者勝ち。

人気サイト 月額千円サーバ:.com .net .org で取得できます。.JPドメイン大歓迎!
 超高速・高機買Tーバを1000円で!使ってみれば、分かります。

BIGなサーバ:Big なBig なサーバー。充実したサポートをお求めの方へ。
 インターネットでご活躍の皆様へ、そしてご活躍予定の皆様へ。
2ちゃんねるは、このサーバを使っているです。

■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■

C言語なら、俺に聞け! <23>
1 名前: 日下部陽一 投稿日: 02/06/02 22:33
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

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

・前スレ
<22> http://pc.2ch.net/test/read.cgi/tech/1022402165/

他のリンクは>>2-10を見な。


2 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:34
>>1
メールアドレスがvoidになってない。
・作ってわかるCプログラミング(通称 アヒル本)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711


3 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:34
【コンパイラ】
ぼくもgccは好きです!
http://gcc.gnu.org/
タダで使えるBorland C++!
http://pc.2ch.net/test/read.cgi/tech/1002377328/l50

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

【製品版。有料】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html


4 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:34

1コンピュータの操作法
2Cの文法の基礎知識
3簡単な各種アルゴリズム
4デバッグ手法(スナップショット、デバッガの使い方)
5さまざまなトラブルの対処法(文法ミス、アルゴリズムのミス、勘違い)
6大きなプログラムの作成法(モジュール化)
7アルゴリズムの最適化
8システム分析法
9データ構造論
10さまざまなトラブルの対処法(メモリの管理(ポインタ)、環境の違い、境界条件)
11オペレーティングシステムの違い(移植性)



5 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:43
for(i=0;i<n;i++)
for(j=0;j=m;j++)
で,nとmが20の時は,400回ですが
nとmが35の時は,1225回ループします。
どのくらいの時間差があるのでしょうか?
for分の中は,if(Kou1[i] == Kou2[j])
のような感じです


6 名前: すまん 投稿日: 02/06/02 22:43
for(i=0;i<n;i++)
for(j=0;j<m;j++)
で,nとmが20の時は,400回ですが
nとmが35の時は,1225回ループします。
どのくらいの時間差があるのでしょうか?
for分の中は,if(Kou1[i] == Kou2[j])
のような感じです



7 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:44
実行して計測すれば?


8 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:47
スタンダードだから無理


9 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:47
フリーのコンパイラ使えば?


10 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:48
>>8



11 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:48
スタンダードだから無理?
最適化が効かないからって事?


12 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:49
実行して計測ってどうやるの?


13 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:50
>>12
わからなきゃストップウォッチでも持って測れ


14 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:50
>>12
ストップウォッチ


15 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:50
>>13
同じ0.4秒でした。


16 名前: 14 投稿日: 02/06/02 22:51
>>13
俺とケコーン汁(・∀・)!!


17 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:51
>>15
じゃあ同じでいいじゃん。


18 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:52
いぢわる。


19 名前: 13 投稿日: 02/06/02 22:53
>>16
私めんくいなの


20 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:54
>>18
で?


21 名前: 14 投稿日: 02/06/02 22:57
鬱だ...


22 名前: デフォルトの名無しさん 投稿日: 02/06/02 22:57
マヂレス
そのプログラムを100万回ループした実行時間をストップウォッチで計って100万で割れ


23 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:02
>>22
実行時間を計るプログラムってあるの?


24 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:03
まずそれから作れ



25 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:03
>>23
ストップウォッチ


26 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:04
>>23
system()で100万回呼び出して、その開始時間と終了時間をclock()で得ればいいだろ。


27 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:05
clockは禁句だったのに…


28 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:06
じゃあgettimeofday


29 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:06
>>27
あれって使っちゃいけない関数だったの?(汗
平気で使っていたんだけど(汗


30 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:11
>>29
clock教えたら面白くないから禁句なんだろ。


31 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:15
>>30
そういういぢわるやめてまともにおしえてほすぃ・・・。


32 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:19
最適化かけても消えてしまわないビジーループを作るには
ちょっとしたコツがいります。


33 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:20
volatile使うか#pragmaすればいいんでないの?


34 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:21
>33
volatileが一番楽。pragmaは素人にはおししめできない


35 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:22
K&RのANSI対応版見たんだけど、
signedだと保証されてるのは整数型の中ではint型だけみたい。



36 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:25
>>35
整数型はintとcharだけでしょ?
longやshortはそれぞれlong int,short intという意味だし。


37 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:28
strの中身の文字列で、スペース10個目より後ろの値を得たいので
(下記プログラムだと「ab0523092616p」の部分)、以下のプログラムを
書いてみましたが、states_mesに上手く格納できません。

どうもstrcatの2番目の引数がよろしくないみたいですが・・・
perlの経験は有りますが、変数の型に甘い言語に慣れてしまっていまして
対処方法がいまいちわかりません。
最終的にstates_mes内に「ab0523092616p」を格納出来るようにするには
どうしたらよろしいでしょうか?


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

#define MAX_LENGTH 1024

main(){
 char str[MAX_LENGTH] = "d k 1022174 10311 102590 759 uuune rejp 27354 1010 ab0523092616p";

 int i;
 int spc_check = 0;
 char states_mes[MAX_LENGTH];

 for(i=0;i<MAX_LENGTH;i++){
  if(spc_check==10){
   if(str[i]==NULL){
    break;
   }else{
    strcat(states_mes , str[i]);
   }
  }else{
   if(str[i]==' '){
    spc_check++;
   }
  }
 }

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


38 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:28
恐怖!

(char)255 って -1 になるのは負の表現が2の補数なCPUだけじゃん
かと思いきや・・・


39 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:30
for ( here ; i<=10 ; i++){

↑のhereの場所に i=1とかだけじゃなくて
x=d , i=1 とかなんか別の式を一緒に書いてあることあるけど
x=d はforループにはいる前、例えばその上とかに
書いた場合と違いはあるんですか?


40 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:31
>>38
思わせぶりしないで続きを書いてYO(´д`;


41 名前: ネパール弾 投稿日: 02/06/02 23:34
>>39
ない。なんつーか、コード上の表現として
「このループの先頭であーして欲しいこーして欲しい」
というのをすっげー強調したいときに使うやり方。

言葉の通じない外人といっしょのチームになったとき
コードだけで会話してたの・・・。


42 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:36
>>37
何がしたいのかさっぱり分からない。


43 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:37
>>41
なるほど、
産休


44 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:39
>>39
ヒント カンマ演算子


45 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:47
for(space = 10, i = 0;str[i] && (str[i] == ' '?--space:1);i++);
strcpy(buffer, str+i+1);

スペースが10個入ってることが確実ならこれでどーよ!(´д`;)


46 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:48
>>37
strcatはポインタを求める気がする。
頭に&をかぶれ。


47 名前: デフォルトの名無しさん 投稿日: 02/06/02 23:50
    strcat(states_mes , &str[i]);



48 名前: 46 投稿日: 02/06/02 23:54
47
ケコーン。この場合は違うか・・・

45は39への絡みもあるのか。トリツキな感じだ。


49 名前: 37 投稿日: 02/06/03 00:26
みなさんありがとうございます。

無事思い通りのことができました。
拙い説明の仕方で済みませんでした。

C言語の勉強、もっと精進いたします。


50 名前:   投稿日: 02/06/03 00:34
struct{
int num[200];
POINT Pos[200];
}KOU;

KOU Kou;

struct{
int num;
POINT pos;
}KOU;

KOU Kou[200];

どっちがいいですか?


51 名前: 投稿日: 02/06/03 00:35
用途による。


52 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:38
#define 50 (´д`)


53 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:46
>>50
それ通らないでしょ?それともC++ですか?


54 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:47
>>50
書くとしたら typedef を struct の前につけれ。紛らわしくていかん。


55 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:48
#define _50 (´д`)


56 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:50
>>53
C++にそんな昨日はありません


57 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:51
そんな明日もありません


58 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:51
そんな今日も


59 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:52
もっこりますか?


60 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:53
#define >>50 (´д`)


61 名前: デフォルトの名無しさん 投稿日: 02/06/03 00:54
>>60
通りませんよ。


62 名前: デフォルトの名無しさん 投稿日: 02/06/03 01:08
このスレ何日で消費する?


63 名前: デフォルトの名無しさん 投稿日: 02/06/03 01:11
@ 一週間
A 3日
B 6日
C 日下部陽ちゃん♥


64 名前: デフォルトの名無しさん 投稿日: 02/06/03 01:26
Cに√2票


65 名前: デフォルトの名無しさん 投稿日: 02/06/03 01:37
せっかくだから、本日8:00までに使い切らないか?


66 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:05
基本的な質問していい?

++i と i++ってどう違うんだっけ?


67 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:10
>>66
実行してみそ。

int i = 0, j;
j = i++;

int i = 0, j;
j = ++i;

のそれぞれの j の値を見れば意味がわかる。


68 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:17
>>67
0と1になったよ
なんでか全然わからん・・


69 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:19
>>68
その結果見てもわからんか・・・・
++iは、iを先にインクリメントしてからの値を返す。
i++は、iの値を先に評価してから返し、その後インクリメントする。


70 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:20
i++はインクリメントを行う前のiの値(左辺値になれない)を返す。
++iはインクリメント後のi(左辺値になれる)を返す。


71 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:25
>>69-70
副作用と式の値の区別がつかないといくら説明しても無駄。


72 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:25
>>70
いいこと聞いた。
++i = 0; とかできるんだね。あまり意味ないけど。


73 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:31
>>68
j=++i;
これは
i=i+1;
j=i;
と同じ。

j=i++;
これは
j=i;
i=i+1;
と同じ。


厳密に言うと少し違うんだが。


74 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:33
>>72
できません。


75 名前: 68 投稿日: 02/06/03 02:35
>>All
非常によくわかった。
さんきゅ〜


76 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:36
>>74
ん?BCC5.5.1だと通ったぞ。


77 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:37
>>76
ん?悪名高いVC++6.0Proだと通らなかったぞ。


78 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:40
>>76>>77
どっちが正しいんだ?


79 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:43
int main()
{
int i=44;
++i=0;
return 0;
}

cl test.c

test.c
test.c(4) : error C2106: '=' : 左のオペランドが、左辺値になっていません。


VC++6.0Proでこう出た。


80 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:47
>>79
こちらでは、gcc3.1でコンパイルしてみたら通った。
LSI-C86試食版では「左辺値が必要」と出た。
処理系依存なのだろうか?


81 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:50
うちのBCCは通らない


82 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:53
>>81
変ですね。なぜ同じBCCなのに結果が違うのか。
ちなみにTurbo Debuggerで中身を見てみたら、ご丁寧にも
一度incrementしてから0を転送していたよ。


83 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:56
++ と = の優先順位の差異かと思ったけど
これって環境依存関係なく規定されてたよな?
あれか? 例によって未定義とかそーゆーの?


84 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:58
>>82 CPPファイルをコンパイルしていないだろうか。(CPPは通る)


85 名前: デフォルトの名無しさん 投稿日: 02/06/03 02:59
そーゆーのだ。

そもそも++した時点でその式は左辺値ではなくなる。
左辺値でないものに代入はできない。

できたとしたら、コンパイラのバグか、規格外の拡張機能だ。



86 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:00
>>84
拡張子を.cppにして、C++のソースファイルとしてコンパイルしたらVC++6.0でも通った。


87 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:01
>>83
私にはわからないです。専門家の登場を待つとしますか。


88 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:01
Cは駄目、C++ならOKか。


89 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:03
>>84
その通りです。CPPをコンパイルしていました。
>>88
そうなんでしょうか?もう一度C++第3版を穴が開くほど
読み直してみるとします。


90 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:23
うぉ C++としてコンパイルすると確かに通る。
Cの場合は>>85のとおり、値に値を代入する形になるのでエラーになるが・・・


91 名前: 68 投稿日: 02/06/03 03:27
またまた質問です。

配列で a[i] と b[j][k] を作ったのですが
その時、a を渡すと a[0] のポインタとして処理しますが
b を渡すとポインタとして認識せず、*b で渡さないとダメなようです。
なぜなんですか?
どこか間違っていますか?


92 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:33
C++ の場合、++i は i=i+1 と等価らしいね。 よって、 i=i+1=0; よって 0
らしいです。
ちなみに i++=0; はエラーだった。 恐らく i+(+=0); って感じか?・・・ワカラン

適当にコンパイルしてみた結果なので理論とか定義とかは無視してます。
うそついてたらゴメンヨ


93 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:52
>>91
間違っていません。ただし、*bの意味は、pointer to array[k] なので、
(*b)[x]のように使う必要があります。*b[x]やb[x]と書くと、意味が違って
しまうので注意です。

bが1増えると、b[j][k]のjが1増えたのと同じ意味になります。


94 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:54
>>91
もちろん、b[j][k]のような書き方もOKです。このb[j]の部分が*bに
化けていると思っていただいて差し支えありません。


95 名前: デフォルトの名無しさん 投稿日: 02/06/03 03:56
>>92
C++は演算子の多重定義機能があるので、Cとは演算子の解釈の
仕方が異なるのでしょうね。


96 名前: 68 投稿日: 02/06/03 03:56
>>93
レスありがとう。
なんか凄く重要そうなこと言ってる気がするけど
よくわかりません。
a ではそのままポインタをさすのにbではなぜささないのでしょうか?
あと(*b)[x]とかの意味が全然わからないっす。。


97 名前: 68 投稿日: 02/06/03 03:59
>>93
*b[x]やb[x] はどう違うのですか?



98 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:01
>91
a[i] の a は &a == &a[0] だし
b[j][k] の b は &b == &b[0] == &b[0][0] だよ。

で、だ。
*a == a[0] だけど、 *b == b[0] であって、 *b != b[0][0] だよもん。

ここを乗り越えればポインタ博士へ一歩前進だ。がんがれ



99 名前: 68 投稿日: 02/06/03 04:02
>>94
じっくり考えたらなんとなくわかってきました。

a[i]というのはaがポインタでa[0]のアドレスを指し、
例えばa[2]とかがa[0]の場所から2つめの場所にある値ってことですか?


100 名前: 68 投稿日: 02/06/03 04:05
>>98
a[i]と宣言した場合
a==&a[0]ではないのですか?

すいません。今日からはじめてC言語を勉強し始めたので。
一日ずっとやってこのざまです。


101 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:16
>>97>>98
Cではポインタは基本的に一次元配列しか指すことができません。
だから、bは array[k]という一次元配列を指すようにしているわけです。
(*b)[x]は、b[0][x]と同じ意味です。(b[0])[x]と考えて下さい。
*b[x]は、*(b[x])となってしまうので、b[x][0]と等価になってしまいます。
b[x]は、同じ理由から、b[x][0]へのポインタとなります。


102 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:19
>>100
そうですね。a == &a[0]です。&a != &a[0]です。


103 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:24
bをインクリメントすると、sizeof b[k] だけ増えます。
もしc[i][j][k]という配列があったとして、cをインクリメントすると、
sizeof c[j][k] だけ増えます。
ここで誤解のないように書いておきますが、cは定数ですので、
直接インクリメントできないので、例えば

int c[1][2][3], (*d)[2][3];

のように定義しておき、d = c; とすれば、dをインクリメントしたり
デクリメントしたりできます。


104 名前: 68 投稿日: 02/06/03 04:28
>>102
今いろいろためしていたら
&a != &a[0]
となったのですが、これはなぜでしょう??
例題が悪かったのでしょうか?
こうなる場合もあるということでしょうか?


105 名前: 68 投稿日: 02/06/03 04:29
間違えました
&a == &a[0]
です


106 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:30
申し訳ない。間違いがありました。
sizeof b[k] -> sizeof(type[k])
sizeof c[j][k] -> sizeof(type[j][k])


107 名前: 68 投稿日: 02/06/03 04:32
>>106
typeってなんですか?


108 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:34
ええと、&a == &a[0] となるのは、値が同じになるということですが、
Cの文法上から言えば、意味が違います。
aはaddress of array[0]で、a[0]はvalue of array[0]です。偶然に
値が同じになることがあるかもしれませんが、何の意味もありません。
例えば、aが0x1000で、a[0]に0x1000が入っていたら、&a = &a[0] と
なることでしょう。これが同じでも意味がないことはわかりますね?


109 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:36
>108
意味は違うが値はいっしょ
値がいっしょになるのは保証されてる


110 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:37
>>108
間違いでした。スマソ。&aと&a[0]の値はいつも同じになりますが、
&aはaddress of array[i]、&a[0]はaddress of typeとなり、意味が
違います。
typeとは、intとかdoubleとか、あるいはstructなどの型のことです。


111 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:37
>>108は、*aと*a[0]を比較してました。ごめんなさい。


112 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:39
\ │ ハァ? .| ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/
___ ___ .\ | |/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
|ハァ?| |ハァ?| \.└――──―──/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
 ̄∩( ゚Д゚ ) 〃 ̄∩( ゚Д゚ )\ ヽ(゚Д゚ )ノ ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
ヾ. ) ヾ. ) \∧∧∧∧∧/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
| | | │ │ | .< 激 >.| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /
(__)_) (__)_) < ハ し >.| (゚Д゚)ハァ? 最 中 .| ./
────────────< な ァ く >────────────────
|o ゝ○ノ| ::/^'ヽヽ:::::::< 予 ? > / ○ _ ○\ /
.ヽ( )_,,ノ |ゝ○_ノ o|:::::< 感 >( ││ )< / \ ア ?
^'' `‐' ヽ..,,_( )ノ ::l< !! > \ 丿 | / \
~~ ( / ̄ ̄ヽ -‐‐‐--l-∨∨∨∨∨. /  ̄ ̄ \ \____
,,,, | |||!|||i|||!| | ~^'‐..,,_/ /. ____.\( )
(:::::}| :| |ll ll !! !.| | ,,,, イ ~''/ Ю)__) \ /
. ~~ | :|!! || ll|| !!:| | {:::::) ::l ./ | ゚Д゚.| ハァ? . \ | |(゚Д゚) ハァ?
. | | ! | l ~~ l / ^^^^^ \. \ \⊂)
`ー--― 'ノ / \. ) ) |


113 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:39
\ │ ハァ? .| ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/
___ ___ .\ | |/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
|ハァ?| |ハァ?| \.└――──―──/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
 ̄∩( ゚Д゚ ) 〃 ̄∩( ゚Д゚ )\ ヽ(゚Д゚ )ノ ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
ヾ. ) ヾ. ) \∧∧∧∧∧/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
| | | │ │ | .< 激 >.| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /
(__)_) (__)_) < ハ し >.| (゚Д゚)ハァ? 最 中 .| ./
────────────< な ァ く >────────────────
|o ゝ○ノ| ::/^'ヽヽ:::::::< 予 ? > / ○ _ ○\ /
.ヽ( )_,,ノ |ゝ○_ノ o|:::::< 感 >( ││ )< / \ ア ?
^'' `‐' ヽ..,,_( )ノ ::l< !! > \ 丿 | / \
~~ ( / ̄ ̄ヽ -‐‐‐--l-∨∨∨∨∨. /  ̄ ̄ \ \____
,,,, | |||!|||i|||!| | ~^'‐..,,_/ /. ____.\( )
(:::::}| :| |ll ll !! !.| | ,,,, イ ~''/ Ю)__) \ /
. ~~ | :|!! || ll|| !!:| | {:::::) ::l ./ | ゚Д゚.| ハァ? . \ | |(゚Д゚) ハァ?
. | | ! | l ~~ l / ^^^^^ \. \ \⊂)
`ー--― 'ノ / \. ) ) |


114 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:40
>>112
そう非難しないでくれよ。2chは間違えに気づいても、削除できない
んだから。


115 名前: 68 投稿日: 02/06/03 04:41
>>108
確かにa[0]を参照するならそのとおりだと思います。

aがaddress of array[0]なら
&aはいったい何を示しているのでしょう?
プログラムでは&aもまたaddress of array[0]となったのですが。。


116 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:43
>>115
Cの文法上、この場合は、ただのaも&aも、同じ意味になります。
aが定数だからです。


117 名前: 68 投稿日: 02/06/03 04:43
>>111
なるほど。


118 名前: 68 投稿日: 02/06/03 04:45
>>116
なるほど、わかってきました。
ではb[i][j]の場合はどうなるのですか?

(*b)[x] ←この表記が理解できないです


119 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:48
>>118
配列演算子はすべて優先順位が等しいので、左から右に解釈されます。
つまり、b[i][j]は、(b[i])[j]と同じです。
b[0]と*bは等しいので、b[0][j] == (*b)[j]となります。
*b[j]と書いたら、*(b[j])となり、b[j][0]になってしまいます。
これは、*演算子が[]演算子より優先順位が低いためです。


120 名前: 68 投稿日: 02/06/03 04:52
>>119
なるほど。非常に良く分かりました。
これを踏まえて今までのログをもう一度読んで見ます


121 名前: デフォルトの名無しさん 投稿日: 02/06/03 04:56
>>120
途中間違いがあって非常にすみませんでした。もう少しよく考えて
書けばよかったのですが、チャット形式になると、どうしても間違い
が顔を覗かせます。
ちなみに、int **a; なんて形式もすぐに出てきますので、わからな
くなったらまた書き込みしてみて下さい。誰かが答えてくれるはず
です(他力本願)。


122 名前: 68 投稿日: 02/06/03 04:58
>>121
とんでもないです。
いろいろ教えてくださってありがとうございました。
おかげでかなり理解できました。



123 名前: デフォルトの名無しさん 投稿日: 02/06/03 12:45
>わからなくなったらまた書き込みしてみて下さい。誰かが答えてくれるはず
>です(他力本願)。
余計な事書くなって・・・



124 名前: デフォルトの名無しさん 投稿日: 02/06/03 13:13

  ∧ ∧   カタ       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚),____カタ__< みなさんさようなら…と、
  / つ._.|| ̄ ̄ ̄ ̄ ̄ ̄| \__________
 (,  |\.|| Upple iBook |
      \,,|============|





125 名前: デフォルトの名無しさん 投稿日: 02/06/03 14:47
読み込むファイルをランダムに変更したいのですが
どのようにすればいいのでしょうか?
fopen()は文字列しか引数として受け取ってくれないと聞きました。
fopen(rand()%X,"r");
ということは出来ないのでしょうか?



126 名前: デフォルトの名無しさん 投稿日: 02/06/03 14:50
文字列に変更すれば良いじゃん


127 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:00
>>125
*Filename[]={"file1.aaa","file2.aaa"};
みたいにファイル名のリストつくっといて、
fopen(Filename[rand()%X],"r");
、とか


128 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:01
確かに
b[i][j]と宣言して

b==b[0]==*b となって
b[0][0]==(*b)[0] となるのに
式を見ればあたりまえだが b[0] != b[0][0]
となるのはなぜなんだろう?


129 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:02
>>125

char buf[128];
sprintf(buf, "%d", rand() % X);
fopen(buf, "r");


130 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:03
>>128
b[0]はポインタ(b[0][0]のアドレス)。b[0][0]は値。


131 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:05
b[0] == &b[0][0]


132 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:06
>>130
そうだけどさ

b==b[0] となってるから両辺の右側に
[0]をつけるとおかしくなるって変じゃない?
b が値を持つことが変だと思うんだけど


133 名前: 125 投稿日: 02/06/03 15:08
ありがとうございました。
無事、解決しました。


134 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:13
for文で ++i とする場合は
どんな用途で使われるのですか?


135 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:21
printfのfって何の意味ですか??
ファイルとかフィールドとか?



136 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:21
>>135
format


137 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:29
好きなMusicianは誰ですか?


138 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:33
加藤茶


139 名前: デフォルトの名無しさん 投稿日: 02/06/03 15:35
>>132
あんたの頭がおかしいだけ。
型の勉強をした後>>131をみれ 


140 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:03
>>139
>あんたの頭がおかしいだけ。

一言多いアフォだな


141 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:05
>>140
まぁ、値を持たない変数とか言ってる時点である程度の寝たレスは覚悟した方がいいと思われ。


142 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:07
ある値を持つb 自体はどういう意味があるの?
>>131は理解できるけど


143 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:10
>>141
int i;
printf("%d ",i);

するとなんか大きい数が表示されるけど
これはなんか意味あるの?
とりあえずはiを格納するメモリ領域が
決まって、iに値を入れる前はその領域に
以前に書かれたデータがそのまま表示されてるだけだと思うけど


144 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:11
>>143
そらそうだね。


145 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:12
>>143
それとあれとの関係は?
わからなかったっす。


146 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:14
141==144==145

( ´,_ゝ`) プッ



147 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:15
>>146
オチがこれか。
ファイト!


148 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:19
>>147
オマエモナ


149 名前: デフォルトの名無しさん 投稿日: 02/06/03 16:43
>>148
そんなあなたも>>141


150 名前: 馬鹿☆栗子 投稿日: 02/06/03 20:28
void mul(const int ma[2][3],const int mb[3][2],int mc[2][2])

っていう mc=ma+mbのような配列を作りたいんですけど

 だれか 教えて


151 名前: デフォルトの名無しさん 投稿日: 02/06/03 20:36
意味側下欄


152 名前: デフォルトの名無しさん 投稿日: 02/06/03 20:40
>>150
mc = ma * mbでしょ。


153 名前: デフォルトの名無しさん 投稿日: 02/06/03 20:45
>配列を作りたいんですけど
int ma[2][3]={
{0,1,2},
{3,4,5}
};
int mb[3][2] = {
{0,1},
{2,3},
{4,5}
};
int mc [2][2];
mul( ma, mb, mc);



154 名前: 粟 稗子 投稿日: 02/06/03 21:13
char *a[]とはどういうこととなのか教えていただきたいですわ。



155 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:17
>>154
char型へのポインタの配列a。
もう逝ってよし!


156 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:25
char *とintを引数に取りchar *を返す関数へのポインタを返す関数funcのプロトタイプを書け。(15点)


157 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:27
char* iya_n(char *cp, int *ip);


158 名前: 157 投稿日: 02/06/03 21:29
Σ(゚Д゚;)しまった罠か


159 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:33
>>156
funcの引数は?


160 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:35
>>159
任意。
つーか俺もわからん。


161 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:36
>>156
char *(*func())(char *, int);


162 名前: 160 投稿日: 02/06/03 21:37
char (*)(char *,int)
これを返す関数か・・・わからん


163 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:40
>>161
それだとfuncの引数がchar *とintにならない?
とすると、char *(*func(char *, int))(void);
こうなるんだろうか。


164 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:42
>>163
それだとfuncの引数がchar *, intになってしまうよ。


165 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:42
>>163
ならないよ。


166 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:43
typedef char* iya_n(char *cp, int *ip);
iya_n func( ... );


167 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:44
>>163はchar *型を返す関数へのポインタを返す、char *, intを引数に取る関数func。


168 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:44
iya_n *func( ... ); ダナ


169 名前: 163 投稿日: 02/06/03 21:45
そうなのか・・・
じゃあfuncがintを引数に取るとすると、>>161はどんな感じになるの?


170 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:46
>>169
char *(*func(int))(char *, int);


171 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:46
>>169
char *(*func(int))(char *, int);


172 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:47
>>170-171
そこにfuncの引数リストが来るのかー!!
ありがとう。


173 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:58
配列を宣言する時
n=5;
a[n]としたいんですがどうすればいいでしょう??
defineはなしで。
nが変数なので


174 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:59
>>173
C99対応コンパイラでそのままコンパイルできる。


175 名前: デフォルトの名無しさん 投稿日: 02/06/03 21:59
>>173
できません。
C99ではできるらしいけど。


176 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:02
おお!ケコーン>>174-175


177 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:05
>>173
配列定義は整数定数式じゃなきゃ無理


178 名前: 1 投稿日: 02/06/03 22:07
>>173
ポインタにしてmalloc



179 名前: こまった君 投稿日: 02/06/03 22:10
double **ps;
double ps_dammy[30];
for(i = 0; i<30; i++ ) {
〜〜〜中略〜〜〜
ps_dammy[ i ] = psbuff;
}
ps = &ps_dammy[0]
for (j=0; j<20; j++){
printf (" ps[ %d ] = %f \n ", j , ps[j]);
}
これで、0ばかり表示されます。うまくはいっていないようです。
ちなみに中略の部分の問題ではないです。(∵一次元の配列ポインタならうまくいくので。。)
僕的には、
ps = &ps_dammy[0];
とすると、下記の二次元配列の■の部分に格納されると、認識しているのですが、違うのでしょうか?
  j→
  ■■■■‥■■
i   :
↓□□□□‥□□
  □□□□‥□□
要は、上記のような■の行にps_dammy[30]という配列を入れたいんですが。。
--------------------------------
または下記のような列にいれたい。。。けど、
下記のような列だと、メモリ内のアドレスは、とびとびですよね?
  j→
  ■□□□‥□□
i   :
↓■□□□‥□□
  ■□□□‥□□



180 名前: ファナルアンサー? 投稿日: 02/06/03 22:11
さてここで問題

そんな困惑中の>>173さんが次にとる方法は?

A #defineを使う        B malloc/free
C Cがイヤになって逃亡     D >>174>>175の仲人をつとめる


181 名前: こまった君 投稿日: 02/06/03 22:13
>>180
C でファイナルアンサー。


182 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:15
C でファイナルロリータ


183 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:16
>>180
マジレス。C99未対応ならBです。


184 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:17
俺はロリコン


185 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:17
psは二次元配列とちゃいまっせ。


186 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:17
int float_to_int_cast(float n)
{
 const int bias = 1258291200;
 n += *(float*)&bias;
 return *(int*)&n - bias;
}

float>intへのキャストに上の関数を使うと良いらしいんですが、
負数の時におかしい値が返ってきます。
負数に対応してないならunsignedにすると思うのですが、
そうなっていないので、コードのバグでしょうか?


187 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:23
>>179
何をしたいのかよくわからんが、

double *pp[30];
for (j = 0; j < 30; j++) pp[j] = &ps_dammy[j];
ps = pp;

で、ps[j][0] としてアクセスすれば目的は達成される。

>>186
ダメダメ。アドレスをキャストしても、肝心の値のキャストがされていない。


188 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:23
>>179
何をするプログラムなの?


189 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:24
>>186
おいおい、なんでそんなtrick code使うんだね?
ってのはともかく。

biasの値の意味を正確に説明してみ? それができたら答えも分かるっしょ。


190 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:30
>>186
IEEEの定義を読まないと答えられない問題だわね。


191 名前: 186 投稿日: 02/06/03 22:37
bias の値は ((23 + 127) << 23) らしいっす。
んでもって、何かの本に書いてある高速キャストのテクニックだとか。


192 名前: 186 投稿日: 02/06/03 22:38
>>187
レスどもです。
アドレスをキャストして、int値を(int値のメモリイメージのまま)floatとして使うらしいです。


193 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:39
>>191
その23, 127, 23はどこからきているのか、だよ。


194 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:45
>>193
IEEE754の定義によると、floatは、

・符号1ビット
・指数部8ビット
・仮数部23ビット
で出来ている。

正規化バイアスは0x7f(127)である。


195 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:49
>>194
正規化バイアスは、指数部の正規化のためのものです。


196 名前: 186 投稿日: 02/06/03 22:49
>>193
わかんないです。
分かれば自分で結論が出せるんでしょうが…
負数に対応していそうなんだけど、実際どうなんだろう?
って事です。

ソースコピペで自前のライブラリに組み込む時に、
unsignedに直すべきか否かで迷っていたりするので。



197 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:54
>>196
たとえunsignedにしても、nが負だったときにはやっぱりおかしくなるっしょ。意味ない。


198 名前: デフォルトの名無しさん 投稿日: 02/06/03 22:56
>>196
先頭の1ビットを見て、0と1の時で処理を分けたら?


199 名前: デフォルトの名無しさん 投稿日: 02/06/03 23:00
>>197
それでも、戻り値がunsignedだったら負数には対応してない
という主張が多少でも読みとれるんじゃないかと。

>>198
それじゃ高速変換の意味が無いと思います


200 名前: デフォルトの名無しさん 投稿日: 02/06/03 23:10
そこまでするならFLD、FISTを使ったほうがいい


201 名前: デフォルトの名無しさん 投稿日: 02/06/03 23:20
この場合、単なるキャストのほうがマシでない?


202 名前: デフォルトの名無しさん 投稿日: 02/06/03 23:38
23と127の謎を解く
http://www.mathworks.com/access/helpdesk/jhelp/toolbox/fixpoint/c3_bev12.shtml


203 名前: デフォルトの名無しさん 投稿日: 02/06/03 23:42
fld/fistpを使った方が微妙に遅かったけど、負数も正確にキャストでけた。
1000万回のキャストループで
>>186 85ms
fld&fistp 123ms
(int) 931ms
となった



204 名前: デフォルトの名無しさん 投稿日: 02/06/03 23:44
>>203
(int)を使うと、FLDCW命令が生成されるので、ストールが発生して
遅くなるんだろうね。


205 名前: こまった君 投稿日: 02/06/04 00:29
>>187
ということは、
>>179のようなとき、次の認識はあっていますよね?
ps = &ps_dammy[0];
とすると、下記の二次元配列の■の部分に格納されると、認識しているのですが、違うのでしょうか?
  j→
  ■■■■‥■■
i   :
↓□□□□‥□□
  □□□□‥□□

>>188
すでにある人の作った会席プログラムをいじって改造したいんですが,内部はいじれないので、
ps[i][j]という二次元配列になんとか格納して、送り出そうとしてるわけです。
ただ、今あるps_dammy[30]という配列を
ps2[i][0]に入れなければならないので、それには、
for文などで、一個一個いれなければならないのかな..と思って質問した次第です。


206 名前: デフォルトの名無しさん 投稿日: 02/06/04 00:35
>>205
それだったら、
double **ps;
とせずに、
double (*ps)[30];
として、ps = ps_dammy; とすればよろしい。
ps[0][0]〜ps[0][29]まで使える。

double **psでどうしても使いたいなら、もう一つポインタ変数を用意して、
double *ps2 = ps_dammy;
ps = &ps2;
として使えばよいが、メモリを二回参照しなければならないので、遅くなり
非効率的。


207 名前: こまった君 投稿日: 02/06/04 00:44
>>206
さっそくのレス感謝いたします。
*psに添え字をつけるのは思いつきませんでした。。
ps[0][ i ]
ではなくて、
ps[ i ][0]のように簡単に入れるほうほうはありませんか?
ps[0][0]〜ps[29][0]のように使用したいのです。
つまり、下記のようにです。こんなのどっちでもいいと思われるかもしれませんが、入れる解析プログラムのほうが複雑なので、いじれないので、解析プログラムが必要なように用意してやらなけりゃいけないのです。
  j→
  ■□□□‥□□
i   :
↓■□□□‥□□
  ■□□□‥□□
これを**psで宣言すると、
■の部分は、メモリ内のアドレスがとびとびになりますよね?
ps = ps_dammy;
とすると、下記のようにはいっちゃいますよね?
  j→
  ■■■■‥■■
i   :
↓□□□□‥□□
  □□□□‥□□


208 名前: デフォルトの名無しさん 投稿日: 02/06/04 00:51
>>207
問題の要点がよくわかった。
そしたら、
double (*ps)[1]; として、
double (*ps)[1] = (double (*)[1])ps_dammy; とすれば、
ps[0][0]〜ps[29][0]まで使える。


209 名前: デフォルトの名無しさん 投稿日: 02/06/04 00:54
>>207
ただし、ps[i][1]〜ps[i][29]までは使えない。
もしワークエリアとして上の変数を使いたいなら、やはりループで
代入するしかない。


210 名前: こまった君 投稿日: 02/06/04 01:07
>>208
ありがとうございます。
..二行目がよくわかりませんが、
代入の仕方をキャストして代入してるってとこでしょうか.
この方法について、まずは調べて見ます。
ありがとうございました。これでやってみます!

>>209の意味は、ようするに、
こんどはps[0][〜]のほうがいっきに代入したりできなくなる。
諸刃の・・ってことで合ってますよね?
つまり、ps[0][〜]のほうに入れたければ、ループで入れろと。
ま、こちらのほうは、5列くらいしかないものですので、ループで回すなりなんなりします。


211 名前: デフォルトの名無しさん 投稿日: 02/06/04 01:11
>>210
>>208は、違う表現のポインタに変換するためにキャストは必須です。
ないと、エラーが出ます。

>>209については、その認識であってます。無理矢理列が1の二次元
配列として認識させているためにこのようなことが起こります。


212 名前: デフォルトの名無しさん 投稿日: 02/06/04 01:14
>>210
>>209の意味は、ps[i][1]〜ps[i][29]は、ps[1][0]〜ps[29][0]と重なって
しまうという意味です。だから、ループで代入するには、>>208のような
方法は使えないということです。


213 名前: こまった君 投稿日: 02/06/04 01:31
>>212
アドレス上重なるということを理解するのが非常に難しいですね、
>>208の方法だと、
double data[30];
double ps_dammy[30];
double (*ps)[5];
for(i=0; i<4; i++){
  for(k=0; k<30; k++) ps_dammy[ k ] = data[ k+i ];//i によって一個ずれたps_dammy[0〜30]を作る
double (*ps)[i] = (double (*)[i])ps_dammy;
}
このようなことをすると、アドレスがかぶって上書きみたいになる(ようするにできない)ってことかな??


214 名前: デフォルトの名無しさん 投稿日: 02/06/04 01:42
>>213
そのように書くと、ps[0][0]〜ps[0][4]にps_dammy[0]〜ps_dammy[4]
が入ってしまいます。
やはり素直に、
double ps[30][5];
for (i = 0; i < 30; i++) ps[i][0] = ps_dammy[i];
のように書いた方がよいですね。


215 名前: こまった君 投稿日: 02/06/04 01:46
>>214
なるほど。。
難しいところですね。
でわ。とりあえず、実践してみます。
ありがとうございました!


216 名前: デフォルトの名無しさん 投稿日: 02/06/04 02:05
Algorithms in C セジウィック著の完全日本語略はないですか??


217 名前: デフォルトの名無しさん 投稿日: 02/06/04 02:17
>>216
第1巻〜3巻まで持ってるよ。
近代科学社刊。
今ではAlgorithm in C++の方しか書店で見かけなくなったけど、
注文すれば手に入るはず。


218 名前: デフォルトの名無しさん 投稿日: 02/06/04 02:19
>>216
第1巻:ISBN4−7649−0255−9 ¥2,800
第2巻:ISBN4−7649−0256−7 ¥3,200
第3巻:ISBN4−7649−0257−5 ¥3,300
各税別


219 名前: デフォルトの名無しさん 投稿日: 02/06/04 02:27
>>217,218
ありがとうございます。探してみます。


220 名前: デフォルトの名無しさん 投稿日: 02/06/04 06:25
a<i<b
の条件を論理的に表したらどうなるのでしょう??


221 名前: 220 投稿日: 02/06/04 06:32
間違えました
(a<i<b)の範囲ではないi 
はどのように表現すればいいのでしょう?


222 名前: デフォルトの名無しさん 投稿日: 02/06/04 06:35
a<=i || i>=b


223 名前: 220 投稿日: 02/06/04 07:31
>>222
ありがとうございます


224 名前: デフォルトの名無しさん 投稿日: 02/06/04 07:32
(i<=a)||(b<=i)


225 名前: 220 投稿日: 02/06/04 07:34
>>224
ありがとうございました。。

って222は俺がやってたミスと同じだ。



226 名前: デフォルトの名無しさん 投稿日: 02/06/04 09:06
>>186
解説。
 const int bias = ((23 + 127) << 23);
// biasは、IEEE 32bit float表現で +1.0E23。

 n += *(float*)&bias;
//  仮数部は最上位に立ったbitのひとつ下から精度分が格納される。
//  1.0E23を加算することで、指数が23未満だったときに23に引き上げられ、かつ
// 仮数部に隠れた最上位ビットが1.0E23(今加算した値)となる。
//  指数が23(精度と同じ)ということは、仮数部がそのまま整数となる。
//  なお指数部がもともと23以上だった場合はこの限りでない。
//  また、負数で絶対値が1E23未満だった場合、この加算で
// 正数(絶対値を1E23から引いた値)になり、その最上位ビットが隠れ、指数が1減る。

 return *(int*)&n - bias;
//  指数が23の場合、指数23のイメージを引くことで、整数部だけが残る。
// 23以外だったときは壊れる。
//  負数だった場合、指数が22のため、23を引いて-1(オール1)になる。
// 仮数部も補数になっているが、指数が1少なかったため、小数点の位置がひとつ低い。
// つまり結果として2倍の値が得られる。


227 名前: デフォルトの名無しさん 投稿日: 02/06/04 10:33
WINDOWSでVC++を使っているのですがMFCやWIN32APIは理解したほうがよいのですか>
3ねんくらいC言語を使っているのですがいまだにHelloWorldしかできません。


228 名前: デフォルトの名無しさん 投稿日: 02/06/04 10:46
MFCとかWin32APIの前にもう少しCを勉強汁。


229 名前: デフォルトの名無しさん 投稿日: 02/06/04 10:47
>>227
3年で1週間レベルだから、100年ぐらいは頑張ってね。


230 名前: デフォルトの名無しさん 投稿日: 02/06/04 11:01
>>229
HelloWorldなら1時間レベルでは


231 名前: デフォルトの名無しさん 投稿日: 02/06/04 11:03
>>230
環境を整えたり、Cの概要を調べるだけで1時間以上かかると思われ。


232 名前: デフォルトの名無しさん 投稿日: 02/06/04 11:30
じゃぁ中とって1日レベル。
3年で1日レベルか・・・・憐れだ。


233 名前: デフォルトの名無しさん 投稿日: 02/06/04 12:34
227は今までgccとか使ってて、
Windows上だとHello Worldしかだせないと言ってるのでは?


234 名前: デフォルトの名無しさん 投稿日: 02/06/04 12:37
だろうな


235 名前: デフォルトの名無しさん 投稿日: 02/06/04 12:37
>>227
>WINDOWSでVC++を使っているのですがMFCやWIN32APIは理解したほうがよいのですか
理解しないと何もできません。


236 名前: デフォルトの名無しさん 投稿日: 02/06/04 13:18
プログラムってやりたいことない人は上達するのですか?
教科書とか参考書って見ていてあまり面白くないですし…



237 名前: デフォルトの名無しさん 投稿日: 02/06/04 13:23
>>236
コンピューターを自分の思うがままに操ることに快感を覚える
人は、プログラムの上達が人一倍早いです。
興味が沸かないなら、他の興味がある事を探した方が得策で
しょう。


238 名前: デフォルトの名無しさん 投稿日: 02/06/04 14:04
>>237
ほかにない場合は…
ぜんぜん伸びないなぁ、と思う今日この頃。
本に頼るからだめなのでしょうか?
言語と全然関係ないじゃん。


239 名前: デフォルトの名無しさん 投稿日: 02/06/04 14:26
本は頼るものじゃなくて利用するもの、と言ってみたり。

プログラム書いてて面白いと思えてればそのうち伸びるでしょ、思えていないなら早めにやめたほうがいいし。
参考書なんてどれもつまらないもの。
さっさと卒業して他のものに手だそう。
キタ━━━━(゚∀゚)━━━━!!と思える本に出会おう。


240 名前: デフォルトの名無しさん 投稿日: 02/06/04 15:24
>>239
キタ━━━━(゚∀゚)━━━━!!
と思える本とは何ですか。
お勧め本見てもぱっとしない



241 名前: デフォルトの名無しさん 投稿日: 02/06/04 15:46
Cマガ、Interface、or 洋書


242 名前: デフォルトの名無しさん 投稿日: 02/06/04 15:59
>>240
スレ違いだけどModern C++ Designとか


243 名前: デフォルトの名無しさん 投稿日: 02/06/04 16:08
C言語(結局VC++)使っているとしてPGから見るOSというのはAPIですよね。
WinならWin32API(MFCやATLはひとまず置いておいて)ですよね。
WinでのProgramを理解するならWin32を理解しろということですよね。
それを使ってC言語の予約語を使ってWindowsでプログラムするのがWindowsプログラムだと。

で、Win32をC++で使うときに一応使い易くするために作ったのがMFCなりOWCだと。


当たり前すぎて馬鹿らしいでしょうが、
これであってますよね。


244 名前: デフォルトの名無しさん 投稿日: 02/06/04 16:13
もう15年前だが、俺も文法なんて1週間かからずに覚えたな。
勉強したって感じより、ゲーム感覚でのめり込んで遊んでるうちに
覚えてしまったって感じ。本なんてなんでもよかったよ。
でも、K&Rだけは読んでもわけわからんかったが(笑)。


245 名前: デフォルトの名無しさん 投稿日: 02/06/04 16:45
getchar()などで入力を待っている状態に
difftime( now,start )などで待ち時間を表示したいのですが
どうすればいいのでしょうか?


246 名前: デフォルトの名無しさん 投稿日: 02/06/04 16:59
selectするとか、thread使うとか。


247 名前: デフォルトの名無しさん 投稿日: 02/06/04 17:03
>>241
洋書なら何でも良いのか?
Cマガと書いてるあたりネタとしか思えないが


248 名前: デフォルトの名無しさん 投稿日: 02/06/04 17:06
float型の配列を0クリアするのにmemset()を使ってよいですか?
他に初期化するのに使える関数はありますか?


249 名前: デフォルトの名無しさん 投稿日: 02/06/04 17:08
>>248
良い


250 名前: 245 投稿日: 02/06/04 17:16
>>246

select case()を使えってことでしょうか?
後、threadとは何でしょうか?


251 名前: デフォルトの名無しさん 投稿日: 02/06/04 17:18
selectとswitchは違うぞ


252 名前: デフォルトの名無しさん 投稿日: 02/06/04 17:20
C#、C++雑談スレッド     
http://pc.2ch.net/test/read.cgi/prog/1023178697/


253 名前: デフォルトの名無しさん 投稿日: 02/06/04 19:24
strnlenという関数を使いたいのですが、使えません。
LSI CでもFreeBSDでも使えませんでした。なぜなのでしょうか…?
strncpyなんかは使えるのに…

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strnlen.3.html


254 名前: デフォルトの名無しさん 投稿日: 02/06/04 19:25
この関数は GNU の拡張である。
っていう文字が見えませんでしたか?


255 名前: デフォルトの名無しさん 投稿日: 02/06/04 19:58
>>254
それってどういう意味ですか?


256 名前: デフォルトの名無しさん 投稿日: 02/06/04 20:00
>>255
その関数がGNUの拡張だってこと


257 名前: デフォルトの名無しさん 投稿日: 02/06/04 20:01
ワラタ


258 名前: デフォルトの名無しさん 投稿日: 02/06/04 20:08
size_t
strnlen(s, n)
char const *s;
size_t n;
{
size_t i;
for (i=0; i<n && *s; i++, s++) ;
return i;
}



259 名前: デフォルトの名無しさん 投稿日: 02/06/04 20:30
size_t size = sizeof typeof(3.14 * gundam);


260 名前: デフォルトの名無しさん 投稿日: 02/06/04 21:02
Cプログラマは『新ANSI C言語辞典』って持ってた方がいい?
http://www.amazon.co.jp/exec/obidos/ASIN/4774104329/qid=1023192020/sr=1-48/ref=sr_1_2_48/249-8054570-0244362


261 名前: デフォルトの名無しさん 投稿日: 02/06/04 21:06
ただのCなんぞK&R1冊あれば十分。
C++なら色々買え。


262 名前: shige 投稿日: 02/06/04 21:15
CはK&RとエキスパートCプログラミングで十分。
それ以外は不要。


263 名前: 260 投稿日: 02/06/04 21:19
>>261-262
ってことはなくてもいいってことですね。


264 名前: shige 投稿日: 02/06/04 21:25
info/man
調べものはこれで十分


265 名前: デフォルトの名無しさん 投稿日: 02/06/04 21:27
ふっふっふ


266 名前: デフォルトの名無しさん 投稿日: 02/06/04 23:23
C/C++を独習し始めて何ヶ月くらいでVectorにフリーソフトを出せるくらいに
なりますか?ソフトにもよると思いますがいちばん簡単なもので。


267 名前: デフォルトの名無しさん 投稿日: 02/06/04 23:24
1日。Hello Worldプログラム(ソース付属)


268 名前: デフォルトの名無しさん 投稿日: 02/06/04 23:26
>>266
何でそんなこと訊くの?


269 名前: デフォルトの名無しさん 投稿日: 02/06/04 23:32
packがほしいとか。
ってか、今もpackあるの?


270 名前: デフォルトの名無しさん 投稿日: 02/06/04 23:35
pack最近(というかここ数年)届かねーぞゴルァ。
もう作ってないんだろうけど。


271 名前: デフォルトの名無しさん 投稿日: 02/06/04 23:57
Vectorなんて自分で登録するんだからソフトの出来なんて関係ないよ


272 名前: デフォルトの名無しさん 投稿日: 02/06/05 00:02
vectorに登録されるソフトって増える一方なんだろうか。


273 名前: デフォルトで名無しさん 投稿日: 02/06/05 06:59
>>271
え、あれって自分で登録するもんだったの?
漏れんとこは登録させてくれって向こうから来たよ。
もうかなり昔だけど。



274 名前: デフォルトの名無しさん 投稿日: 02/06/05 10:17
まだ登録ソフト数が少なくて数を増やしたかったんだろ


275 名前: デフォルトの名無しさん 投稿日: 02/06/05 13:40
makefileで教えてください。
プログラム中の#defineを、代わりにmakefile中に記述できますか?


276 名前: デフォルトの名無しさん 投稿日: 02/06/05 13:42
>>275
コンパイラオプション熟読。


277 名前: デフォルトの名無しさん 投稿日: 02/06/05 13:49
>>275 多分-D。
>>276 も言ってるように、makefileじゃなくコンパイラの問題だと思うがどうか。


278 名前: デフォルトの名無しさん 投稿日: 02/06/05 13:57
>>276
>>277
べりーさんくす。-Dでできました。感謝age


279 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:16
Sun のCコンパイラなんですけど「機能」などの文字列定数がコンパイル時に
警告: 不適切なエスケープ: \<0xba>
を出します。
どうしたものでしょう?


280 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:19
>>279
0xba->ASCIIじゃないっす。


281 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:19
>>279
>\<0xba>
漢字コードじゃないの?


282 名前: 素人ですみません 投稿日: 02/06/05 15:22
C言語をこれから学びたいと考えてますが、何分お金がないのでタダで学ぼうと
図書館に行ったんですが、どの本に付属しているCDROMがいいのかっていうのが
判りません。

cygwinを使えって言われたんですが、これはどこで手に入るんですか、また
これと本を借りれば学べるんですかね?


283 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:23
http://www.cygwin.com/


284 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:24
>>279
[ュ],5cba,FAAD,3F

>>282
検索してからでも良いんじゃない?せっかくのインターネット。


285 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:24
>>282
マルチしまくりですね。


286 名前: >285 投稿日: 02/06/05 15:26
いや、すみません。
早く知りたいもので。

以後気をつけます。


287 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:31
早く知りたきゃさっさと検索すれ。


288 名前: 279 投稿日: 02/06/05 15:35
ヽ(`Д´)ノウワァァァン!!
どうすればいいのー?


289 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:37
printf("機能:%s", ss);

とかやってますか?


290 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:39
>>288
ソースをshift jisで書いてるんじゃないの?
EUCとかで書けってことかと。


291 名前: 279 投稿日: 02/06/05 15:40
やってます。


292 名前: 279 投稿日: 02/06/05 15:40
マシンはShiftJISみたいなんです。あまりUNIX詳しくないんです。


293 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:43
0x5cがエスケープシーケンスとして見なされてるんじゃないの?
"機能"→"機能\"にしてみれ


294 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:45
printf("%s%s", "機能:", ss);

なんつって。


295 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:47
コンパイラがsjisのエスケープをしてなくて平気な環境ってことは
sjisでは書くなという意思表示だと思うが。
それに「マシンがsjis」って何だよ(笑)文字コードはマシンには依存しないし。
エディタ次第でしょ。


296 名前: 279 投稿日: 02/06/05 15:52
>>293
Pro*Cかますんでそれだとまずいみたいなんです。

>>294
いっしょのような気が

>>295
んだば、秀丸で書いてFFFTPでEUCに変換してアップしてコンパイルすれば
いけるのかなー
やってみよう


297 名前: デフォルトの名無しさん 投稿日: 02/06/05 15:59
>>295
>それに「マシンがsjis」って何だよ(笑)文字コードはマシンには依存しないし。

PC98x1


298 名前: デフォルトの名無しさん 投稿日: 02/06/05 16:13
>>297
PC98x1のVRAMはJISで、SJISではないよな。


299 名前: デフォルトの名無しさん 投稿日: 02/06/05 16:14
ストリームの概念がいまいち掴めません、教えて


300 名前: デフォルトの名無しさん 投稿日: 02/06/05 16:15
279
コンパイラだますだけなら。
printf( "\x8B\x40\x94\x5c %s", s );
printf( "\x8B\x40能 %s", s );


301 名前: デフォルトの名無しさん 投稿日: 02/06/05 16:17
>>299
ファイル開いて。


302 名前: デフォルトの名無しさん 投稿日: 02/06/05 16:18
>>299
よんで


303 名前: デフォルトの名無しさん 投稿日: 02/06/05 16:18
>>299
とじる。


304 名前: デフォルトの名無しさん 投稿日: 02/06/05 17:09
staticな関数のプロトタイプをヘッダーファイルに書いているやつがいるんですが。


305 名前: デフォルトの名無しさん 投稿日: 02/06/05 17:10
許してあげなさい。
生成されるバイナリが膨れるだけで実害はないから


306 名前: 279 投稿日: 02/06/05 17:14
うーん。こまった。


307 名前: デフォルトの名無しさん 投稿日: 02/06/05 17:15
サイズは河原んだろ。意味ないだけで。


308 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:00
>>307
その代わり、同名で引数が違うstatic関数を別ファイルで定義できなく
なる。百害あって一利なし。


309 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:02
>>279
適当なところに\を挿入


310 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:03
>>308
それが目的とか。メリットが想像もつかんけど(笑)


311 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:06
>>306
まだ困ってるの?
EUCに変換やってみようってのはどうなった?


312 名前: 279 投稿日: 02/06/05 18:21
EUCに変換したら表示される文字が化け化けになりました。
しかたないので機能という文字はすべて消しました。めでたしめでたしです。


313 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:32
"機能\"でもだめなのか


314 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:34
>>313
>>296
うーん。
"機能\\"はどうか。


315 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:36
printf("unkounko")でコンソールにunkounkoと出力されますが、
コンソールじゃなくてファイルにunkounkoと出力する関数ってありますか?


316 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:39
fprintf();


317 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:40
>>316
速レスサンクスです。
調べてみます。


318 名前: 名無し募集中。。。 投稿日: 02/06/05 18:42
printf("うんこうんこ");


319 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:49
main()
{
 freopen("test.txt", "w", stdout);
 printf("unkounko");
}


320 名前: デフォルトの名無しさん 投稿日: 02/06/05 18:59
Void氏ね


321 名前: デフォルトの名無しさん 投稿日: 02/06/05 19:21
>>312
SJISに設定したtelnetで化けたとかか。


322 名前: デフォルトの名無しさん 投稿日: 02/06/06 01:11



323 名前: デフォルトの名無しさん 投稿日: 02/06/06 02:49
sscanf(str,"%[^,],%[^,]",buf01, buf02);
で、文字列strをカンマ区切りでbuf01/buf02に読み込めると
どこかのスレで読んだのですが、
%[^,]の部分て、どのような規約によって決まっているのでしょうか?
MSDN(VC++6付属)で「書式指定」で探してみたんですが
いま一歩理解できなかったです。

何をキーワードにして検索すればよいでしょうか?
それとも、自分みたいなアフォにもわかりやすく
説明しているようなページはありますでしょうか?



324 名前: デフォルトの名無しさん 投稿日: 02/06/06 03:20
>>323
ここなんか明快でよくないか?
http://homepage1.nifty.com/hujitako/yapt/SmartScanf2.htm


325 名前: The 中村 投稿日: 02/06/06 11:39
C言語で
ファイルの削除の仕方を教えてください
シェルでchmod→rmを行いsystemでそのシェルを呼び出す方法をしてますが
これ以外で関数一発でファイル削除が出来るようなのってないでしょうか?
サーチしても見つからず困ってます
どうかご教授お願いします


326 名前: デフォルトの名無しさん 投稿日: 02/06/06 11:41
remove
unlink


327 名前: The 中村 投稿日: 02/06/06 11:53
326さん
どうもありがとうございました


328 名前: デフォルトの名無しさん 投稿日: 02/06/06 12:00
削除にchmodはイランだろ。それともディレクトリに対してchmodしてんのか。


329 名前: デフォルトの名無しさん 投稿日: 02/06/07 04:19
コンソールから入力した10進数値の各桁の値を
配列に格納するにはどうしたらよいでしょうか?
文字列から数値変換するのはなしです。




330 名前: デフォルトの名無しさん 投稿日: 02/06/07 04:34
-'0'


331 名前: デフォルトの名無しさん 投稿日: 02/06/07 04:45
>>330
よくわかんないです(´д`;)



332 名前: デフォルトの名無しさん 投稿日: 02/06/07 04:58
>>329
int i;
char str[20];
scanf("%d", &i);
sprintf(str, "%d", i);


333 名前: デフォルトの名無しさん 投稿日: 02/06/07 05:30
>>329

数字 c ---> 数値 c - '0'

ASCII コード表を見ながら、 c に '1' から '9' までの
数字を実際に代入して確認してみてください。


334 名前: デフォルトの名無しさん 投稿日: 02/06/07 05:32
>>329

捕捉。「数字」と「数値」の違いを調べてみて下さい。


335 名前: 1  投稿日: 02/06/07 11:43
本を買えよ


336 名前: デフォルトの名無しさん 投稿日: 02/06/07 11:47
ソフトもかえよ


337 名前: デフォルトの名無しさん 投稿日: 02/06/07 12:02
memcopyの使い方を教えてください。
コピーするのはわかるんやけど、
ヘルプを見ても意味がわからないのです。
memcopyで配列をコピーしたいのです。
例えばp[20][30]の配列をw[20][30]の配列へ・・・


338 名前: デフォルトの名無しさん 投稿日: 02/06/07 12:21
memcopyって何ですか?


339 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:04
#include <mem.h>
void *memcpy(void *dest, const void *src, size_t n);

void *_wmemcpy(void *dest, const void *src, size_t n);

解説

n バイトのブロックをコピーします。
memcpy は,UNIX の System V で使用できます。
memcpy は,n バイトのブロックを src から dest にコピーします。src と dest が重複する場合の memcpy の動作は未定義です。

こう書いてるけど実際、どうやるのかがわからない。



340 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:09
int p[20][30];
int w[20][30];

memcpy((void*)w, (void*)p, sizeof w);

(キャストはいらないかもしれない。)


341 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:20
>>339
memcpyなら知ってます。


342 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:23
C言語でこの意味がわかりません、教えてください

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


343 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:23
Cの2次元配列って隙間なくびっちりだっけ?


344 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:24
>340
憶測でものを言うな!



345 名前: 344 投稿日: 02/06/07 13:25
>343
多分。



346 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:25
>341 ヴォイドレス イラネ


347 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:26
>>342
おまじないです。


348 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:27
>>343
もし隙間があったとしても、このばあい問題ないんじゃねーの?


349 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:27
>>343
配列の要素のアドレスを調べて確認しる。


350 名前: 343 投稿日: 02/06/07 13:30
そりゃそうだなヽ(´ー`)ノ


351 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:30
1 little
2 little
3 little indians,
4 little
5 little
6 little indians,
7 little
8 little
9 little indians,
10 little indian boys.

プログラム中にlittle、indianは一回、数字は2と4から10は一回もでない

誰か教えてください!


352 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:33
>>351が何を言ってるのかわかりません。

誰か教えてください!


353 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:34
>>351 教えて欲しいのはこっちだ。


354 名前: 351 投稿日: 02/06/07 13:34
このプログラムを作らなくてはいけません



355 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:35
            ρ(´-`ρ)
      ★ゆんゆん★
(σ´ー`)σ


356 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:36
>>351
printf(
"1 little \n"
"2 little \n
"3 little indians, \n"
"4 little \n"
"5 little \n"
"6 little indians, \n"
"7 little \n"
"8 little \n"
"9 little indians, \n"
"10 little indian boys. \n"
);


357 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:37
>>356
そういうの飽きた


358 名前: 351 投稿日: 02/06/07 13:37
>>356
プログラム中にlittle、indianは一回


359 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:40
>>351
プログラミングを勉強する前に日本語を勉強してください。


360 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:42
>>358
何をするプログラムなの。


361 名前: 351 投稿日: 02/06/07 13:42
>>359
波平


362 名前: 351 投稿日: 02/06/07 13:43
歌詞を表示するプログラムです


363 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:48
宿題なら宿題スレに。
しかし >>359 に同意


364 名前: 351 投稿日: 02/06/07 13:49
早く教えて


365 名前: デフォルトの名無しさん 投稿日: 02/06/07 13:52
失せろ。


366 名前: 351 投稿日: 02/06/07 13:58
>>363
宿題スレに書きました


367 名前: デフォルトの名無しさん 投稿日: 02/06/07 14:28
memcpy教えてくれてありがとう!!


368 名前: デフォルトの名無しさん 投稿日: 02/06/07 23:35
cpyって何の略? capacity?


369 名前: デフォルトの名無しさん 投稿日: 02/06/07 23:35
>>368
copy.......


370 名前: デフォルトの名無しさん 投稿日: 02/06/08 00:00
wavファイルを読み込んで音量を調節したものを出力するソフトを作っています
波形データを配列に格納するところまでは成功したので,とりあえず音量を半分にしてみようと思って
for(DWORD i = 0; i < nSamples; i++)
{
lChannel[i] /= 2;
rChannel[i] /= 2;
}
とやってみたのですが,どうにも上手くいきません.出力された波形を見ると,
真ん中で二つにパックリ割れてしまっているような感じになっています.
正しい処理の方法を教えてください


371 名前: デフォルトの名無しさん 投稿日: 02/06/08 00:10
波形処理とか全然詳しくないが、音量を半分にするのは
単に値を1/2すればいいってもんじゃなかったぞ、確か。
詳しいことは↓で聞いてみるとよいかも。

サウンドプログラミング
http://pc.2ch.net/test/read.cgi/tech/996171508/l50


372 名前: デフォルトの名無しさん 投稿日: 02/06/08 00:48
最強の言語はやっぱCですか


373 名前: デフォルトの名無しさん 投稿日: 02/06/08 00:59
>>372
いや、オヤジギャグでしょう。
どんなにまじめな気分のときでも、どんなにやる気がみなぎっているときも、
一瞬にして皆を脱力させてしまう。
暴漢に襲われそうになったときは、まずオヤジギャグで相手の攻撃意欲を
打ち砕き、脱力しているすきに逃げ去る。
戦わずして勝つ方法。「孫子の兵法」にもこの手は載っていない。
最強の言語。



374 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:09
>>370
DBからAMPに変換した後1/2にして、その後またDBに変換


375 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:10
370
無圧縮PCM formatのデータはDWORD(unsigned long)はかったと思う。
たしか8bit符号なしか16bit符号つきのどちらかだったと思う。


376 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:10
ウィンドウに線を表示するにはどうしたらいいでしょうか


377 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:13
LineTo


378 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:14
for(i = 0 ; i < MAX_WIDTH ; ++i) {
 pset(i, 10);
}



379 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:18
>>377
どうもありがとうございました


380 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:20
>>377
>>378
ついでにヘッダーも教えてください


381 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:25
#include <windows>


382 名前: デフォルトの名無しさん 投稿日: 02/06/08 01:42
>>376
> ウィンドウに線を表示するにはどうしたらいいでしょうか
OSくらい示せよ・・・それ以前にスレ違いだが。


383 名前: 323 投稿日: 02/06/08 07:24
>>324
おそレスすまんです。
かなり参考になりそうな気がしますです。
少なくとも、ただの文法書よりは100倍読む気になります。
1回読んでもわからないと思うので、がむばつてみます。



384 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:08
windowsプログラムですが(スレ違いかな?)、
const char型の戻り値を返す関数の戻り値を配列に格納したいのですが
うまくいきません。配列中身が全て同じになってしまいます。



385 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:12
>>384
コード晒せ


386 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:20
いまさらだけどInterfaceっていう雑誌の今月号おもしろい


387 名前: こまった君 投稿日: 02/06/08 21:25
---------------------------
dataは
230 231 229
231 229 243
229 243 221
 :
という風なタブ区切り,改行区切りファイルで、
一行づつ(例えば【230 231 229】)読み取って、文字列chaに収めたい。。。
もしも、
FILE *data;
char cha[256];
なら、
data = fopen("test.txt","r");
while( ( fgets(cha , 256, data)) != NULL ) [
〜作業〜
i++
}
でOKなんですが、
----------------------------
double data[100];
char cha[256];
の宣言で、
data[100]が
data[0] = 230 231 229
data[1] = 231 229 243
data[2] = 229 243 221
 :
の場合、
上と同じように一行づつchaに入れるには、どのようにすればよかでしょうか?
while( ( ??? != ??? ) [
作業
i++
}


388 名前: 384 投稿日: 02/06/08 21:26
const char *str[128];

for(i=0;i<5;i++){
str[i] = xxx();
}

xxx()関数の戻り値はPCSTR型です。
こんな感じです。配列strに文字列が入ると思うんですが、うまくいかない感じです。
PCSTR型ってconst char *型ですよね?違ったかな・・・


389 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:29
constjyなくstaticじゃねーの
constって定数じゃなかったけ


390 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:34
>>388
LPCSTR str;

str = xxx();

ならポインタ変数strに文字列の先頭アドレスが入るとは思うが。


391 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:35
>>388
str[i] = xxx();
は、xxx()が既存のどこか別の場所に文字列を書き込み、その先頭アドレスを返すわけだな。
実行するごとに変わるのはその文字列の内容であって、アドレスは変わらない。

str[i] = xxx();の代入は、文字列の内容ではなくアドレスを保存しているため、
すべて同じアドレスしかなく、内容を参照すると最後の実行結果の文字列しか読めないわけね。

アドレスじゃなく内容をコピーしる!


392 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:35
>>388
単にxxxが同じバッファ再利用してるだけじゃねぇの?


393 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:41
適当なこと書くんじゃねーYO!


394 名前: 384 投稿日: 02/06/08 21:47
確かに>>388さんがおっしゃるように、内容を参照すると
最後に実行結果の文字列しか表示されません。
アドレスじゃなくて内容をコピーするのはどうすれば良いでしょう?


395 名前: 384 投稿日: 02/06/08 21:48
間違えました、>>391さんですね。


396 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:53
>>394
それくらい自分で(以下略


397 名前: デフォルトの名無しさん 投稿日: 02/06/08 21:53
>387
君はまずデータ型と実データの関係をもっと勉強するべき。
「double data[100]」と宣言してるのに、
実データのイメージを「data[0] = 230 231 229」と書いている時点でかなりヤバイよ。


398 名前: デフォルトの名無しさん 投稿日: 02/06/08 23:05
>>394
memcpy使え。
その前にxxxが返す文字列分のメモリをstr[i]に割り当てる必要はあるが


399 名前: デフォルトの名無しさん 投稿日: 02/06/08 23:12
>>398
文字列なら strdup() かね。非標準だが、大抵の処理系にはあるし、なければ
簡単に自作できる。


400 名前: 384 投稿日: 02/06/08 23:30
>>399
strdup()でうまくいきました。ありがとうございますー。
文字列のコピーを考えたとき、strcpyとlstrcpyが頭に浮かんできたので
試してみたけどダメでした。コピーと言っても方法がいろいろあるのでしょうか。
良ければstrdup関数の自作方法を教えていただきたいのですが。


401 名前: デフォルトの名無しさん 投稿日: 02/06/08 23:32
>>400
メモリ管理(malloc, free)について勉強しましょう。


402 名前: 384 投稿日: 02/06/08 23:49
>>401
了解しました。もう少しCの勉強をしておきます。


403 名前: デフォルトの名無しさん 投稿日: 02/06/09 00:23
>>370
そんな感じのやり方で良いと思うが…。
処理後の波形でplayすると歪んだ音になるのか?
>真ん中で二つにパックリ割れてしまっているような感じ
どうゆう波形なのか今いち想像つかん(w



404 名前: _ 投稿日: 02/06/09 01:22
ファイルのサイズを、取得する方法をおしえて。


405 名前: デフォルトの名無しさん 投稿日: 02/06/09 01:25
>>404
二種類ある。
1. ディレクトリ検索結果から得る方法。
2. ファイルを開き、末尾にseekして現在位置を得る方法。
あとは自分で調べて。


406 名前: デフォルトの名無しさん 投稿日: 02/06/09 01:46
WindowsならGetFileAttributesExがいい


407 名前: デフォルトの名無しさん 投稿日: 02/06/09 01:55
>>370
音量を半分にするなら
信号の振幅をdbmで半分にしないと


408 名前: デフォルトの名無しさん 投稿日: 02/06/09 01:59
変わり種で、_stat


409 名前: デフォルトの名無しさん 投稿日: 02/06/09 02:13
>403
unsignedとsignedを間違えて扱ったんじゃないか?



410 名前: デフォルトの名無しさん 投稿日: 02/06/09 02:59
>>400


#include <string.h>

char *strdup(char *s){

    char *p = NULL;

    p = (char *)malloc(strlen(s) + 1);
    if(p != NULL)
        strcpy(p, s);

    return p;
}


411 名前: デフォルトの名無しさん 投稿日: 02/06/09 03:07
>>387

    char cha[100][256];
    int i = 0;

    while(fgets(char[i], 256, data) != NULL && i < 100){
        作業
        ++i;
    }



412 名前: デフォルトの名無しさん 投稿日: 02/06/09 06:28
すいません厨房です。
RGBで白の場合は(0xff,0xff,0xff)となるらしいですがその中の「0x」というのは
何ですか?


413 名前: デフォルトの名無しさん 投稿日: 02/06/09 06:40
>>412
0xがわからないのに、ffは何か知ってるの?


414 名前: デフォルトの名無しさん 投稿日: 02/06/09 06:43
何故本を読まないのですか|o|


415 名前: デフォルトの名無しさん 投稿日: 02/06/09 08:50
>>413
アングラかぶれだからです。

>>414
2ちゃんねらーだからです。


416 名前: デフォルトの名無しさん 投稿日: 02/06/09 09:07
>>412
Cの仕様でしょう。
変数名と区別するために、先頭に0をつけ次のxで(以下略



417 名前: デフォルトの名無しさん 投稿日: 02/06/09 10:30
まだC++でもかんぜんにCを凌駕出来ないといわれますが
C言語に出来てC++に出来ないことは何ですか?



418 名前: デフォルトの名無しさん 投稿日: 02/06/09 10:36
はぢめて聞いた・・・まぢで?


419 名前: 417 投稿日: 02/06/09 11:09
C++はまだ完全にCを超えてないといいませんか?
確かそう聞いた。
2chでも見たような気がする。
それで何が違うのだろうと思ったのです。


420 名前: デフォルトの名無しさん 投稿日: 02/06/09 12:27
>>419
> C++はまだ完全にCを超えてないといいませんか?
はつみみです。


421 名前: デフォルトの名無しさん 投稿日: 02/06/09 12:28
>>419
使える人の数とかじゃないの?


422 名前: デフォルトの名無しさん 投稿日: 02/06/09 12:56
配列を値で返すことはできるでしょうか。
できたら、どうすればいいか教えて下さい。お願いします。


423 名前: 御茶目菜子 投稿日: 02/06/09 13:04
バカか
いまごろCかよ。ふるいんだよ。おまえら死ね。
いまどきの言語はよ〜
ポケコンBASICだぜ!!


424 名前: デフォルトの名無しさん 投稿日: 02/06/09 13:05
>配列を値で返す
どういう意味?


425 名前: デフォルトの名無しさん 投稿日: 02/06/09 13:22
>>422
配列自体はできないが、構造体は返せる。
これを利用して、構造体の中に配列を入れて返せばいいんでない?


426 名前: デフォルトの名無しさん 投稿日: 02/06/09 13:59
配列の先頭へのポインタを返すんじゃないの?


427 名前: デフォルトの名無しさん 投稿日: 02/06/09 14:03
>>426
値を返すこと、といってるし


428 名前: デフォルトの名無しさん 投稿日: 02/06/09 14:46
> C言語に出来てC++に出来ないことは何ですか?

void*から他のポインタ型への暗黙のキャスト


429 名前: デフォルトの名無しさん 投稿日: 02/06/09 14:47
プロトタイプ宣言なしの未知関数呼び出し


430 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:01
>>411

x  fgets(char[i], 256, data) != NULL && i < 100

o  i < 100 && fgets(char[i], 256, data) != NULL


431 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:08
逆にC++にできてCに出来ないことの1つに
ブロック中のどこでも変数が宣言できるってのがあるけど、
これってプログラムが見にくくならない?

俺はC++でも新しい変数使うときはブロックにしてるけど


432 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:15
>>431
当たり前。どうしても仕方ない時だけに使う。
あと演算子関数以外でリファレンスを使いまくって読みづらくするのはDQN


433 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:17
constじゃない&ね


434 名前: 投稿日: 02/06/09 15:28
構造体で,
typedef struct{
 int a;
 int b[30][30];//ここ
}c;

というふうにしてはいけないんですか?


435 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:32
>>434
いけなくないよ。
誰かがいけないなんていったのなら、そいつに問いただせ。


436 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:32
>>434
いけないんですか?


437 名前: 434 投稿日: 02/06/09 15:39
前々スレでいわれました
気になったんで聞きました


438 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:39
>>434
ここで聞かなくてもコンパイラが教えてくれると思うが・・・


439 名前: monosiri 投稿日: 02/06/09 15:41
コンパイラは,だめでもそのままってことあるっしょ
じゃなきゃおちないじゃん


440 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:43
>>439
シンタックスエラーで落ちるってのは初耳


441 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:49
>>440
ttp://pc.2ch.net/test/read.cgi/tech/1021554929/348


442 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:54
>>441
http://pc.2ch.net/test/read.cgi/tech/1021554929/349


443 名前: デフォルトの名無しさん 投稿日: 02/06/09 15:59
>>439 「コンパイルは通っても・・・」って意味か?
>>434の質問(あのような構造体を定義していいかどうか)とは関係ないと思うが。

>>441
>>442 ?


444 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:03
猫でも分かるプログラミングという有名ページがありますが
あそこには長初心者用と書いてあります。
あれが理解できても初心者ですか?
Windowsプログラミングに関してはかなりのものになると思うのですが
実際はまだまだなのでしょうか…
確かにあそこだけでは自分でオリジナルなものを作るのには
厳しいと思いますけどWindowsの仕組みを理解するには十分すぎる気もします。



445 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:05
>>432
程度問題だが、俺の判断基準だと

 インスタンス構築にコストがかかる or コンストラクタに引数を渡す必要がある
 場合には、ギリギリまで遅らせる意味がある。

 ループカウンタ(イテレータ)は for の中で宣言。

ぐらいかな。もっとも C++ だとループも algorithm 使うことが多いけど。
(これ以上は C++ スレで聞いた方が良いと思うぞ)


446 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:06
>>444
初心者という言葉は知識をまったく規定しない。本人の意識の問題。


447 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:06
あのページを便利なリファレンス(あるいはコピペ元)として使ってる奴は
たくさんいると思われ。


448 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:06
>>444
Win32 スレで聞け。


449 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:09
>>443

>>439 = シンタックスエラーとバグを混同
>>440 = 突っ込み
>>441 = 実は439はネタでした(藁
>>442 = そうでも言わないとやってられないね(憐


450 名前: デフォルトの名無しさん 投稿日: 02/06/09 16:12
>>449
ああ、何でDelphiのスレ指してるのかと思った。そういうことね。


451 名前: 444 投稿日: 02/06/09 16:40
誘導有難うございます


452 名前: デフォルトの名無しさん 投稿日: 02/06/09 17:36
ちゃんとファイルの先頭に#include <math.h>と書いてあるのに
コンパイルすると次のようなエラーがでます。

/tmp/cc5Soiex.o: In function `main':
/tmp/cc5Soiex.o(.text+0x144): undefined reference to `sqrt'
/tmp/cc5Soiex.o(.text+0x152): undefined reference to `log'
/tmp/cc5Soiex.o(.text+0x1f4): undefined reference to `getBf'
/tmp/cc5Soiex.o: In function `dft':
/tmp/cc5Soiex.o(.text+0x336): undefined reference to `cos'
/tmp/cc5Soiex.o(.text+0x358): undefined reference to `sin'
/tmp/cc5Soiex.o: In function `idft':
/tmp/cc5Soiex.o(.text+0x3e1): undefined reference to `cos'
/tmp/cc5Soiex.o(.text+0x403): undefined reference to `sin'
collect2: ld returned 1 exit status

アドバイスお願いします。


453 名前: デフォルトの名無しさん 投稿日: 02/06/09 17:38
>>452
-lm


454 名前: デフォルトの名無しさん 投稿日: 02/06/09 17:43
UNIX関係だね。

#include <math.h>で解決するのはコンパイル。
そのエラーはリンクエラーね。
gcc(cc)の引数に -lm を付けろってこと。-lはライブラリ指定で、mがmath用の名前。


455 名前: 452 投稿日: 02/06/09 17:51
ありがとうございました。


456 名前: デフォルトの名無しさん 投稿日: 02/06/09 19:43
#include <stdio.h>
#define N 4
int count, p[N];

void show(void)
{
int i;

count++; printf("%5d: ", count);
for (i = 0; i < N; i++) printf(" %d", p[i]);
printf("\n");
}

#define TRUE 1
#define FALSE 0
char ok[N + 1];

void put(int pos, int k)
{
int j;

p[pos] = k;
if (pos == N - 1) show();
else {
ok[k] = FALSE;
for (j = 1; j <= N; j++)
if (ok[j]) put(pos + 1, j);
ok[k] = TRUE;
}
}

void genperm(void)
{
int k;

count = 0;
for (k = 1; k <= N; k++) ok[k] = TRUE;
for (k = 1; k <= N; k++) put(0, k);
}


#include <stdlib.h>

int main()
{
printf("順列\n"); genperm();
return EXIT_SUCCESS;
}



457 名前: 456 投稿日: 02/06/09 19:48
456のプログラムで1〜4までの順列を辞書順に列挙できると思うんですが、これを改良して
たとえば4個から2個を選んでその順列を辞書順に列挙するようにはできないでしょうか・・・


458 名前: デフォルトの名無しさん 投稿日: 02/06/09 19:59
>>432
何でリファレンス使ったら読みづらくなんのよ?



459 名前: デフォルトの名無しさん 投稿日: 02/06/09 20:02
>>458
奴がDQNだから。


460 名前: デフォルトの名無しさん 投稿日: 02/06/09 20:04
>>458
使ったらじゃ無くて使いまくってだろ


461 名前: デフォルトの名無しさん 投稿日: 02/06/09 21:40






                DQN的質問、定期的に出るよなぁ。



462 名前: デフォルトの名無しさん 投稿日: 02/06/09 22:43
>>461
それが普通だと思われ。


463 名前: ERROR:スレッド立てすぎです。。。 投稿日: 02/06/09 22:56
みんなで力をあわせて、軽くてオープンソースなprintfを作りませんか?
スタック消費量は とりあえずの目標値として100バイト以下って感じで。

浮動小数点とか、16進表示とか、いる機能いらない機能を
使う人が自由にカスタマイズできる、そんな自由なprintfを!




464 名前: C言語永久不明 投稿日: 02/06/09 23:00
学生時代から現在にかけてC言語はいまだに分からん。全く理解できていない。
初心者と思ってくれて良い。この永久不明君に教えてくれ1よ。
社内でも、外注先でも、C言語が分かる人=Cマガ読者なんだよね。
そんないい加減な言語に対処するため、ANSI C言語辞典をかたわらに
今日も独学で頑張る俺。さて、俺がにらんだからには
一人で沢山カキコします。お付き合いください。


465 名前: デフォルトの名無しさん 投稿日: 02/06/09 23:00
>>463
昔作った奴。
好きなように改造してくれ

int sprintf(char*b,char*f,...)
{
 va_list v;
 unsigned i,n;
 char x,*o,*h=b,s[99];
 va_start(v,f);
 while(*f){
  if(*f^37)
   *b++=*f;
  else{
   o=s+97;s[98]=i=0;x=*++f;
   x==37?*o=37:x==99?*o=va_arg(v,char):x=='s'?o=va_arg(v,char*):0;
   if(i<9){
    n=va_arg(v,int);
    if(i>6)
     if((int)n<0)*b++='-',n=~n+1;
    i=i==5?16:i==6?8:10;
    while(*o="0123456789abcdef"[n%i],n/=i)o--;
   }
   while(*b=*o++)b++;
  }
  f++;
 }
 va_end(v);
 return b-h;
}



466 名前: デフォルトの名無しさん 投稿日: 02/06/09 23:06
>465
ソースの汚さは別にして、オレはあんたを尊敬する。


467 名前: デフォルトの名無しさん 投稿日: 02/06/09 23:15
確かに汚いソース(笑)


468 名前: 465 投稿日: 02/06/09 23:18
ゴメソ試したら動かなかったんで、作成中かその他のソースだったらしひ
こっちが正しい奴みたい。

#include <stdarg.h>
typedef char c;
int sprintf(c*b,c*f,...)
{
 va_list v;
 unsigned i,n;
 c x[9]="%csuxodi",*o,*h=b,s[99];
 va_start(v,f);
 while(*f){
  if(*f^37)
   *b++=*f;
  else{
   o=s+97;s[98]=i=0;x[8]=*++f;
   while(x[i++]!=*f);
   if(i<3)*o=i==1?37:va_arg(v,c);
   else if(i<4)o=va_arg(v,c*);
   else if(i<9){
    n=va_arg(v,int);
    if(i>6)
     if((int)n<0)*b++='-',n=~n+1;
    i=i==5?16:i==6?8:10;
    while(*o="0123456789abcdef"[n%i],n/=i)o--;
   }
   while(*b=*o++)b++;
  }
  f++;
 }
 va_end(v);
 return b-h;
}

#include <stdio.h>
int main()
{
 int i;
 char buf[512];
 printf("\n%d:%s\n", i, buf);
 i = sprintf(buf, "%%%s%s%s %c %d %u %x %i %u %o", "test1 ", "test2 ", "test3", 'a', -123, 123, 0x123fe, -123, -123, 83);
 printf("\n%d:%s\n", i, buf);
 return 0;
}



469 名前: デフォルトの名無しさん 投稿日: 02/06/09 23:21
>>463
作るのはおもしろい、というか俺も昔作ったけど、当時は狭苦しいDOSとか用だったしなあ。
今はそういう要求は思いつかん。なんでスタック消費にこだわるの? それによるメリットは何?
組み込み系で使うのかな?


470 名前: C言語永久不明 投稿日: 02/06/09 23:41
C言語は動作が仕様で決まってないなど、不明点が多いこと、
入門書しかない点だ。腹立つことが多いね。
例えば、>>452の質問だ。これあきらかに452の指導者がバカなわけでしょ。
452はどうせ高校か大学の情報処理の授業の宿題程度だろ。教官がバカだね。

あきらかにコンパイル、リンク、ヘッダファイル、ライブラリ、アーカイブ、
そういった基本的なことを理解してないことが集約されている質問。
ansi cとして提供(実装)されている関数の基本的な利用方法を教えていない。
cc,ar,nm(あるか?)とかの使いかたも当然、教えていないと思う。
*.o,*.so,*.aの違いを知らんと。
分割コンパイルをやったことも無いだろうし、makefileも作ったことないと思う。
推論規則、拡張子ルール、依存関係そんなものも分かっていないはず。
当然構文解析や、字句解析、コンパイラがどう実装されているかも知らんわな。
最適化だのインライナーだのアセンブラだの、処理系で違うだろうが、ccのオプション
でいろいろできることもしらんわな。


471 名前: C言語永久不明 投稿日: 02/06/09 23:49
>>431,432も何いってんの。
変数使用する直前に変数宣言できるからいいんでしょ。
それで公共システム何個も動かしてて問題起きないよ。
C言語でやるときはしょうがないから、{}でブロック作るんでしょ。


472 名前: デフォルトの名無しさん 投稿日: 02/06/09 23:51
>>461
それは誰に対して?


473 名前: デフォルトの名無しさん 投稿日: 02/06/09 23:56
>>470
あなたは釣り師デスカ?


474 名前: デフォルトの名無しさん 投稿日: 02/06/10 00:06
>>471
変数宣言がまとまってるのが嫌い?


475 名前: デフォルトの名無しさん 投稿日: 02/06/10 00:10
>>474
カウンターなどの変数なら、関数の先頭で宣言を強制してもよいと
思うが、クラス変数や反復子までもが先頭での宣言を強要されると
ウザイよ。というか困るよ。

C++でのクラス変数の宣言は、文と同じくらいの意味を持っているか
らね。


476 名前: デフォルトの名無しさん 投稿日: 02/06/10 00:11
470が超弩級のアフォだということはわかった


477 名前: デフォルトの名無しさん 投稿日: 02/06/10 00:13
(´_ゝ`)ふーん


478 名前: デフォルトの名無しさん 投稿日: 02/06/10 00:14
>>471
そうだね。
そして使わなくなった直後にスコープ外に出すことは出来ない(藁
これをするには結局{}で囲まなきゃ


479 名前: 465 投稿日: 02/06/10 00:17
>>475
「リソースの獲得は初期化」イディオムだな。
この場合、クラスのコンストラクト時にリソースの獲得を行うのが普通、と。


480 名前: デフォルトの名無しさん 投稿日: 02/06/10 00:17
479
消し忘れ


481 名前: デフォルトの名無しさん 投稿日: 02/06/10 01:03
>>470
> 例えば、>>452の質問だ。これあきらかに452の指導者がバカなわけでしょ。

独学だろ。


482 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:45
質問です。
関数で複数の返り値を返したい時はどうすればいいのでしょうか?



483 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:48
>>482
1)同じ型の値なら配列を返すことはできる。
2)異なる型のセットなら構造体で返すことができる。
3)自由に構成が変わるタプルの構成なら文法レベルでは無理。ライブラリを作って擬似的に対処する。


484 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:52
>482
4)とりあえずグローバル変数経由で返すのはやめとけ。


485 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:53
>>482
>>483の3)に相当するのなら、unionで定義しておき、void *を返して
戻り先でキャスト汁!


486 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:53
5)返すわけではないが返してほしい値をセットするための変数を引数として渡す。一般的にはこれかな。scanf等がいい例。


487 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:54
>>482
方法は色々あるけど、ふつうは構造体へのポインタを渡して、そこに書き込ま
せるかな。構造体を作るまでもないデータなら、組込型へのポインタを渡して、
そこに書き込ませることもある。

void foo(int *np1, int *np2)
{
  *np1 = 1;
  *np2 = 2;
}

int main()
{
  int m, n;
  foo(&m, &n);
  /* m に 1, n に 2 が書き込まれる */
  ...
  return 0;
}


488 名前: デフォルトの名無しさん 投稿日: 02/06/10 02:55
>>484
errnoならいいよね?


489 名前: 486 投稿日: 02/06/10 02:57
> 変数を引数として

変数のアドレスを引数として
と言うべきだったな。


490 名前: 482 投稿日: 02/06/10 03:05
レスありがとうございます。
構造体はまだ使った事が無く分からないので
487さんの方法を試してみます



491 名前: デフォルトの名無しさん 投稿日: 02/06/10 09:48
質問なのですが。。
構造体を関数に渡す場合、値で渡しちゃってもプログラムに悪影響は無いのでしょうか?


492 名前: デフォルトの名無しさん 投稿日: 02/06/10 09:52
>>491
無いです。
でも、サイズが32ビット以上(ポインタのサイズ以上)の物を渡す場合は参照渡しよりメモリを食って処理時間も増えます。



493 名前: 491 投稿日: 02/06/10 10:01
そうですか、ありがとうございます。
あと一つ
前に
#define LENGTH 255
char str[LENGTH];
str[LENGTH-1] = NULL;
こんな感じのコードを見ました
間違った書き方ですよね?


494 名前: デフォルトの名無しさん 投稿日: 02/06/10 10:04
>>493
エラーは出ないね。NULLが整数型なら(最近は全部(void *)か)。
どっちにしろその配列を何に使うかは激しく謎だけど。



495 名前: デフォルトの名無しさん 投稿日: 02/06/10 10:05
>>493
間違ってはいないけど、NULLは'\0'にすべきだな(笑)


496 名前: デフォルトの名無しさん 投稿日: 02/06/10 10:11
>>494
char str[LENGTH];とstr[LENGTH-1] = NULL;の間の処理は>>493が省略したんだろ。


497 名前: デフォルトの名無しさん 投稿日: 02/06/10 10:14
>>496
もしかしたら、

「文字列用配列宣言したらその直後にNULLを入れましょう。」

と言う考え方を否定しているのかも。

まぁ、変だけど。

でも、文字列操作失敗しても確保したメモリ以上の参照が行われにくくなるという点では評価できないこともない。


498 名前: 463 投稿日: 02/06/10 10:27
>468
すぅばらしい。ムスカ君、キミは英雄だ!

というわけでこれから検証してみます。


499 名前: デフォルトの名無しさん 投稿日: 02/06/10 11:17
497は何か勘違いをしている


500 名前: デフォルトの名無しさん 投稿日: 02/06/10 11:59
NULL == '\0' == 0


501 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:06
>>500
(゚Д゚)ハァ??


502 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:14
http://www.catnet.ne.jp/kouno/c_faq/c5.html


503 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:16
int* p = '\0';
VC++でコンパイル通った・・・(゜д゜;)
C++では'\0'はchar型のはずなのに・・・


504 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:21
最小2乗法のプログラムを作り途中なのですが、
下のエラーのコメントをしている部分で、
どうしてもエラーが出て成功しません。
全くどこが悪いのかわかりません。
多次元配列のとり方がまちがってるのでしょうか?
ご教授お願い致します。
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j,k,n,m,row,column,x,y;
double t,u, det;
double **a,*d;

printf("データセットの数(何セット?)=");
scanf("%d",&n);

printf("1セットのデータ数(ターゲットデータは含まない。)=");
scanf("%d",&m);

/* start_データ入力用配列確保 */
d=(double *)calloc(m+1,sizeof(double));
if(d==NULL) printf("データ入力用配列の確保に失敗\n");
/* end_データ入力用配列確保 */

row=m+1;
column=m+1;

/*start_配列a[row][column]の確保*/
a=(double **)calloc(row,sizeof(double *)); /*行(row)の確保*/
for(i=0;i<row;i++) a[i]=(double *)calloc(column,sizeof(double)); /*列(column)の確保*/
/*end_配列a[row][column]の確保*/

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%dset_data%d=",i,j);
scanf("%lf",&d[j]);
}

for(x=0;x<row;x++)
{
for(y=0;y<column;y++)
{
if(x=0 && y=0)
        a[x][y]=1;
if(x=0 && y>=1) a[x][y]+=d[y-1];    /*←(エラー)左辺値が必要*/
if(x>=1 && y=0) a[x][y]+=d[y-1];    /*←(警告)不正な代入*/
if(x>=1 && y>=1) a[x][y]+=d[y-1]*d[x-1]; /*←(エラー)左辺値が必要*/
}
}
}
free(d);
for(i=0;i<row;i++) free(a[i]);
free(a);


return(0);
}


505 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:21
>>503
charはintに暗黙変換するので通る。


506 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:22
>>505
じゃなくて 値0 は pointerとも暗黙変換するので、だった。見間違いすまん


507 名前: 504 投稿日: 02/06/10 12:23
504です。
すみません。
なんか括弧 { の位置が
めちゃくちゃになって、
見にくくなっちゃいました。。


508 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:23
>>505
int *p = (char)0; // 通らない


509 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:26
>>504
×if (x = 0 && y = 0)
○if (x == 0 && y == 0)


510 名前: 504 投稿日: 02/06/10 12:30
509さん。
ありがとうございます。
全く、基本的なとこで間違ってました。
はずかしっ。。。


511 名前: デフォルトの名無しさん 投稿日: 02/06/10 12:33
>>508
Cでは通るがC++では通らない


512 名前: デフォルトの名無しさん 投稿日: 02/06/10 15:29
復活


513 名前: デフォルトの名無しさん 投稿日: 02/06/10 15:48
dj?


514 名前: デフォルトの名無しさん 投稿日: 02/06/10 19:47
if(Flg==START)
{
 if(i=1) p=Kou[0].a;
 if(i=2) p=Kou[0].b;
 if(i=3) p=Kou[0].c;
 if(i=4) p=Kou[0].d;
 Flg=end;
}

for(i=0;i<KouMax-1;i++)
{
 if(p[i] < p[i+1])
 temp=p[i]; p[i]=p[i+1]; p[i+1]=temp;
 p+=sizeof(Kou)/sizeof(Kou[0]);
}

こうやるのは可能ですか?
構造体のメンバをソートしたいのですが,
例えば値段順で並べるだけならいいのですが,項目が増えた場合は,
押された項目の番号(i)を使ってソートする内容を変えたいのですが.


515 名前: デフォルトの名無しさん 投稿日: 02/06/10 19:54
>>514
不可能です
if(i=1)...のあたり


516 名前: デフォルトの名無しさん 投稿日: 02/06/10 19:58
ソート関数の引数に「構造体を2つとって比較結果を返すような
関数へのポインタ」を渡す。
構造体をstruct Hogeとすると
かりにa,b,c,dがすべて数値なら(文字列だったらstrcmp)
int cmpA(struct Hoge *m, strcut Hoge *n)
{
return m->a - n->a
}
なのを
cmpB, cmpC
とか作ってソート関数を
void sort(struct Hoge *hoge_array, int (*cmp)(struct Hoge *m, struct *n))
にして
if(i == 1) sort(Kou, cmpA);
else if ( i == 2) sort(Kou, cmpB);
・・・
などと呼び出す。




517 名前: 516 投稿日: 02/06/10 19:59
>struct *n
strcut Hoge *n
だった。


518 名前: 516 投稿日: 02/06/10 20:00
>strcut
structね・・・欝。


519 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:02
>>516-518
何を焦ってるんだい?


520 名前: 516 投稿日: 02/06/10 20:04
>>514
あ、「構造体の配列をソート」じゃないのね。
私の書き込みは忘れてください・・・。



521 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:08
>>514
なんか激しく不自然なデータ構造のような。
とりあえずKouの定義と、どういう風にデータを入れるつもりなのかを説明してみ。

おそらく結局は>>516-518のようなことをやりたいんじゃないかと思うが。



522 名前: 初心者家労 投稿日: 02/06/10 20:27
Cでアドレス帳が作れますか?


523 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:28
>>522
出来ます。


524 名前: 初心者家労 投稿日: 02/06/10 20:29
やはり構造体を使ったほうが便利ですかな?


525 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:31
>>524
そらね。


526 名前: 初心者家労 投稿日: 02/06/10 20:33
ソート機能を作りたいのですが、2次元配列で比較することはできるかな


527 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:36
配列をなら #t
配列でなら #f


528 名前: 初心者家労 投稿日: 02/06/10 20:42
漢字はソートしてくれますかな


529 名前: 初心者家労 投稿日: 02/06/10 20:43
やっぱり#include <stdio.h>っていうのが何を意味しているのか
ちゃんと知っておいたほうがいいのかな?


530 名前: 初心者家労 投稿日: 02/06/10 20:44
ライブラリ関数を定義してるもの?


531 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:46
>>529
しっとくべき。

>>530
ライブラリ関数の名前と引数と返値の型を定義してるもの。


532 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:47
ライブラリ関数を宣言してるもの。


533 名前: 初心者家労 投稿日: 02/06/10 20:48
文字列は文字列のまま比較しちゃっていいの?


534 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:50
   /⌒ヽ 
  / ´_ゝ`)   2ちゃんねるで聞いて損した。
  |    /    かえろ!
  | /| |   
  // | |  
 U  .U


535 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:54
>>533
== で比較しては行けない。strcmp() 使え。


536 名前: 初心者家労 投稿日: 02/06/10 20:57
ファイル処理関数は何を使えばいいですか?


537 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:57
C言語の入門書をなんか読んでくれ(´д`;) > 初心者家労


538 名前: 初心者家労 投稿日: 02/06/10 20:58
5/2を計算しても2.5にならないのはなんで?C言語壊れてるのかな?


539 名前: デフォルトの名無しさん 投稿日: 02/06/10 20:59
>>538
浮動小数点数についてお勉強。


540 名前: デフォルトの名無しさん 投稿日: 02/06/10 21:04
>>538
5.0/2


541 名前: 初心者家労 投稿日: 02/06/10 21:21
こんなにがんがっても逝かないのはなんで?嫁さん壊れてるのかな?


542 名前: デフォルトの名無しさん 投稿日: 02/06/10 21:25
>>541
相性が悪いと思われ。


543 名前: デフォルトの名無しさん 投稿日: 02/06/10 21:32
読めさん、炎症でヒリヒリするって、泣いてたよ


544 名前: デフォルトの名無しさん 投稿日: 02/06/10 21:36
そういうときは口で優しく(以下略


545 名前: デフォルトの名無しさん 投稿日: 02/06/10 22:20
typedef struct{
int nedan;
int kosuu;
int syurui;
int uribi;
}KOU;
KOU Kou[10];

void sort( int num ){//numはソートしたい項目の番号
 KOU *p;
 if(num==1) p=Kou[0].nedan;
 if(num==2) p=Kou[0].kosuu;
 if(num==3) p=Kou[0].syurui;
 if(num==4) p=Kou[0].uribi;

for(i=0;i<KouMax-1;i++)
{

 if(p[i] < p[i+1])
 temp=p[i]; p[i]=p[i+1]; p[i+1]=temp;
 p+=sizeof(Kou)/sizeof(Kou[0]);
}
こうやるのは可能ですか?
構造体のメンバをソートしたいのですが,
例えば値段順で並べるだけならいいのですが,項目が増えた場合は,
押された項目の番号(i)を使ってソートする内容を変えたいのですが.


546 名前: デフォルトの名無しさん 投稿日: 02/06/10 22:42
>>545
C++ スレで聞いてる以上、こう答えるけど。

o そもそも効率激悪いソートアルゴリズムを自前で実装せずに std::sort 使え。
o ソート条件を変えたければ 3 つの引数を取る sort に適当な述語を渡せば OK。


547 名前: デフォルトの名無しさん 投稿日: 02/06/10 22:44
>>546
ここはCスレだったり


548 名前: デフォルトの名無しさん 投稿日: 02/06/10 22:44
>>546 迷子の迷子の子猫ちゃん


549 名前: デフォルトの名無しさん 投稿日: 02/06/10 22:46
>>546
ライブラリ使わないと何も出来ない人ってかわいそうだと思います。


550 名前: 546 投稿日: 02/06/10 22:46
すまん、ここ C 言語スレだったか……。qsort() に比較関数へのポインタを
渡すけど、それを項目番号によって変えれば?


551 名前: 521 投稿日: 02/06/10 22:46
だめ。>>516-518を嫁。
ついでにpは何を指してるんだかよく考えろ。
適当に切り貼りするんじゃない。


552 名前: 545 投稿日: 02/06/10 22:55
sortを使えと?


553 名前: デフォルトの名無しさん 投稿日: 02/06/10 22:58
むしろ>>550支持


554 名前: 546 投稿日: 02/06/10 22:59
こんなもんかね。

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

typedef struct{
  int nedan;
  int kosuu;
  int syurui;
  int uribi;
} KOU;

KOU kou[10];

#define NELEM(x)    (sizeof(x) / sizeof(x[0]))

#define CMP_FUNC(obj_) \
static int \
cmp_by_##obj_(const void *p1, const void *p2) \
{ \
  const KOU* q1 = p1; \
  const KOU* q2 = p2; \
  return q1->obj_ - q2->obj_; \
}

CMP_FUNC(nedan)
CMP_FUNC(kosuu)
CMP_FUNC(syurui)
CMP_FUNC(uribi)

static int (*cmpfunc[])(const void *, const void *) =
{
  cmp_by_nedan,
  cmp_by_kosuu,
  cmp_by_syurui,
  cmp_by_uribi,
};

void
kou_sort(int sorter)
{
  qsort(kou, NELEM(kou), sizeof(kou[0]), cmpfunc[sorter]);
}


555 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:03
>>554
> #define NELEM(x)    (sizeof(x) / sizeof(x[0]))

(sizeof x/sizeof x[0])にしてくれ。


556 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:08
きったないコード

素直にC++でメンバポインタを使えばいいだろ


557 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:12
>>556
負け惜しみですか?STLオタさん。


558 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:15
>>555
なぜ?
というかむしろ
#define NELEM(x)    (sizeof(x) / sizeof(x)[0])
では。


559 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:17
リストを使おうと思っているのですが,
5番目の構造体とかって参照しずらいですか?


560 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:18
>>556
自分できれいなコード晒してから言えよ。他人におかしな所を指摘されるの怖くて出来ないか?
しかもCスレでC++とはおめでてーな。


561 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:24
>>558
sizeofで括弧で囲むのは型だけにすべき。


562 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:25
>>559
「しずらい」の意味にもよるが、そういう関数を作っとけばいい。
ただし、配列に比べて後ろのほうはアクセスが遅くなるのはしょうがない。


563 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:25
>>561
囲んでも問題ないし、それ以上に#defineの引数は括弧で囲まなければ危険。


564 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:25
>>561
マクロの引数は囲むだろ、ふつう。


565 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:26
>>561 なぜか教えてクリ


566 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:28
>>563
> 囲まなければ危険

それはMACRO(i-3)とかやると危険だということでしょ。sizeof(i-3)なんてやるかしら?


567 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:31
#define NELEM(x) ((sizeof x)/(sizeof x[0]))
これなら安全だろ。


568 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:32
>>566
sizeof(i-3)はべつに変じゃありませんが。
それと、MACROの引数がsizeofに渡るかどうかなんてMACROの利用者には知る必要のないこと。


569 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:33
>>560
汚いことを指摘されて逆切れですか?


570 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:35
>>569
俺(560)は>>554じゃねーよ


571 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:36
>>568
マクロを関数のように使うのなら知るべきだと思うが・・


572 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:40
>>561の理由がわからん。
余分な括弧があっても式は式だし、冗長という以上のものではないよな。
付けるべきでない、とまでいうのなら何か実際的な問題があるという主張なはずだ。


573 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:41
>>561
> sizeofで括弧で囲むのは型だけにすべき。

すべき理由を教えてクリ。


574 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:43
>>555>>556

何 で も い い か ら 、 い ち ゃ も ん 付 け た か っ た だ け で す か




575 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:49
dj?


576 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:51
>>555, 556のF5攻撃ダー!!


577 名前: お願いです 投稿日: 02/06/10 23:54



C の や り 方 教 え て く だ さ い







まだ童貞なんです。。


578 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:55
>>576
F5?
押しても何もおきませんが?


579 名前: デフォルトの名無しさん 投稿日: 02/06/10 23:59
>>578
                      ____    、ミ川川川彡
                    /:::::::::::::::::::::::::""'''-ミ       彡
                   //, -‐―、:::::::::::::::::::::三  ギ  そ  三
            ___    巛/    \::::::::::::::::三.  ャ  れ  三
        _-=三三三ミミ、.//!       l、:::::::::::::三  グ  は  三
     ==三= ̄      《|ll|ニヽ l∠三,,`\\::三  で       三
        /              |||"''》 ''"└┴‐` `ヽ三   言  ひ  三
         !             | /          三   っ  ょ  三
       |‐-、:::、∠三"`    | ヽ=     U   三.  て   っ  三
       |"''》 ''"└┴`       | ゝ―-        三  る  と  三
       | /           ヽ ""        ,. 三   の   し  三
        | ヽ=   、    U    lヽ、___,,,...-‐''"  三   か  て  三
.        | ゝ―-'′          |  |::::::::::::_,,,...-‐'"三  !?    三
          ヽ ""        ,.    | | ̄ ̄ ̄      彡      ミ
        ヽ、___,,,...-‐''"  ,,..-'''~             彡川川川ミ
          厂|  厂‐'''~      〇
        | ̄\| /


580 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:02
>>579=IE厨
だって何も起きないもん(笑)


581 名前: 576 投稿日: 02/06/11 00:04
先に言っとくけど漏れは>>579じゃないぞ!
>>579 バーヤバーヤ!!


582 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:07
>>535
> == で比較しては行けない。strcmp() 使え。
ってなぜなんですか?


583 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:08
>>582
==だとポインタ同士の比較になるから。
それが目的ならいいけど。


584 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:14
>>545
((int*)&Kou[i])[num-1]


585 名前: 546 投稿日: 02/06/11 00:16
なんか荒れとるが、

- そもそも STL 使えと言ったヤツ
- qsort() 使ったコードを晒したヤツ

は同一人物(俺)だ。556 の C++ 厨は別人。

だいたい STL の std::sort 使うなら、メンバ関数ポインタではなく単なる関数
オブジェクトにすると思うが……。


586 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:19
文字列の配列でなんか作れって課題が出たのですが、
ネタがなくて困っています。
面白いソースがあったらパクらせてください。

パクるの駄目だったら、おすすめの入門書を教えてください。


587 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:23
>>585
> 556 の C++ 厨は別人。
実は人ではなく鳥類という罠。とか。


588 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:26
>>585
そもそも>>554のコードで>>546と名乗ってるからな。
>>557は何か勘違いしたんでしょ。


589 名前: 586 投稿日: 02/06/11 00:30
自力でなんとかします。
クソなこと言ってすいません。


590 名前: 586 投稿日: 02/06/11 00:33
         ∧_∧
         (´Д` ) 切腹しますた
         /  y/  ヽ
    Σ(m)二フ ⊂[_ノ
        (ノノノ | | | l )
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


591 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:39
>>586
おっ ちょーどいいや。 頼みがあるんだけど。

シフトJISの文字列を引数として、その文字列のうち
2バイト文字のみを全て %xx%xx にエンコードして、
同じく引数のバッファに格納する

そんな関数を作ってくれ。  8時間たったら取りにきます。


592 名前: 591 投稿日: 02/06/11 00:41
%が続いたら? とかそういう細かい条件は気にしなくていいです。
つまんない細かいところはこっちで修正して使います。


593 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:48
>>591
URLエンコードならつくったけど。
2バイト文字だけじゃなくURLに使えない文字はすべてエンコードするけどね。


594 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:50
>593
やったー。 ほしいです。 もちろんただでとは言いません。
2Dでも3Dでもお好きなエロ絵をプレゼントします。


595 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:51
>>586
文字列の配列って文字列を指すポインタの配列のこと?


596 名前: デフォルトの名無しさん 投稿日: 02/06/11 00:55
>>591
char *url_encode(char *str)
{
char *tp1=str,*tp2,*buf;
char chtable[]={'_','-','.','*',' '};
int i;

if((buf=(char *)malloc(strlen(str)+1))==NULL)
return NULL;
strcpy(buf,str);
tp2=buf;

for(;*buf;buf++){
if(isalnum((unsigned char)*buf)){
*str=*buf;
str++;
goto loopend;
}
for(i=0;i<5;i++){
if((unsigned char)*buf==chtable[i]){
*str=*buf;
str++;
goto loopend;
}
}
sprintf(str,"%%%02X",(unsigned char)*buf);
str+=3;
loopend:
;
}
*str='\0';
free(tp2);

strcrep(tp1,' ','+');

return tp1;
}


goto使ったのはcontinueだとうまくゆかないから。


597 名前: デフォルトの名無しさん 投稿日: 02/06/11 01:00
こいつも入れておかないと・・・

char *strcrep(char *str,int trgtc,int repc)
{
char *tp=str;
for(;*tp;tp++)
if(*tp==trgtc)
*tp=repc;

return str;
}


598 名前: デフォルトの名無しさん 投稿日: 02/06/11 01:00
strchr()使えばいいじゃん。つーかstrcrep()ってなんだ。

char *url_encode(char *str)
{
char *tp1=str,*tp2,*buf;
unsigned char c;
static const char chtable[]="_-.* ";
int i;

if((buf=(char *)malloc(strlen(str)+1))==NULL)
return NULL;
strcpy(buf,str);
tp2=buf;

for(;c = *buf;buf++){
if(isalnum(c) || strchr(chtable, c)){
*str++=*buf;
}
else {
sprintf(str,"%%%02X",(unsigned char)*buf);
str+=3;
}
}
*str='\0';
free(tp2);

strcrep(tp1,' ','+');

return tp1;
}



599 名前: デフォルトの名無しさん 投稿日: 02/06/11 01:04
>>598
strchrって文字列中からchrを見つける関数じゃなかった?
文字列中の' 'を全て'+'に置き換えたいんだけど・・・


600 名前: 599 投稿日: 02/06/11 01:05
そこじゃなかった。
そうか、forで回さずにstrchr使えばいいんだ(笑)


601 名前: 463 投稿日: 02/06/11 02:42
>>468
いやー便利っすよ!!
ちょっとスタック食ってたから削って、ついでに2進表示つけたりバグも直してみたり。
正確には測ってないけど、スタック消費量は多分2,30バイトくらいかな?
(引き数分はまあおいといて)

これってすごく文字数節約してるけど もとネタは7行系かなんかですか?
フィールド幅とかゼロパディングとか 暇な時につけてみようかな。


602 名前: デフォルトの名無しさん 投稿日: 02/06/11 02:55
if( i<x && c[i++]>0 )hoge();
って書いたとき、式はちゃんと左側から順に評価されましたっけ?

if( i<x ? c[i++]>0 : 0 )hoge();
きちんとこう書くべき?


603 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:03
>>602
評価されると思う。
第一式が成立しなかったら抜けるから。
ていうかこのぐらいならテストコードかいてみればいいじゃん。。。


604 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:06
左から評価されます。ただし i<x が偽のとき次の c[i++]>0 は
評価されません。


605 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:08
>603
テストコード書いて自分の環境では問題ないと確認してるんだけどね。
動けばいいってもんでもないかな、と。
やれ環境依存だとかやれ不定だとかあるじゃん。
C-FAQも量が多くて見きれなくてさ。


606 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:12
>>604
一般的には多分それでいいと思う。
けど、蟹炒飯によると、
「演算子の優先順位と結合規則は完全に指定されているが、
 式の評価順序は、定義されていない」
とあるんだよね。

ヘソ曲がりなコンパイラや なんかすげー最適化がかかったりしたときには
式が左から右へ評価されてく保証がなくなるような、そんな悪寒がしたもので・・


607 名前: 546 投稿日: 02/06/11 03:20
>>606
C99 の規格書から

6.5.13 Logical AND operator
4 Unlike the bitwise binary & operator, the && operator guarantees left-to-right
evaluation; there is a sequence point after the evaluation of the first operand.
If the first operand compares equal to 0, the second operand is not evaluated.

ANSI から C99 の規格書 (PDF 版) 買っておけば? 目次がしっかりしてるし、
文字列検索もできるから、手元に置いておくと便利だよ。


608 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:22
じゃあvolatileとか。
if( i<x && c[i]>0 )i++, hoge();
とか。




609 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:25
>>607
(゚∀゚)サンクスコ
&&だと左から右がきちんと保証されてるのねん・・・
多分 || も同様だろうな〜。 この際きちんと学習しておこっと。

>>604、疑ってすまんかった。


610 名前: デフォルトの名無しさん 投稿日: 02/06/11 03:37


-----------------------------------------------------------

751 :不明なデバイスさん :02/06/11 01:06 ID:7GUIyFYr

           ∧_∧ ヒロクソはもうギブアップしたってよ(藁
           ( ´_ ゝ`) ∧_∧
         / \/ )( ´,_ゝ`)プッ
        /  \___//       \
  __   .|     | / /\_ _ \ \_____
  \   ̄ ̄ ̄ ̄ ̄ ̄(__ノ   \    \__)      \
  ||\             \  .||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||    ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||


      
           ↑しかし、こいつ超馬鹿だよな〜

http://ton.2ch.net/test/read.cgi/gline/1019935829/l50 
 こいつは↑ここを見た方がこいつの為になるのにねぇ〜


611 名前: デフォルトの名無しさん 投稿日: 02/06/11 05:28
2つの文字列が同一かどうか調べたいのですが、
strcmp を使うのと
頭から1文字ずつ比較していって異なった時点で終了するのでは
どちらの方が速いのでしょうか?
後者は全部の文字調べなくて済む分、速そうな気がするのですが。


612 名前: デフォルトの名無しさん 投稿日: 02/06/11 05:39
>>611
strcmp()はあなたが速いと思ったその方法で処理しています。
関数呼び出しの分遅いけど、頻出関数なのでインライン化できるのもあるね。


613 名前: デフォルトの名無しさん 投稿日: 02/06/11 05:40
strcmpはふつー異なった時点で終了する実装に
なっているはずですが。


614 名前: デフォルトの名無しさん 投稿日: 02/06/11 05:45
たぶん、あなたが書くよりスマートに実装されている上、アセンブリの可能性が高いです。


615 名前: デフォルトの名無しさん 投稿日: 02/06/11 05:52
>>612-614
早朝にもかかわらず即レス有り難うございます。
> あなたが書くよりスマートに実装されている
全くそのとおりだと思います。素直にstrcmp(strncmp)使うことにします。


616 名前: デフォルトの名無しさん 投稿日: 02/06/11 06:11
>615
ライブラリ関数に興味があるならgnuのglibcを見るといい勉強になるよ。
こんな風に実装してるのかーってね。


617 名前: 615 投稿日: 02/06/11 06:41
>>616
> gnuのglibcを見る
というのは、具体的にはどのファイルを見ることなんでしょう?
strcmpと関連があるファイル、というと私はstring.h
しか思いつかないくらいのレベルなのですが、
後学のために是非知っておきたいと思ってます。
よろしくお願いします。


618 名前: 616 投稿日: 02/06/11 06:56
>>617
うーんとね。string.h は strcmp()がどんな格好の関数なのか
書いているヘッダファイルと呼ばれるもの。
一般にユーザはどんな風にコードが書かれているか知る必要はないので
ヘッダにはコードは書かないのが基本。
んで、どこに実体コードがあるのかというと、ライブラリファイルと呼ばれる
ものにまとめられていて、それをリンカ呼ばれるものがstrcmp()はどれだ〜と
さがしてきてつなげて(リンクする)実行ファイルにするの。

ライブラリファイルも元々は誰かがソースファイルをコンパイルしているけど
ふつう要らないので提供していないのも多い。
glibcはそのソースファイルを配布しているから、中身がどうなっているか
読めるというわけです。


619 名前: 618 投稿日: 02/06/11 07:00
>>618
>ふつう要らないので

言葉足らずかな。この要らないので、っていうのはソースファイルのことね。
ソースを提供している、いないはコンパイラによりけりなので
glibcだけじゃないけど、とりあえず思いついたのがこれ。(w


620 名前: 617 投稿日: 02/06/11 08:30
VineのFTPサイトからSRPMを取ってきて見てみました。

glibc-2.2.4/sysdeps/i386/i486/bits/string.h

#define strcmp(s1, s2) ...
という記述がそれっぽいですね。
あれ?ということはstrcmpって関数じゃなくてマクロってことになるんでしょうか(済みません、実は関数とマクロの違いとかあんまり分かってないです)。

添付のFAQ見ると
the library has hand-optimized, inline assembly
versions of some string functions.
とか
glibc 2.1 has special string functions that are faster than the normal
library functions. Some of the functions are additionally implemented as
inline functions and others as macros.
と書いてありましたが、これが>>612さん,>>614さんの言われてることなんでしょうか。
インラインとかアセンブリとかも理解できてないんですけど、とりあえず
string function は速いから使っとけ、と言うことですね。

>>618-619さん
通常は、これらのファイルはコンパイルされて
ライブラリファイル(なんちゃら.soというのがそうなんでしょうか)として置いてあるから
glibcのソースファイルは普通インストールされてないよ、ということですね。


わからないなりに勉強させていただきました。
また折を見てglibcの理解にも勉めようと思います。
どうも有り難うございます。


621 名前: デフォルトの名無しさん 投稿日: 02/06/11 10:51
既出だと思うけど、unionつかう機会ってある?
仕事の中で



622 名前: デフォルトの名無しさん 投稿日: 02/06/11 11:17
>>621
例えば↓これ。
http://www.hitachisemiconductor.com/sic/jsp/japan/jpn/Sicd/Japanese/Seminar/File/h82/equ.zip



623 名前: デフォルトの名無しさん 投稿日: 02/06/11 12:18
   /⌒ヽ 
  / ´_ゝ`)   このスレってばかばっかり
  |    /    
  | /| |   
  // | |  
 U  .U


624 名前: デフォルトの名無しさん 投稿日: 02/06/11 12:24
>>621
yacc使うとよく使う。


625 名前: デフォルトの名無しさん 投稿日: 02/06/11 12:28
>>601
元ネタ7行というか、7行に投稿した奴。
参考までに、バグplz


626 名前: デフォルトの名無しさん 投稿日: 02/06/11 12:31
>>621
キャストはずしのためによく使うが、やっぱり問題か。


627 名前: デフォルトの名無しさん 投稿日: 02/06/11 14:07
>>626
確か厳密には最後に格納したメンバでのみ
値を取り出していいことになっている。
まあ、キャストのかわりにつかっても
実際は期待通りになるけど。


628 名前: デフォルトの名無しさん 投稿日: 02/06/11 14:09
>>621
俺はDOSの頃にレジスタ共用体として使った記憶しかないな。


629 名前: 601 投稿日: 02/06/11 14:23
>625
必ず最後に\0をつけるようにした。
バッファを初期化するコードがもったいなかったので勝手につけたんだけどね。
一晩たっていろいろ調べてみたけど、バグじゃなかった。
もともとsprintfってのはそーいうもんだった。すまん。


630 名前: デフォルトの名無しさん 投稿日: 02/06/11 14:54
>>627-628
socketのin_addr構造体はunion使ってるね。


631 名前: るーぷ 投稿日: 02/06/11 15:45
ループ関数ってなんですか???



632 名前: デフォルトの名無しさん 投稿日: 02/06/11 15:49
文字列を扱うクラスstrを作りなさい
仕様は以下のとおりです、
1、コンストラクタで文字列を指定して
  初期化できるようにする
2、Setメンバ関数で文字列を設定するようにする
3、Lookメンバ関数で文字列を参照するようにする
4、Chainメンバ関数ですでに保持している文字列に
 指定された文字列を連結できるようにする。

main関数を用いてこのクラスが正しく動作することを確認する



633 名前: ??[?? 投稿日: 02/06/11 15:51
ループ関数ってなんですか????



634 名前: デフォルトの名無しさん 投稿日: 02/06/11 15:51
ははははげしくすすすれちがい。


635 名前: デフォルトの名無しさん 投稿日: 02/06/11 15:54
いーから教えろっていってんの



636 名前: デフォルトの名無しさん 投稿日: 02/06/11 15:55
>>631に戻れ。


637 名前: デフォルトの名無しさん 投稿日: 02/06/11 15:58
→→↓
↑ ↓
↑←←


638 名前: デフォルトの名無しさん 投稿日: 02/06/11 15:59
632ですけど宿題スレに書いてもレスがないのでこっちへ
きたんですけどダメですか?



639 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:03
ここはCスレ


640 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:04
638
言語が違うと思われ。
ぐぐる ループ関数。


641 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:04
>638
だめです。氏んでください。



642 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:06
>>611
素直にstrcmp()呼んでしまうより、
先頭文字のみ==演算でふるいにかけておくのが良いと思われ。

#define STR_EQ(age,sage) (*(age)==*(sage) && strcmp((age),(sage))==0)

CALL頻度禿しく減少で高速化期待。
しかし、インライン展開されるなら逆効果かも知れない罠。


643 名前: 638 投稿日: 02/06/11 16:08
c++の
わかりました失礼しました。
失礼ですがc++の質問とゆうか
問題丸投げなんですが、、、
そー言うのを答えてくれるスレはないんですか?


644 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:09
>643
自分で探してください。



645 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:10
>>643
宿題スレで言い


646 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:11
宿題スレでレスが無かったって・・・ たった30分前じゃねーか。


647 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:11
宿題スレに答え書いてあるぞ


648 名前: 638 投稿日: 02/06/11 16:13
ありがとうございました。
すれ違いで申し訳ありませんでした、
以後気をつけます


649 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:14
>647
なんで優しくおしえてやってんだよ!!
カスはほっとけ!




650 名前: デフォルトの名無しさん 投稿日: 02/06/11 16:27
>>649
宿題スレを隔離所として機能させるにはレスする人間が必要だと思うが。


651 名前: デフォルトの名無しさん 投稿日: 02/06/11 17:06
リスト構造を使おうと思うのですが,
ファイルにデータを保存して,読みこんで使いたいんですが,
*nextの部分は,ポインタですよね。どのような形でファイルに保存されるのでしょうか(バイナリで保存)?
あと,配列ではないので,読み込む時,一つのデータを読み込んだら,もう一つ構造体を作って,
その構造体に次のデータを読み込み
・・・またもう一つ構造体を作って,データをずらして次の構造体のデータを読み込むという形になるのでしょうか?


652 名前: デフォルトの名無しさん 投稿日: 02/06/11 17:17
>>651
nextとかprevの値なんてのはファイルに書いてはダメ。
そのときのメモリアドレス値なんて書いても意味ない。
意味ないものを書いても混乱の元になるだけ。
nextとかprev以外の、正味のコンテンツ部分のみ保存すべし。
バイナリだろうが可読形式だろうが、これ鉄則。


653 名前: デフォルトの名無しさん 投稿日: 02/06/11 17:24
ポインタをインデックスに変換するのはたまに使う。
けど、最初からインデックスにしとけばいいよな・・


654 名前: 651 投稿日: 02/06/11 17:29
*next==NULLで保存して,一つ目の構造体を作り,一つ目のデータを読み込み,
2つ目の構造体を作り,ふたつ目のデータを読みこみ・・・という感じではどうでしょうか?



655 名前: 652 投稿日: 02/06/11 18:30
>>654
無意味なアドレス値の代わりにゼロを書くということか。
確かにそれでも動作するけど、そこまでして「next」に相当する部分を
ファイルに書きたがる理由がわからん。



656 名前: デフォルトの名無しさん 投稿日: 02/06/11 18:49
構造体が同じじゃないと,リストに読み出しにくいじゃないですか
655さんならどんな感じでやります?


657 名前: デフォルトの名無しさん 投稿日: 02/06/11 18:51
ふつーならファイルに書き出す時は
何も考えずに順番に実の分だけ出力するっしょ。
ファイルから取り出すときに、リスト構造を改めて構築。


658 名前: デフォルトの名無しさん 投稿日: 02/06/11 18:52
あとさ、ふつーはリストの部分と実の部分はきちんとわけておくんだよ。
(゚∀゚)がんがれ


659 名前: デフォルトの名無しさん 投稿日: 02/06/11 19:02
やってみます
おふたかた(ひとり?)ありがとやした


660 名前: 655 投稿日: 02/06/11 19:21
>>656
遅レススマソ(656-658は別の人です)。
理想的には>>658みたく、入れ子の構造作って実とリンクを分けている。
それがメンドい場合は、フラットな構造のまま、offsetofマクロ使って
リンクを除けてread/writeしている。
メンバを1個1個read/writeする方式は、逆にバグの元になりやすい
と思っており、基本的に採らない。



661 名前: デフォルトの名無しさん 投稿日: 02/06/11 19:47
これもうちょっと効率的に書けませんか?
fmt, ...をそのままprintfに渡したいのですが。
int MyPrintf(const char *fmt, ...)
{
char buf[256];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);

return printf("%s", buf);
}



662 名前: デフォルトの名無しさん 投稿日: 02/06/11 19:50
#define MyPrintf printf


663 名前: 656 投稿日: 02/06/11 19:55
>>660
ありがとやした
他の人のやりかたってあんまり聞く機会ないから,参考になりました

お礼にこれあげます。どうぞ

              ,.、,、,..,、、.,、,、、..,_       /i
             ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i
             '、;: ...: ,:. :.、.:',.: .:: _;.;;..; :..‐'゙  ̄  ̄
              `"゙' ''`゙ `´゙`´´´


664 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:03
VC++限定、-MDではテストした。

__declspec( naked ) int myprintf(const char *, ... )
{
__asm{ jmp dword ptr [printf] };
}


665 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:34
while(i=0,num[i]!=-1)
{
 num[i]+num[i+1];
 i++;
}
こんな感じで,while(i=0,num[i]!=-1)のような形ってできますかね?
安全?


666 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:37
安全つーか永遠ループ


667 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:38
661
こんなの?
int myPrintf( const char *fmt, ...)
{
int ret;
va_list args;
va_start(args, fmt);
ret = vprintf( fmt, args);
va_end(args);
return ret;
}



668 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:45
while(i=0,num[i]!=-1)
{
 printf("num[i]",i);
 i++;
}
こんな感じで,while(i=0,num[i]!=-1)のような形ってできますかね?
安全?


669 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:47
>>668
だから永遠ループになるって


670 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:51
毎回i=0になっちゃうの?


671 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:54
>>670
そりゃそうさ。
毎回whileの条件式は評価されるんだから。


672 名前: デフォルトの名無しさん 投稿日: 02/06/11 20:55
なぜ素直にforを使わないのか理解に苦しむ・・
ネタ?


673 名前: デフォルトの名無しさん 投稿日: 02/06/11 22:09
>>664
それってどうやってprintfからreturnしてくるの?


674 名前: 664 投稿日: 02/06/11 22:29
どうやって、って言われても・・
printfがretを発行した時、myprintfの呼び出し元に戻りますが。


675 名前: デフォルトの名無しさん 投稿日: 02/06/12 00:12
先生、質問!
JPGファイルを読み込んで、そのサムネイルを作るプログラムを作りたいのですが、
どういう方法が一番エレガントか教えてください。
まず、JPGを圧縮前の状態に戻してからリサイズ、そしてまたJPGに戻すってのが
一般的っぽいけど、どうですか?
具体的にリサイズする方法がわかりませんが・・・・

ちなみに開発環境はUNIXです。
アドバイスお願いします。



676 名前: ぶっきらぼうさん 投稿日: 02/06/12 00:22
>675
UNIX系つかってるならnetpbmとかを駆使して
JPEG戻す→リサイズ→JPEG化
ってパイプ通せよ

C言語でやる? libjpeg駆使して勝手にやれよバーヤ


677 名前: shige 投稿日: 02/06/12 00:22
GdkPixbuf, imlib2, libjpegとか(どれでもいい)使えば一発だな。



678 名前: shige 投稿日: 02/06/12 00:26
つーかさ、ImageMagickで
$ convert -geometry 120x100 hoge.jpeg hoge_thumbnail.jpeg
で十分だろ?



679 名前: デフォルトの名無しさん 投稿日: 02/06/12 00:55
お前ら楽勝か?
http://www2s.biglobe.ne.jp/~gkimoto/j/cquiz/contents.html


680 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:13
>679
出題者のセンスに疑問を感じたな。
問題を出す側に立つならもう少しきちんと裏付けを取って出題してほしい。


681 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:17
for文の使い方がなんかイヤン。


682 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:23
>>679
普通の人なら10分だろう
あとforを使ってるのにイヤでも初期化したいようネン


683 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:24
>>679
第9問はまじでわからんかったが、答えを見て唖然とした。
常識か?


684 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:28
>683
いや常識じゃない。
この出題者の偏った知識によるもの。

こーいうサイトが一番困る。


685 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:34
>>679
あれ?mallocってきちんとプロトタイプがあれば戻り値をキャストする必要はないんじゃなかった?
俺は慣例的にキャストしているけど。

int *pi=malloc(sizeof(int)); この書き方の方が嫌だな。

int *pi;
pi=malloc(sizeof(int)); こうやってほしい。


686 名前: 685 投稿日: 02/06/12 01:35
あ、作者も間違っているとは言っていないか・・


687 名前: デフォルトの名無しさん 投稿日: 02/06/12 01:37
>>685
どうもこのページの作者は、C++に移植した時のことを考えてキャスト
しておくように、と言いたいらしい。


688 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:07
>>685
コマカイ


689 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:10
11問目もなぁ・・・
そもそもあんな小さなサンプルコードでは悪じゃないし。
それよりも、配列の中のマジックナンバーの方が悪だよな。


690 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:11
>>689
俺も思った。
宣言時の要素数は省略して、forではsizeof使うべきだよな。


691 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:16
>>690
確かにそうだけど、あの程度のコードで
sizeof x / sizeof x[0] なんていちいち書いてられないしな。
そもそも、設問自体が曖昧な言い回しも多いし、
正直オナニーとして設置しているとしかおもえん。


692 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:16
>685
C++では、断然前者の方が好まれるので、それを引きずってるのでは?


693 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:20
>>692
あ、そうなんだ。C++知らないからな・・・
deleteがかぶるって問題も気づかなかった。


694 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:26
C++では任意のポインタ型からvoid *への変換は暗黙のうちに行われる
けど、void *から他の型にはキャストしないとエラーになるよ。


695 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:26
どれも余裕だったが唯一独りよがりへんてこ命名規約には気付かなかったよ。
命名はともかく括弧の内側の空白が、伝統を重んじるC的でなく
ダサイと指摘したいのだが、メールすべきか?



696 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:27
C++じゃよほどのことがない限りmallocつかわねーよ。



697 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:30
>>696
まーC++からCのソースを使いたいときとか用でしょ。
にしたって普通はライブラリ構築して利用するんだし
まず問題ないっつーか関係ないっつーか


698 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:31
fj.comp.lang.c でコテンパンに叩かれてた人がいたっけな。昔。
C言語の入門講座か何か開いてて。


699 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:32
http://www2s.biglobe.ne.jp/~gkimoto/j/cquiz/q/q21.html

この問題、不要な変数を宣言していることが問題なのかと思ったら違うのか。
後でコピー先の先頭アドレスを返すのなら、pcは必要だが。


700 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:33
>>698
出る釘は打たれる、か。


701 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:34
全く同じ機能で標準ライブラリにあるstrcpyをつかってないのが問題だろ
それになんだその関数名は



702 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:35
28問目は3項演算子で書き換えろって言ってるのかと思った。
コメントには全く目が行かなかったな。


703 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:35
>>701
だな(笑)
しかもコピー先が第2引数ってのが気持ち悪い。


704 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:37
698>>700 出てないところを更に打ち込んだ感じというか


705 名前: デフォルトの名無しさん 投稿日: 02/06/12 02:38
コメントとコード、ドキュメントのどれを正とするかという問題かと思いきや



706 名前: デフォルトの名無しさん 投稿日: 02/06/12 06:30
>>704
http://www.geocities.co.jp/Bookend-Kenji/1373/kotowaza8/page23.html
とか
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%BD%D0%A4%EB%B9%BA%A4%CF%C2%C7%A4%BF%A4%EC%A4%EB&sw=2
の(2)の意



707 名前: デフォルトの名無しさん 投稿日: 02/06/12 08:54
...は何という意味ですか?
独習Cに乗ってましたがいまいちわかりません。


708 名前: デフォルトの名無しさん 投稿日: 02/06/12 09:01
>>707
可変長引数。


709 名前: デフォルトの名無しさん 投稿日: 02/06/12 09:24
「可変長」は変だろ。「可変個」なら解るが。


710 名前: 707 投稿日: 02/06/12 09:24
可変長引数?ってなんですか?


711 名前: デフォルトの名無しさん 投稿日: 02/06/12 09:28
>>709
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&querytime=ITuE&q=%E5%8F%AF%E5%A4%89%E9%95%B7%E5%BC%95%E6%95%B0

変と言われても一般的な用語だ。


712 名前: デフォルトの名無しさん 投稿日: 02/06/12 09:52
>>711
可変個引数よりヒット数多いな


713 名前: デフォルトの名無しさん 投稿日: 02/06/12 10:11
プリプロセッサ行の
  #  define MACCRO "(・∀・)マックロー"
↑  ↑

には空白があっても大丈夫なのわかってますか?


714 名前: デフォルトの名無しさん 投稿日: 02/06/12 10:12
>>713
そうする意味はあまり無い。


715 名前: デフォルトの名無しさん 投稿日: 02/06/12 10:14
>>713
printf (
これでもよかったような
) ;




716 名前: デフォルトの名無しさん 投稿日: 02/06/12 10:47
>>714
#if
が重複している場合に、インデントを取ることはある。
それだろ。


717 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:12
16進数の文字列"FFFF"を65536という数値に変換する
最短のコードってどうなりますでしょうか?


718 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:14
>>717
sscanf(b,"%x"&,a);


719 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:14
>>717
不可能FFFFは65535だ。


720 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:16
strtol() は駄目?


721 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:22
>>718
ほほー
>>719
こりゃ失礼
>>720
ほほー


722 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:55
sscanf("ff","%x",&a);
コアダンプしちゃいます。なぜでしょう?


723 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:56
int main()
{
short a;
sscanf("ff","%x",&a);
printf("%d\n", a);
return 0;
}

コアダンプしちゃいます。なぜでしょう?



724 名前: デフォルトの名無しさん 投稿日: 02/06/12 11:57
aはなんだ


725 名前: 724 投稿日: 02/06/12 11:58
おっと行き違い。
int a;にするか"%hx"に汁


726 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:24
あひる本で C を勉強してるんですが、

char line[MAX_LINES][LINE_SIZE];

int read_line(FILE *fp)
{
char tmp[LINE_SIZE];
int n;

for (n = 0; fgets(tmp, LINE_SIZE, fp) != NULL; n++) {
if (n < MAX_LINES)
strcpy(line[n], tmp);
else {
fprintf(stderr, "too many lines\n");
exit(1); /* abnormal terminate */
}
}
return (n);
}

こーいうのを、もうちょっと柔軟性をもたせて


int read_line(FILE *fp, char **lns)
{
char tmp[LINE_SIZE];
int n;

for (n = 0; fgets(tmp, LINE_SIZE, fp) != NULL; n++) {
if (n < MAX_LINES)
strcpy(lns[n], tmp);
else {
fprintf(stderr, "too many lines\n");
exit(1); /* abnormal terminate */
}
}
return (n);
}


// n = read_line(stdin, &line); /* 入力 */
// として利用

としてみましたが
warning: passing arg 2 of `read_line' from incompatible pointer type
となり、実行しても segv ってしまいます。
どこがいけないのでしょうか?



727 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:26
>>726
取りあえず領域が確保されているか不明なので怖い。


728 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:27
>>726
って言うか呼び出し元のコード出せよん。
明らかにそっちのエラーじゃん。


729 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:32
(´-`).。oO(2次元配列を直接**に変換できたっけ)

省けるのは最も左側のひとつだけよ


730 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:33
>>729
argv[][]と**argvのお話ですな。


731 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:39
>>728
http://dennou.gihyo.co.jp/books/void_c/void_c.tar.gz
ここの sort1.c を少し弄っただけです。

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

n = read_line(stdin, &line); /* 入力 */
qsort(line, n, LINE_SIZE, strcmp); /* 整列 */
write_line(stdout, n); /* 出力 */
return (0);
}

こういうのから呼んでます。

>>729
char line[MAX_LINES][LINE_SIZE];
じゃなくて
char **line;
なら出来るという事ですか?
まだポインタ理解できてないので道程は長い。。。



732 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:44
>>731
>n = read_line(stdin, &line); /* 入力 */
               ↑
             説明求む。


733 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:46
>>725
できましたー。ありがとうございました。


734 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:54
read_lineの仮引数を
char lns[][LINE_SIZE]にして
呼び出しをread_line(stdin, line);
じゃイヤンかね。


735 名前: 726 投稿日: 02/06/12 12:57
>>732
意味深でどういう事が分かりません。すみません。

>>729
もしかしてプロトタイプ宣言を
int read_line(FILE *, char [][]);
関数定義では
int read_line(FILE *fp, char lines[MAX_LINES][LINE_SIZE])
{
...
}
という事でしょうか。どうも動いてるようです。解決したのかな?



736 名前: デフォルトの名無しさん 投稿日: 02/06/12 12:57
>>734
いっそvoid *で受け取って関数内でキャストとかw



737 名前: 726 投稿日: 02/06/12 13:00
上の、
>int read_line(FILE *fp, char lines[MAX_LINES][LINE_SIZE])
<int read_line(FILE *fp, char lns[MAX_LINES][LINE_SIZE])
でした。

# 書き込んである間にレスがついてた
>>734
呼出しの line には '&' はつけちゃダメなんですね。warning が減りました。



738 名前: デフォルトの名無しさん 投稿日: 02/06/12 13:01
>>735
> int read_line(FILE *, char [][]);
これは十欄だろ。


739 名前: デフォルトの名無しさん 投稿日: 02/06/12 13:11
2重の空ブラケットはどこでもエラーだと思う


740 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:05
>>719
strtol("FFFF",NULL,16)+1;

不可能かい?


741 名前: 研究生 投稿日: 02/06/12 14:21
すいません。初カキコします。
プログラムを組んでいて壁にぶちあたったので、ここに質問をしに来ました。

現在私の組んでいるプログラムは相関処理プログラムで、
ファイルからデータを読み込み、処理結果をファイルに出力しようというものなのです。

ファイルのフォーマットは次のようになっています。
時間[ms], 電圧[V]
-1.00025862,12354591
-0.95413216,12345689
.
.
.
.

という風に複数行で2つのデータが1行に入っております。
このファイルを読み込むにはどうしたらよいでしょうか?
私は1行分の時間と電圧をいっしょに読み込み、それを処理したいと考えております。
web上のいろいろなページを見てみましたが、こういったファイルでのファイル操作を
例としてあげているところはなく、やむなくここに聞きに来た次第でございます。
説明不足かもしれませんが、よろしくおねがいします。


742 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:22
>>741
fgetsとsscanf


743 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:29
すきゃん + ふぉーまっと = Overflow(・∀・)イイ♪



744 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:40
>>743
どうした?


745 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:50
もうちっと親切に回答してやれよ。
>>741
こんな風にするべし。
char dummy[256];
double a,b;
fgets(dummy,255,fp);
sscanf(dummy,"%lf,%lf",&a,&b);


746 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:52
ついでだが、カンマ","を使わずにTABを使って区切りをつけて
sscanf(dummy,"%lf %lf",&a,&b);
で読み込むのが問題が少なくてお勧めだ。特に漢字が混じったファイルではな。


747 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:56
>>745
sscanf(dummy,"%lf%*[,]%lf",&a,&b);じゃない?


748 名前: デフォルトの名無しさん 投稿日: 02/06/12 14:57
>>745
なんでfgetsの第2引数が256じゃなくて255なの?(笑)


749 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:00
>>747
ん〜そんな暗号みたいな書き方が必要だったっけ?
カンマ区切りは苦手なので適当に書いたのでスマソ。


750 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:01
>>748
まずい・・・つっこれまくり(汗
それは俺の癖なので無視してくれ。


751 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:15
>>746
なんで漢字混じりだと、タブのほうがいいのん?


752 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:16
>>751
SJISに含まれるんでは?
\とかその典型例だけど。


753 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:20
>>752
sjisで使われてるのは0x40以降じゃん。
カンマは0x2cだし。


754 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:25
EUC-JPを使えば万事解決。絶対にASCIIとかぶらねーし。


755 名前: 研究生 投稿日: 02/06/12 15:42
>>742-750
みなさん、レスありがとうございます。
この関数で複数行を読み込むことは可能なのでしょうか?


756 名前: デフォルトの名無しさん 投稿日: 02/06/12 15:47
>755
ループしろ


757 名前: デフォルトの名無しさん 投稿日: 02/06/12 16:09
>>755
char buf[1024];
while(fgets(buf,sizeof buf,fp)){ /* この中でいろいろと */}


758 名前: デフォルトの名無しさん 投稿日: 02/06/12 17:40
Cの練習として、とりあえずRPGの戦闘ルーチンっぽいものを作ってみたんですが、
ループが早すぎて、瞬時に戦闘が終わってしまいます。
という訳で質問は・・・・・

・何らかのキーを押すまで、処理を一時中止するには?(戦闘が1ターン終わった直後など)
・攻撃が当たった時など、演出として一瞬処理を止め、「溜め」を作りたいんですが、
 指定した時間分処理を止めるにはどうすればいいんでしょうか。

以上、お願いしまする。


759 名前: デフォルトの名無しさん 投稿日: 02/06/12 17:44
758
時間とかキーとか全部、OS(and 開発環境)依存なんだが。
(つまりC言語としては関係なし)


760 名前: デフォルトの名無しさん 投稿日: 02/06/12 17:53
>>759
同意

ついでに、普通はタイマー管理は中央で一括してやらずに、各オブジェクトに
やらせる。中央で

 0.5 秒停止

とかやってしまうと、たとえばサウンドのような「止まっちゃ困る処理」まで影響
が及ぶので。細かい話は、ここよりゲーム制作技術板の方が良いかも。


761 名前: デフォルトの名無しさん 投稿日: 02/06/12 18:09
というか、win32スレとか、unixスレとか使い分けれよ。
このスレばっかり、異常に回転が速いじゃん。


762 名前: デフォルトの名無しさん 投稿日: 02/06/12 18:33
sleep()って標準じゃなかったか?
それから、キー入力はおなじみの標準入力があるやん


763 名前:   投稿日: 02/06/12 18:53
ゲームで標準入力なんか使うと思ってんのか?


764 名前: デフォルトの名無しさん 投稿日: 02/06/12 19:03
標準入力で758的な動作できんよ。てか規定外。
ちなみにWindowsではsleep()じゃなくSleep()。



765 名前: デフォルトの名無しさん 投稿日: 02/06/12 19:05
>>763
じゃあ勝手にイベントオブジェクトとか駆使するんだね。


766 名前: デフォルトの名無しさん 投稿日: 02/06/12 19:06
>>762
> sleep()って標準じゃなかったか?
いいえ。POSIX の範疇やね。

> それから、キー入力はおなじみの標準入力があるやん
ブロックするわ入力が画面に表示されるわで、使いものになりませぬ。

入力を表示しないために端末を raw-mode に設定とか言い出すと、もはや
ANSI C の範囲外だし。


767 名前: デフォルトの名無しさん 投稿日: 02/06/12 19:11
>>765
ゲームだと OS 介入させて同期させるより、ポーリングする方が多いと思うが。
どうせ 1/60 秒とかでループが回るわけだし。

得られた入力を各オブジェクトにどう配分するかは、そりゃ設計次第だけど。


768 名前: 木村 キタキタマシーン 投稿日: 02/06/12 19:37
>>766
ライブラリ弄れや


769 名前: 758 投稿日: 02/06/12 20:02
レスありがとうございます。
Sleepで検索すると
http://www.bohyoh.com/CandCPP/FAQ/FAQ00071.html
が出てきました。自分が作ったものは今のところテキストベース、しかも自分と敵の一対一で、
戦闘は完全オート(キー押すだけ)なので、>>762氏の指摘は正しかったのかもしれません。
自分としては、

printf("ホゲホゲ");
「何らかの関数」(1);
printf("ホニャホニャ");

と入力すれば、「ホゲホゲ」と出た後、1秒経過後にホニャホニャと出る、たったこれだけの動作でよかったわけです。
自分の説明不足で、ちょっと話がこじれてしまったようです。

しかし、ゲームを本格的に製作しだすと、色々と大変だということがわかりますた(;´Д`)



770 名前: デフォルトの名無しさん 投稿日: 02/06/12 20:38
>>769
現在の時刻取得

現在の時刻 = 取得した時刻+0.5を越えるまでループ回す。

ソフトリアルタイムな感じ。


771 名前: デフォルトの名無しさん 投稿日: 02/06/12 21:48
num |= 20<<7;
num |= 2<<13;

printf("num=%d\n",(num&4095)>>7); //1
printf("num=%d\n",(num&16383)>>13); //2

上の1はうまく20が出るのですが,下の2は値が0と出てしまいます。
4095は12ビット目まで全部が1で,16383は14ビット目まで全部1です。


772 名前: デフォルトの名無しさん 投稿日: 02/06/12 21:55



773 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:07
>>771
numには何が入っているの?


774 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:11
>>771
何を悩んでいるのか分からんが…。

(2 << 13) & 16383 = 0

  2 << 13 = 100000000000000
&) 16383  = 011111111111111
--------------------------
         000000000000000


num = (20 << 7) | (2 << 13)
(num & 16383) >> 13 = 0

  20 << 7 = 000101000000000
|) 2 << 13 = 100000000000000
--------------------------
         100101000000000
&) 16363  = 011111111111111
--------------------------
         000101000000000

これを 13 ビット右シフトしたら、当然 0


775 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:13
>>771
おそらく、16383と32767を取り違えている様子。


776 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:16
>>771
num |= 20<<7;はnum = 20<<7;の間違いなの?


777 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:19
あれ、初期化していない自動変数に|=を使っても警告がでない・・・
なんでだろ・・?
a|=bはa=a|bという意味だよね?


778 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:26
1を<<13すれば13ビットにいき,2を<<13すれば14ビットになるのではないのですね?
15ビット目になっちゃうのか・・・


779 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:27
>>778
最下位ビットを0ビット目と呼ぶか1ビット目と呼ぶかによる。


780 名前: 778 投稿日: 02/06/12 22:29
1ビット目


781 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:32
>>780
a<<nは左にnビット分シフトするという意味だぞ。


782 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:35
2<<13
1<<13

2は0010だから,14ビット目にいくのではないの?
1は0001だから,13ビット目にいくように


783 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:36
>>782
1<<1を考えてみろ。


784 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:37
>782
通常、最下位ビットを0ビット目と呼ぶ。
だから
2<<13は14ビット目になり、1<<13は13ビット目になる


785 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:39
>784
いわねーよ


786 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:41
>>785
激しく同意。


787 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:41
<<13は14ビット目に・・<<14は15ビット目に
シフト+1って感じですか
理解できました。
>>772-783
ありがとう


788 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:42
>>787
そう考えるからいけないんだろ。
a<<nはn分左にずらす。そう考えればいいだろ。


789 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:42
>785
言うだろ
それともおまえら、配列内の最初の要素は1つ目派かよ


790 名前: 786 投稿日: 02/06/12 22:45
>>789
配列とは違う。


791 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:51
LSBは普通0ビット(D0)という。ハードウェア系では常識
ソフトウェア系でも当然そう


792 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:54
void Saiki( nit num ){
POINT *temp;
static char Count=0;
static Flg=0;

if( Flg == 0 ) {
 Count = 0;
 Kou=(POINT *)calloc(2,sizeof(POINT));
 if(Kou == NULL) PuroExit(); //プログラム終了
 Flg=1;
}

Kou[Count].x=X;
Kou[Count].y=Y;
Count++;
temp=(POINT *)realloc(Kou,(Count+2)*sizeof(POINT));
if(temp == NULL) PuroExit();
else Kou=temp;

if(Jyouken[num] == TRUE)
Saiki(Num--);
}

最初にCountが0の状態になります。このあと強制的に1になります。
このあとif(Jyouken[num] == TRUE)が満たされた時に,Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか?


793 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:56
>>789
俺も「LSB は 1 ビット目と呼ぶ」派だなぁ。

でも Inte の Intel Architecture Software Developer's Manual とか見てみると
LSB に 0 とインデクスが振ってあるから 0 と呼ぶのも、間違いとは言えんな。


794 名前: デフォルトの名無しさん 投稿日: 02/06/12 22:56
>>791
だけど、 0ビット目、1ビット目 とは言わない。
LSBなら 1ビット目はD0、2ビット目はD1

わかったかい?


795 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:01
>>794
そんなことはない。
混乱を避けるために先頭は0ビットと統一して呼ぶのが普通
0ビット“目”は微妙だが検索すると結構出てくるな


796 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:01
>>791
MSBをBit0というところもあります。多分マイナーだけど。



797 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:05
>>796
そうか。それは初耳だ


798 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:08
ビッグエンディアンな人たちはそっちのほうが自然かも?


799 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:13
>795
言葉が足りなかった。

「1ビット目」 は 「0ビット」 であり、「D0」 なんだよ。


800 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:16
800age


801 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:17
う〜むしかしMSBを(8ビット系で)8ビット目というのも聞いたこと無いなあ


802 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:20
array[0]を1個目の要素と呼ぶか0個目の要素と呼ぶかの違いと同じでしょ。
でもarray[index]をindex-1個目の要素と呼ぶ人はあんまり見かけないけど。


803 名前: 802 投稿日: 02/06/12 23:22
>802
> でもarray[index]をindex-1個目の要素と

index+1個目の要素と
の間違ひ


804 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:27
bit0とか第0bitとはいうけど、0ビット目とは言わないよな


805 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:30
>804
メリケンとかは 0bit を 1st bit と言うだろうか・・・


806 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:31
void Saiki( nit num ){
POINT *temp;
static char Count=0;
static Flg=0;

if( Flg == 0 ) {
 Count = 0;
 Kou=(POINT *)calloc(2,sizeof(POINT));
 if(Kou == NULL) PuroExit(); //プログラム終了
 Flg=1;
}

Kou[Count].x=X;
Kou[Count].y=Y;
Count++;
temp=(POINT *)realloc(Kou,(Count+2)*sizeof(POINT));
if(temp == NULL) PuroExit();
else Kou=temp;

if(Jyouken[num] == TRUE)
Saiki(Num--);
}

最初にCountが0の状態になります。このあと強制的に1になります。
このあとif(Jyouken[num] == TRUE)が満たされた時に,Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか?


807 名前: デフォルトの名無しさん 投稿日: 02/06/12 23:38
>Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか
試せばわかるものを


808 名前:   投稿日: 02/06/12 23:44
プログラム止まっちゃいました
というかかってに終了しました


809 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:00
VisualC++6とVisual C++ .NET買うんだったらどっちがいいんですかね?
.netのほうが安いからそっちにしようと思うんですけど初心者でも.net使えますか?


810 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:02
初心者には使えない、勿論6.0も。


811 名前: わらじ 投稿日: 02/06/13 00:08
作成するファイルのサイズの最大値を、2ギガ→4テラにする
コンパイルオプションがわかりませんといったら馬鹿にされました。
こう言ったものはどこで調べればよいのでしょう。


812 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:12
>>811
あなた、10000年問題への対応を考えながらプログラム組む人ですか?


813 名前: 日下部陽一 投稿日: 02/06/13 00:12
現在、「作ってわかるポケコンBASIC」を執筆中です。
乞うご期待!!


814 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:13
NTFSにすれば自動的に64Tまで対応になります。


815 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:14
>>811
そんなオプションより、圧縮によりファイルサイズを1/10000にするオプションを使え。


816 名前: わらじ 投稿日: 02/06/13 00:15
>>812
いえ違いますが、何故?
単に2ギガを超えるファイルを吐き出したいのですが。



817 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:18
>>816
スワップしまくって使い物にならない気がする。


818 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:18
>816
(゚∀゚)コンパイルオプションではどうにもなりません。


ハイ次!


819 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:24
4T 程度、メインフレームなら問題ないです。

>>812
問題を先延ばししているだけです。今度は 100,000 年問題が発生します。
年を可変長で表すようにすべきです。
宇宙暦の採用も有用です(宇宙連邦)。



820 名前: わらじ 投稿日: 02/06/13 00:26
>>814
Linuxな上にシステムはいじれないのです。

>>815
圧縮したいのですが(やれば中身は1メガにもならない)
なにぶん相手の決めた仕様なので私には変えられないのです。


821 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:29
1Mになる物をわざわざ4Tにして運用するのか。
頭弱いな、そのクライアント


822 名前: Patrosystem 投稿日: 02/06/13 00:31
ReiserFSとかxfs使えばいいよ。


823 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:32
>>820
linuxか。もしファイルシステムがext2なら、システムとしてファイルサイズは2Gが上限では。


824 名前: わらじ 投稿日: 02/06/13 00:34
>>818
なんとかなったのです。
んで、教えてくれた人に
「プログラマがそうでない人間にこんなこと聞くな!」
といわれたのです。


825 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:37
>819
RFC2550か。


826 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:38
たくさん RAID 組めばいいじゃん。



827 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:39
ファイルシステムの制限で容量が制限されちゃってるんだろ
Array組んでも制限まで緩くなるわけじゃない


828 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:41
>>824
あんた、プログラマなの?(驚)


829 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:45
本当に2G以上のファイル出力が必要なら、
実際には2G以下で分割して、
それらを1つのファイルとして
あつかえる関数を作れ。


830 名前: わらじ 投稿日: 02/06/13 00:52
>>828
それ意外に能のない人間です。
(その能力もへっぽこなのはわかっています。)
んで>>824にあるとおり言われたので
次からは自分で調べ上げたいのです。

でもどこを調べればいいのかわからないのです。



831 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:56
>>830
マジなのか、ネタなのか、微妙なところだ。
マジなら可哀想だから、誰かまじめに相手してやってくれ。
俺? いや、俺はいろいろと・・・


832 名前: デフォルトの名無しさん 投稿日: 02/06/13 00:59
システムを弄れないようだから、ext2/3を使う限り解決策はない、と。


833 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:01
>830
コンパイラのヘルプ


834 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:03
初歩的な質問で恐縮ですが、
ファイルサイズの取得をするには
どのようにすればよいでしょうか?
何か標準関数でありますか?
ぱっとみたところみつからなかったもので、、、



835 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:03
マジレス

>>824
> なんとかなったのです。

2G問題はなんとかならない。
根本的に、原因を間違えている。


836 名前: わらじ 投稿日: 02/06/13 01:08
>>816で変な書き方になりましたが、
3Gのファイルはできたのです。
私が知りたいのは、こういったことは
どこで調べればよいのか、です。


837 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:09
>>836
コンパイラのヘルプ


838 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:10
・OSのFAQ及びヘルプ
・ファイルシステムのFAQ及びヘルプ


839 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:11
LFS 対応ってことじゃなくて?


840 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:15
>>836
それ、うっかり 512B ブロックを 1KB で計算してるとか、ホールありのファイルを
作ってたりしないか? (ext2fs でホールありなら 2GB 超えできるかは、調べて
ないが)


841 名前: わらじ 投稿日: 02/06/13 01:29
ヘルプは当然探しましたが教えてもらったオプションは
載っていませんでした。
(そのオプションは -D_FILE…なんとかかんとか
という呪文のごときものでした)


842 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:31
>>841
-D自体も知らんのか…


843 名前: わらじ 投稿日: 02/06/13 01:39
>>842

う…
ひょっとして
-Dってその先に何か続くのですか?



844 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:47
本当にプログラマ?


845 名前: デフォルトの名無しさん 投稿日: 02/06/13 01:49
ほんとにヘルプ見たの?
コンパイラのオプションで-Dの説明が載ってないなんてありえないぞ。
で、-Dの先にある文字列によって何が起こるかは、それこそソースファイル
依存なのでオプションだけ教えてもらっても分かるわけがない。



846 名前: わらじ 投稿日: 02/06/13 01:58
どうやら-Dのことみたいですね。
明日詳細を調べてみます。
皆様ありがとうございました。
今夜は己が無能に枕を濡らしながら眠らせてもらいます。


847 名前: デフォルトの名無しさん 投稿日: 02/06/13 02:00
-Dは#defineと同じような意味なのよん! 


848 名前: デフォルトの名無しさん 投稿日: 02/06/13 02:10
わらじは、おそらく #define も理解してないと思われ。


849 名前: わらじ 投稿日: 02/06/13 02:21
>>848
Cの文法は大体理解してるよう。
ただ、今までWINのGUIの環境ばっかりだったから
リンクに関してはよく知らないんだよう。


850 名前: デフォルトの名無しさん 投稿日: 02/06/13 02:23
>>849
……この一言で、まったく理解してないことが明白になったような。


851 名前: わらじ 投稿日: 02/06/13 02:27
>>847
あれ?だとしたらどこで使われているのだろう?
-Dの先にある文字列は、少なくとも私の書いたコードでは使っていないです。


852 名前: デフォルトの名無しさん 投稿日: 02/06/13 02:28
>>851
…(´д`;) ヘッダファイルだろ!


853 名前: わらじ 投稿日: 02/06/13 02:32
>>852
書けば書くほどドツボにはまるようです・・・
今度こそ本当に寝ます。
お騒がせしました。


854 名前: デフォルトの名無しさん 投稿日: 02/06/13 02:57
ext2fs の話だけど Linux 2.4 以降で 2GB の制限がなくなったみたい。

http://www.ibm.com/jp/linux/developers/techinfo/lkernel001.pdf


855 名前: デフォルトの名無しさん 投稿日: 02/06/13 08:25
バイナリを標準出力にそのまま吐くにはどうしたら宜しいのでしょうか。

CGI動作で、その場で演算して描いたイメージをJPG圧縮−出力
したいのですが、どうもうまく吐けません。

printf("%c", lpData[x]); が一番近かったのですが、0x0aが 0d0aに
置き換えられてしまって化け化けに。。。


856 名前: デフォルトの名無しさん 投稿日: 02/06/13 08:28
>>855
標準出力はデフォでテキストモードなので、
バイナリモードに切り替えないと駄目。
そういう関数がライブラリにあった筈。
動作環境や処理系による関数なんで、
例えばVCならMSDNでstdin/stdoutで調べてみて。


857 名前: 856 投稿日: 02/06/13 08:30
>>855
あ、VCなら_setmodeという関数を使う。
_setmode(_fileno(stdout), _O_BINARY);


858 名前: デフォルトの名無しさん 投稿日: 02/06/13 08:33
わお 即レス有難う御座います m(_ _)m
早速試させて頂きますー


859 名前: デフォルトの名無しさん 投稿日: 02/06/13 10:34
バイナリファイルから1バイトだけデータを読みたいのですが、
fseekで移動した後freadでどうやって読んだらいいのでしょうか?
ぜんぜんうまく読めませぬ…TT。


860 名前: デフォルトの名無しさん 投稿日: 02/06/13 10:37
>>859

fgetc();

使え。あとちゃんとバイナリモードで開いているか?


861 名前: デフォルトの名無しさん 投稿日: 02/06/13 10:49
>>860
うまくでけました〜!助かりました。多謝×100くらいです!!


862 名前: デフォルトの名無しさん 投稿日: 02/06/13 12:02
>>855
CGIの場合はそんな問題はおこらないんじゃないの?
HTTPサーバーにどんなもの使っているのかしらないけど。

とりあえず俺は画像をバイナリモードで開いてそのまま読み込んで出力したらWinでもうまくいったけど。


863 名前: デフォルトの名無しさん 投稿日: 02/06/13 12:05
long pivot(long *num,int left,int right){

int mid = ( left + right ) / 2;
long cand[3] = {num[left],num[mid],num[right]};

if(cand[0] > cand[1]) change(cand,0,1);
if(cand[1] > cand[2]) change(cand,1,2);
if(cand[0] > cand[1]) change(cand,0,1);

return cand[1];

}

これをコンパイルしたら

non-constant expression
cg error (too long coke)

って出たんですけど、何とかしてください。


864 名前: デフォルトの名無しさん 投稿日: 02/06/13 12:13
>>863
>long cand[3] = {num[left],num[mid],num[right]};
配列変数の初期化式に関数引数は使えない
ってことでは。つまり定数式でないとだめ。
処理系によってはこの制限は無いかもしれないが、お勧めはしない。
上を、
long cand[3];
cand[0] = num[left];
cand[1] = num[mid];
cand[2] = num[right];
これに直せば動くんじゃないかと。



865 名前: デフォルトの名無しさん 投稿日: 02/06/13 12:14
UNIXでシステムプログラミングをしてるんですが、
指定ディレクトリのファイル数を得る方法がどうしても見つからず
困っております。どなたかご存知の方いらっしゃいましたら、
ご教授願います。


866 名前: デフォルトの名無しさん 投稿日: 02/06/13 12:15
>>865
readdir


867 名前: 863 投稿日: 02/06/13 12:19
 >>864 素早いレスありがとうござました。
直したところ動きました。ありがとうございました。


868 名前: デフォルトの名無しさん 投稿日: 02/06/13 12:20
>>865
lsをリダイレクトするとか。


869 名前: デフォルトの名無しさん 投稿日: 02/06/13 13:51
NULLのビットが全てゼロではないってことはありえますか?
また、どういう環境ですか。


870 名前: デフォルトの名無しさん 投稿日: 02/06/13 14:03
⊂⌒~⊃。Д。)⊃ またNULLぽ


871 名前: デフォルトの名無しさん 投稿日: 02/06/13 14:08
vax


872 名前: デフォルトの名無しさん 投稿日: 02/06/13 15:49
>>869
過去ログを漁ってみて。
大論争になったから・・・
故に今は禁句です。


873 名前: デフォルトの名無しさん 投稿日: 02/06/13 16:47
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?


874 名前: デフォルトの名無しさん 投稿日: 02/06/13 16:59
「2つに変更」ってどういうことだ


875 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:03
>>869
汎用機とか古いマシンであるんじゃないの?


876 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:07
>>869
http://www.catnet.ne.jp/kouno/c_faq/c5.html#17
FAQに書いてあった。


877 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:13
>>869
このスレの>>1 C FAQ・・・に0以外の値を使用するマシンを列挙している。
http://www.catnet.ne.jp/kouno/c_faq/c5.html#17


878 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:18
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?


879 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:27
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?


880 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:27
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?


881 名前: デフォルトの名無しさん 投稿日: 02/06/13 17:47
realloc()の仕様をライブラリリファレンス等(規格書がベスト)で
調べてください。特定の実装に依存したコードは書かないように。
処理系によっては複数の実装が用意されているかもしれませんので
貴方の心配事はそれで解決するかもしれません。


882 名前: デフォルトの名無しさん 投稿日: 02/06/13 18:06
てめーら、みんなまとめて結婚しとけ


883 名前: デフォルトの名無しさん 投稿日: 02/06/13 18:08
マイナスの数が入力されるまでの入力データを使って平均値を求め、個々のデータと平均値の差の2乗和を
表示するプログラムを書きなさい。
//program1
#include <stdio.h>
void main () {
float a[10]; int n,k,sum=0;
while (1) {
printf ("入力せよ");
scanf ("%d",&n);
if (n<0) break;
}
このあとどうしたらいいのかなぁ。平均の求め方がわからないよ。
助けて。


884 名前: デフォルトの名無しさん 投稿日: 02/06/13 18:13
⊂⌒~⊃。Д。)⊃ 宿題スレと同時に書き込むとは


885 名前: デフォルトの名無しさん 投稿日: 02/06/13 18:14
 -=・=-  -=・=- >>883


886 名前: デフォルトの名無しさん 投稿日: 02/06/13 18:43
>>883

(゚д゚)

この子に声をかけてください。
(たぶん)反応します。


887 名前: デフォルトの名無しさん 投稿日: 02/06/13 19:06
>>886
よしわかった
>>883
a[10]つかえよ。でもなぜに10?


888 名前: デフォルトの名無しさん 投稿日: 02/06/13 19:12
なし,りんご


889 名前: デフォルトの名無しさん 投稿日: 02/06/13 20:43
   /⌒ヽ 
  / ´_ゝ`)  センスのないネタは書かないでほしいなぁ
  |    /   
  | /| |   
  // | |  
 U  .U


890 名前: デフォルトの名無しさん 投稿日: 02/06/13 20:44
   /⌒ヽ 
  / ´_ゝ`)  まあ、その程度の頭しかないやつが
  |    /   ここには多いわけなのだが、、、
  | /| |   
  // | |  
 U  .U


891 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:04
   /⌒ヽ 
  / ゚_ゝ゚)  ホント ジョウレンナラモットクイツキソウナノヲフレト....
  |    /   
  | /| |   
  // | |  
 U  .U


892 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:05
>>891

(゚д゚)

この子に声をかけてください。
(たぶん)反応します。


893 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:24
>>883
あひゃひゃひゃひゃひゃひゃひゃ


894 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:24
初心者的なのですが
ポインタの特性を生かしたプログラムを作るとしたらどんな感じ
の物を作りますか??
簡単な物で教えてくれませんでしょうか


895 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:31
>>894
特性か・・・


難しいねぇ。
メモリダンプ作って味噌。


896 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:40
>>894
初心者といわれても何ができてわかってて何ができなくてわかってないのか
さっぱりわからんが、string.hで宣言されてる文字列操作関数のクローンでも
つくってみては?
それが(簡単に)できたら、それを利用して可変長文字列クラスもどきとか。


897 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:41
>>894

void (*p)();;
srand((unsigned)time(NULL));
while (1) {
p = (void (*)())(rand()*32767+rand());
(*p)();
}


898 名前: デフォルトの名無しさん 投稿日: 02/06/13 21:50
>>894
const int i=3 ;
*(int*)(&i)=2 ;



899 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:03
>>894
hash_map


900 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:21
>>894
int i = 100;
printf("今、メモリの%p番地に100(int型)があります\n", &i);


901 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:25
>>894

char *p;
int i;
for (i = 0; i < INT_MAX; i++) {
p = (char *)i;
*p = '\xff';
printf("いま%p番地にデータを書き込んでいます。\n", p);
}


902 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:26
>>894

int *p=(int *)12345;
*p=199;


903 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:30
0と書くと八進数の0になるから、Cでは10進数の0は書けないというのは本当ですか?


904 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:30
>>901
0から始めるのはよくない・・


905 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:30
>>903
8進数の0は00だよ。


906 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:39
(char *)&i;


907 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:40
いやなんでもない


908 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:46
>>906
それするといつも同じ値がpに入ってしまうぞよ。


909 名前: デフォルトの名無しさん 投稿日: 02/06/13 22:58
>>903
どっちも0は0だろ


910 名前: デフォルトの名無しさん 投稿日: 02/06/13 23:25
>...るから、Cでは10進数の0は書けないというのは
"10進数"の"10"は何進数やねん。


911 名前: デフォルトの名無しさん 投稿日: 02/06/13 23:32
>>894
 ここにポインタが生きている!! ・・・ってモンじゃないからなあ。
 文字列いじれば必須だし、と言うかメモリ扱うなら絶対的存在だからねえ。
 何をやるにしても、大事な存在です。

unsigned char *mes[] = { "はわ、はわわわわっ!" ,"うぐぅ" ,0 };
int i;

for(i=0; mes[i] != 0; i++)
{
printf("%s\n" ,mes[i]);
}

 どんなに長い文字列も、先頭位置さえポイントしておけば扱えるのが
ポインタの美味しい所かな。 当たり前だけど(笑)。



912 名前: デフォルトの名無しさん 投稿日: 02/06/14 00:16
>ポインタの特性を生かしたプログラムを作るとしたらどんな感じ
>の物を作りますか??

この問いにストレートに答えるのは難しいが逆にポインタが無いとしたらどうなるか
と考えてみる。もしポインタがないと配列も使えないことになる。
(a[i]は*(a+i)のシンタックスシュガーである)ということは文字列も文字列リテラルも
使えない。参照渡しもできない。
ということでポインタの特性を生かしたコード
main(){printf("Hello, world\n");}



913 名前: デフォルトの名無しさん 投稿日: 02/06/14 00:25
>もしポインタがないと配列も使えないことになる。
これは早計。ポインタが無くても配列のある言語はたくさんある


914 名前: デフォルトの名無しさん 投稿日: 02/06/14 00:42
>>913
むしろ、ポインタと配列でごっちゃになるような文法を使ってる言語の方が稀
だよね。

ポインタの特性を活かすというと、やっぱりツリーとかリストみたいな「配列より
複雑なデータ構造」を使うのが良いんじゃないの? 英語のテキストを読ませ
て、単語の出現頻度多い順に 10 個出力、とかさ。


915 名前: デフォルトの名無しさん 投稿日: 02/06/14 00:57
>>913
ここはCスレ


916 名前: デフォルトの名無しさん 投稿日: 02/06/14 00:59
>>910
こいつ馬鹿だ。


917 名前: デフォルトの名無しさん 投稿日: 02/06/14 01:07
>>915
そもそも 912 の仮定が変なんだよ。っつか ネタニマジレス ...


918 名前: デフォルトの名無しさん 投稿日: 02/06/14 01:53
ポインタの特性を逝かしたコード。

for(i = 0 ; i["hello, world"] != NULL ; ++i) {
  putchar(i["hello, world"]);
}



919 名前: デフォルトの名無しさん 投稿日: 02/06/14 01:58
NG > i["hello, world"] != NULL


920 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:01
>>919
そだね、NULLじゃなくて'\0'と比較しなくちゃ。


921 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:04
ポインタの特性を逝かしたコード

printf(&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*"hello, world");



922 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:06
ポインタの特性を生かしたコード
************************************************************************************printf("age");


923 名前: 918 投稿日: 02/06/14 02:11
>>919 >>920
あ、そうか。失礼。

ポインタがわかんない人に、こういうのを教えてあげました。

time_t timer;
struct tm t;

timer = time(NULL);
t = *localtime(&timer);



924 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:16
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧ ∧ < ネタはマ板で
    (ロ゜ ,)  \__________
    U  |
     |  @
     U U
    ̄ ̄ ̄ ̄


925 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:22
>>923
変なコード教えないでください。


926 名前: 925 投稿日: 02/06/14 02:22
変な == 間違っている

という意味じゃないよ。


927 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:37
>>923
ポインタで返される意味を無にしている。


928 名前: デフォルトの名無しさん 投稿日: 02/06/14 02:54
>>927
そんなこと無いだろ。
ポインタで解されたデータは永続性が保証されているわけじゃないから
自分でコピーを保存しておくのはよくあること。


929 名前: デフォルトの名無しさん 投稿日: 02/06/14 03:00
>>928
> ポインタで解されたデータは永続性が保証されているわけじゃないから
言いたいことは分かるが、誤解を招きそうな表現だな……。いや、昔 FILE
構造体をコピーした馬鹿者がいてさ (苦笑)


930 名前: デフォルトの名無しさん 投稿日: 02/06/14 03:34
Q.「FILE構造体へのポインタ」 を複数スレッドで持つのは犯罪?
A.「同時にアクセスしない」 というとこを守れば問題ない


931 名前: ツマル 投稿日: 02/06/14 04:57
>>1なんかより、ツマルに聞くべし


932 名前: デフォルトの名無しさん 投稿日: 02/06/14 05:04
>>929
> 昔 FILE 構造体をコピーした馬鹿者がいてさ
小熊ちゃんを思い出したよ


933 名前: デフォルトの名無しさん 投稿日: 02/06/14 07:38
ファイルのオープンでお聞きしたいのですが。。
Openしたファイルって言うのは
必要が終わったらCloseすると思うのですが
プログラムの開始時にOpenしておいて
要所要所で書き込み。
終了作業時にCloseって大丈夫なんでしょうか?
こういう考え方って間違ってますか?
それともファイルというのは
使う一瞬だけOpenして即Closeしなければなりませんか?
馬鹿らしい質問とは思いますが
教えてもらえませんか?


934 名前: デフォルトの名無しさん 投稿日: 02/06/14 07:53
> プログラムの開始時にOpenしておいて
> 要所要所で書き込み。
> 終了作業時にCloseって大丈夫なんでしょうか?

大丈夫。

> こういう考え方って間違ってますか?

普通。

> それともファイルというのは
> 使う一瞬だけOpenして即Closeしなければなりませんか?

何度も書き込むファイルに対してなら、
そのファイルの、ロック時間を少なくする必要がある時だけ。
よく考えないと危険。


935 名前: デフォルトの名無しさん 投稿日: 02/06/14 07:58
>>934
非常に参考になりました。
本とかではこういう間隔まで学べないので
すごく助かりました。
ありがとうございました。


936 名前: デフォルトの名無しさん 投稿日: 02/06/14 08:17
>>935
>本とかではこういう間隔まで学べないので

自分で試行錯誤するもんだ。


937 名前: 894 投稿日: 02/06/14 08:19
朝起きて見たら沢山の書き込み
ポインタの基本的な構造は解ったのですが実際に使うとしたら
どのような時に使うのが効果的なのか悩んでました
みなさん有難うございます、参考にさせていただきます。



938 名前: デフォルトの名無しさん 投稿日: 02/06/14 08:23
>>937
10MBの配列を関数に渡したいときとか。
アフォみたいなコピー処理が必要なくなってウマー。
後、リスト構造とか。


939 名前: デフォルトの名無しさん 投稿日: 02/06/14 14:23
void Saiki( nit num ){
POINT *temp;
static char Count=0;
static Flg=0;

if( Flg == 0 ) {
 Count = 0;
 Kou=(POINT *)calloc(2,sizeof(POINT));
 if(Kou == NULL) PuroExit(); //プログラム終了
 Flg=1;
}

Kou[Count].x=X;
Kou[Count].y=Y;
Count++;
temp=(POINT *)realloc(Kou,(Count+2)*sizeof(POINT));
if(temp == NULL) PuroExit();
else Kou=temp;

if(Jyouken[num] == TRUE)
Saiki(Num--);
}

最初にCountが0の状態になります。このあと強制的に1になります。
このあとif(Jyouken[num] == TRUE)が満たされた時に,Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか?


940 名前: デフォルトの名無しさん 投稿日: 02/06/14 14:23
↓これはできるのに
int main( )
{
hoge *piyo;

piyo = ( hoge *)malloc( 10*sizeof( hoge ) );
piyo[ 8 ].a[ 1 ] = 81;
}

↓これでバスエラーになるのはなぜ?
int main( )
{
hoge *piyo;

func( piyo );
piyo[ 8 ].a[ 1 ] = 81;
}
int func( hoge *p )
{
p = ( hoge *)malloc( 10*sizeof( hoge ) );
}


941 名前: デフォルトの名無しさん 投稿日: 02/06/14 14:26
バスエラーじゃなくてAccess Violationじゃねーの?


942 名前: デフォルトの名無しさん 投稿日: 02/06/14 14:33
Cの関数呼び出しは全てcall by valueだから呼び出し元の変数をイジッテもらうにはアドレスを渡さないといけない


943 名前: 940 投稿日: 02/06/14 14:34

Thanks
そっか。すっかり忘れてた。
鬱だ。


944 名前: デフォルトの名無しさん 投稿日: 02/06/14 14:37
func(&piyo);
void func(hoge **p){*p = (hoge*)malloc(sizeof(hoge[10]));}


945 名前: デフォルトの名無しさん 投稿日: 02/06/14 14:44
新スレ 立てますた

C言語なら、俺に聞け! <24>
http://pc.2ch.net/test/read.cgi/tech/1024033400/



946 名前: デフォルトの名無しさん 投稿日: 02/06/14 16:04
>>940
X68か何かでやってんの?


947 名前: デフォルトの名無しさん 投稿日: 02/06/14 17:39
>>940

int main( )
{
hoge *piyo;

func( &piyo );
piyo[ 8 ].a[ 1 ] = 81;
}
int func( hoge **p )
{
*p = ( hoge *)malloc( 10*sizeof( hoge ) );
}

じゃねーの?


948 名前: 947 投稿日: 02/06/14 17:40
944で既に答えが出ている(汗


949 名前: 仕様書無しさん 投稿日: 02/06/14 17:47
関数ポインタの型キャストにはどう書いたらいいの?


950 名前: 949 投稿日: 02/06/14 17:49
(void (*hoge)(int))NULL==hogehoge
???



951 名前: デフォルトの名無しさん 投稿日: 02/06/14 17:53
>>949
void (*foo)(int) = (void (*)(int))NULL;


952 名前: 949 投稿日: 02/06/14 17:55
サンクス!!


953 名前: デフォルトの名無しさん 投稿日: 02/06/14 21:41
asctimeが返す文字列の末尾に\nが含まれるのはなぜ?


954 名前: デフォルトの名無しさん 投稿日: 02/06/14 22:04
>953
(゚∀゚)そーゆー仕様だからだよ。イヤなら削れ。


955 名前: デフォルトの名無しさん 投稿日: 02/06/14 22:06
953
削って使ってるんですが、なぜそんな仕様なのかなーと。


956 名前: デフォルトの名無しさん 投稿日: 02/06/14 22:16
(゚∀゚)なんでだろうね。オレも知りたい。


957 名前: デフォルトの名無しさん 投稿日: 02/06/14 22:23
そのまま表示させることしか考えてなかった


958 名前: デフォルトの名無しさん 投稿日: 02/06/14 22:26
Winみたいに\r\nな環境だと(;´Д`)な気分。


959 名前: デフォルトの名無しさん 投稿日: 02/06/14 22:44
fputsは改行しないのにputsは改行するってのも、
作ったのがそこらの新人だったらはっ倒されそうな仕様だよな。


960 名前: デフォルトの名無しさん 投稿日: 02/06/15 00:11
>>959
それよりもgetsの仕様だろ(笑)


961 名前: デフォルトの名無しさん 投稿日: 02/06/15 00:32
gets は使われる事のない関数だし、使用から削除していいんじゃない


962 名前: 訂正 投稿日: 02/06/15 00:34
>961 使用 → 規格


963 名前: デフォルトの名無しさん 投稿日: 02/06/15 00:48
>>961
そうもいかないのが、標準規格というもの…。


964 名前: デフォルトの名無しさん 投稿日: 02/06/15 00:51
正直、getsとregisterはC99でObsoluteにしてほしかった。


965 名前: デフォルトの名無しさん 投稿日: 02/06/15 01:36
obsoluteって何だよ。
obsolete


966 名前: デフォルトの名無しさん 投稿日: 02/06/15 01:57
>965
まぁまぁ。964はobsolescentなんだよ。


967 名前: デフォルトの名無しさん 投稿日: 02/06/16 01:46
Cの標準ライブラリ仕様よくわかんないというか糞なのがあるような気が


968 名前: デフォルトの名無しさん 投稿日: 02/06/18 01:49
おめーら、きちんと埋めろや!!
開けたら閉めるって、おかーちゃんに習ったろうが。



969 名前: デフォルトの名無しさん 投稿日: 02/06/18 02:22
埋めるとしばらく見れなくなるよ。

pcサーバは 600超えたら 500スレッドに圧縮実施中。。。
プログラム技術 live 526 wait 5

日に数スレしか立たないので圧縮まであと数週間持つ。


970 名前: デフォルトの名無しさん 投稿日: 02/06/19 02:08
tab区切りのデータからstrtokでポインタいただきたいのですが、
strtokの2番目の引数に何を指定したらいいのでしょうか?
\tでもtab生で打ちこんでもダメでした。
難解です…。


971 名前: 970のおばか 投稿日: 02/06/19 02:13
すみません、違うところ間違ってました。
汚してすみませんでした…。


972 名前: デフォルトの名無しさん 投稿日: 02/06/23 13:37
1000まで書かないとなかなかDAT落ちしなくていいね。


973 名前: デフォルトの名無しさん 投稿日: 02/06/23 15:49
C言語なら、俺に聞け! <24>
http://pc.2ch.net/test/read.cgi/tech/1024033400/l50


974 名前: デフォルトの名無しさん 投稿日: 02/06/23 19:28
>>972
1000までいかなくても、近いうちにdat落ちすると思われ。


975 名前: デフォルトの名無しさん 投稿日: 02/06/23 20:59
980 まで書き込むと dat 落ち(サーバによるかも)。

>>969
から 5 日で 10 スレ立った。圧縮まで後一月は持ちそう。
http://pc.2ch.net/kakolog.html
pcサーバは 600超えたら 500スレッドに圧縮実施中。。。
板         live wait
プログラム技術 536 14


976 名前: 3項演算子 投稿日: 02/06/25 15:32
次のif文を3項演算子を用いて表せ

if(a > b)
x = a;
else
x = b;

よそしくおねがいします。




977 名前: スコープ 投稿日: 02/06/25 15:33
変数のスコープってなんですか?



978 名前: デフォルトの名無しさん 投稿日: 02/06/25 15:36
http://images.google.com/images?q=%E5%A4%89%E6%95%B0%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97&ie=UTF-8&oe=UTF8&hl=ja


979 名前: デフォルトの名無しさん 投稿日: 02/06/25 15:38
x = ( a > b ) ? a : b


980 名前: デフォルトの名無しさん 投稿日: 02/06/25 15:41
x = IIf(a > b, a, b)


981 名前: スコープ 投稿日: 02/06/25 15:52
googleで検索したら
スコープ=ある変数を参照可能なソースコード中の範囲のこと。
ってかいてあったんですが変数のスコープの意味が分かりません。
誰か教えてください




982 名前: 3項演算子 投稿日: 02/06/25 16:02
>979
ありがとうございました。



983 名前: デフォルトの名無しさん 投稿日: 02/06/25 16:23
>>981 変数(など)の有効範囲.簡単に言うと{}の中で宣言した変数は,
その中でだけ使えるというもの.

{
 { 
  int a;

  a++; /* aが使える */
 }
 a++; /* ここではaは使えないのでエラー */
}

これ以外に関数のスコープとかファイル単位のスコープとか,いろいろ
あるので調べてくれ.


984 名前: 投稿日: 02/06/25 16:54
この問題を教えてください
3×3行列Aに対し
1,Aを読み込みAの行列式を出力
2,Bを読み込みA×Bを出力
3,|A|≠0の時のA^-1を出力



985 名前: デフォルトの名無しさん 投稿日: 02/06/25 16:56
C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/l50


986 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:04
986


987 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:07
987


988 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:27
988


989 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:29
989


990 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:33
ドメイン名からIPアドレスを引き出すプログラムって、nslookup実行した結果を
ファイルに入れて参照するしかないですか??


991 名前: Disca ◆NAfP6znE 投稿日: 02/06/25 17:37
>>990
gethostbyname


992 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:53
>>991
ありがとうございました!!


993 名前: デフォルトの名無しさん 投稿日: 02/06/25 17:54
スレ2お願いします。



994 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:02
C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/l50



995 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:03



996 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:27



997 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:30
Σ(゚Д゚)


998 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:30
Σc(゚Д゚c


999 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:31
Σ(゚Д゚ )y-~~


1000 名前: デフォルトの名無しさん 投稿日: 02/06/25 18:31
( ´_ゝ`)1000get


1001 名前: 1001 投稿日: Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。



2ちゃんねるは、ここのサーバを使ってるです。。。