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

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

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

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

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

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

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

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

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

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/〜lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0003デフォルトの名無しさんNGNG
【姉妹スレ】

C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0004デフォルトの名無しさんNGNG
4様
0005デフォルトの名無しさんNGNG
センスねえな・・・ C99だぞ??
0006デフォルトの名無しさんNGNG
例えば __int64 ってのがあるコンパイラで
long long と記述してコンパイルできる方法はありますの?
0007デフォルトの名無しさんNGNG
>>6
ないんですの。
0008デフォルトの名無しさんNGNG
long longがint64とはかぎらんわな
0009デフォルトの名無しさんNGNG
C++builder5でコンパイルしようとしたら以下のようなエラーがでてしまいました。
別のではできていたようなので理由がわかりません、教えてください。

[C++ エラー] File1.cpp(5): E2209 インクルードファイル 'ERR.H' をオープンできない
[C++ エラー] File1.cpp(14): E2221 マクロ引数の構文エラー
[C++ エラー] File1.cpp(115): E2268 未定義の関数 'warn' を呼び出した
[C++ エラー] File1.cpp(161): E2268 未定義の関数 'strcasecmp' を呼び出した
[C++ エラー] File1.cpp(166): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(210): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(219): E2268 未定義の関数 'strcasecmp' を呼び出した
[C++ エラー] File1.cpp(223): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(263): E2451 未定義のシンボル __func__
[C++ エラー] File1.cpp(263): E2268 未定義の関数 'dprintf' を呼び出した
[C++ エラー] File1.cpp(410): E2268 未定義の関数 'warnx' を呼び出した
[C++ 警告] File1.cpp(463): W8066 実行されないコード
[C++ 警告] File1.cpp(492): W8066 実行されないコード


0010デフォルトの名無しさんNGNG
>[C++ エラー] File1.cpp(5): E2209 インクルードファイル 'ERR.H' をオープンできない

そのまんまだる?
00119NGNG
なぜ#include <err.h>が使えないかがわからないんです・・・
すいませんがよろしくおねがいします。
0012デフォルトの名無しさんNGNG
err.hがあるのかね?
00139NGNG
ない場合はどうしたらいれられるのでしょうか?
0014デフォルトの名無しさんNGNG
>>13
err.hというファイルを手に入れろ
0015デフォルトの名無しさんNGNG
>13
ほかに代用できそうなものがないかあたれ
0016デフォルトの名無しさんNGNG
> 参考書とか読んでも本当に分かんないんです。 ごめんなさい

ならその本の名前書いてみろよ! かけないだろ? 本当は読んでないくせに。
0017デフォルトの名無しさんNGNG
stricmpではなくstrcasecmpが用いられているところから
unix系のソースを無理矢理コンパイルしている予感
0018デフォルトの名無しさんNGNG
Unix系なわけじゃなく、そっちが標準だろ?
0019デフォルトの名無しさんNGNG
標準なんてありませんが。
DOS/Windows系ではstricmpもしくはstrcmpiしか用意されていませんが。
0020デフォルトの名無しさんNGNG
> 標準なんてありませんが。

こいつぼけ
0021デフォルトの名無しさんNGNG
それにしてもstrncmpの仕様って使いにくいとおもわん?
nに0渡したときは何返すべきだと思う?
0022デフォルトの名無しさんNGNG
では、strcasecmpが標準な規格を教えてください。
POSIX等は、標準Cとは関係ないので却下です。
0023デフォルトの名無しさんNGNG
POSIXがでてくるあたりでおまえぼけだな > 22
0024デフォルトの名無しさんNGNG
POSIX好きはむしろBSD。あれのソースはstrlcpyありすぎ
0025デフォルトの名無しさんNGNG
で、標準Cライブラリで「大文字小文字を区別しない文字列比較関数」が規定されているのは
どの規格ですか?

早く提示してください。
0026デフォルトの名無しさんNGNG
ほーら もっと考えろ! > 25
googleしてもいいぞ ;-)
0027デフォルトの名無しさんNGNG
いやあ、考えようと何しようと、規定されてないものはどうしようもないし。
0028デフォルトの名無しさんNGNG
ところで10種類は?
0029デフォルトの名無しさんNGNG
strcasecmpが標準ライブラリに含まれる規格は?

はやくだしてよ。ぼけちゃん。
0030デフォルトの名無しさんNGNG
キャストをマークする目的で
#define cast(TYPE) (TYPE)
として使ってるのですが、これって一般的ですか?
0031デフォルトの名無しさんNGNG
>>30
#define begin {
#define end }

と同じくらい一般的。
003230NGNG
要するにしない方が良いということでしょうか?
ありがとうございました。
0033デフォルトの名無しさんNGNG
ふつう
#define begin {
#define end ;}
だろぼけ > 31
0034デフォルトの名無しさんNGNG
>29
UNIX互換端末で
man strcasecmp
を読め!
0035デフォルトの名無しさんNGNG
だから規格の名前を出せよ早く。いいかげんにしろよ。
ふざけるな。

この無知。
知ったかぶり。

寝ぼけてるんじゃないのか?
0036デフォルトの名無しさんNGNG
それから、いいこと教えてやるよ。

知らないことがあったら、http://www.google.co.jp/に単語を入れて調べてみるといいよ。
もしかしたら、教えてもらえるかもしれないよ。

どう?
勉強になったでしょ?

それから、strdupも標準じゃないんだよ。
知らなかったでしょ?
勉強になったでしょ?

それじゃあね。
もう少し勉強してから、偉そうなこと書こうね。
0037デフォルトの名無しさんNGNG
あ、「man」なんて名前のC言語の規格は、googleで調べてもどこにもなかったよ。
「UNIX互換端末」という名前の規格もね。

ボク無知だから、C89とかC99とかANSI-CとかISO-Cとか言ってもらわないと分からないの。
もう少し詳しく教えてよ。
0038デフォルトの名無しさんNGNG
素人はあきらめが早い。
0039デフォルトの名無しさんNGNG
manはmanualの略だぜ
0040デフォルトの名無しさんNGNG
> manはmanualの略だぜ

わー、すごーいー。
さすがー。
こんなすごいこと知ってる人が世の中にいたなんて。
感動しちゃった。

で、
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strncasecmp.3.html
どこに「標準C」と書いてあるのかな?
俺には読めないので教えてくれ。
0041デフォルトの名無しさんNGNG
こんな投稿もあるな。
http://tsukuba.m17n.org/mule-ja-archive/1994-9/msg00029.html
「名前」という日本語がの意味が分からない人には理解できないだろうが。
0042デフォルトの名無しさんNGNG
まあ、ぼけにつける薬は無いということで。
0043デフォルトの名無しさんNGNG
00:02:ae:3d:2d:xx こういうMACアドレスを表示させたいのですが
型の宣言は何にすればいいのでしょうか?
あと  %dとか%sのようなフォーマットを何にすればいいのかも教えてください。
0044デフォルトの名無しさんNGNG
UNIX「互換」端末なんていうものはない。
0045デフォルトの名無しさんNGNG
>>43
%p
99ページを読め!
0046デフォルトの名無しさんNGNG
>>41
懐かしいひとたちが...
0047デフォルトの名無しさんNGNG
>>43
printf("%02d:%02d:%02d:%02d:%02d:%02d", a[5], a[4], a[3], a[2], a[1], a[0]);
0048デフォルトの名無しさんNGNG
02dよりは02xだろうなあ。
004943NGNG
レスありがとうございます。
a[i]はint,long,charなどのどれにすればいいのですか?
0050デフォルトの名無しさんNGNG
>49
charでぴったりサイズ
0051デフォルトの名無しさんNGNG
>41
これが灯台レベルとしたら、大学の信頼ガタ落ちだな(k
0052v(^o^i)dNGNG
お前ら落ち着け
0053デフォルトの名無しさんNGNG
>>51
大学の授業なんか誰も当てにしてない。
0054デフォルトの名無しさんNGNG
int main(int argc, char *argv[]){
FILE *fp;
char keyword[80];
char line[256];
char* sp;
int size = 0;

if( argc<3 || (fp=fopen(argv[1],"r") ) == NULL){
printf("can not open file");
exit(1);
}
strcpy(keyword,argv[2]);
size = strlen(keyword);

while(fgets(line,256,fp) !=NULL){
sp = strncmp(line,keyword,size);
if(sp==0){
printf("%s",line);
}
}

fclose(fp);
return 0;
}

----------------------------------------------------------------------
文字列処理のプログラムなんですが、keywordが1文字だった場合、
keywordに空白を追加して文字列比較(strncmp)の処理を行いたいのです。
どのようにすればよいでしょうか?
0055デフォルトの名無しさんNGNG
>>54
strcat()
0056デフォルトの名無しさんNGNG
>>54
memset(keyword+1, ' ', 追加する文字数)[追加する文字数] = '\0';
0057デフォルトの名無しさんNGNG
if (trig==0)if ( Joy.Px > +65536/3 ) myx++;trig=1;
if ( Joy.Px > +65536/3 ) {trig=1;}else{trig=0;}

こいつをもう少し短くできないでしょうか?
005854NGNG
>>55>>56
ありがとうございました
0059デフォルトの名無しさんNGNG
>>57
//if (trig==0)if ( Joy.Px > +65536/3 ) myx++;trig=1;
//if ( Joy.Px > +65536/3 ) {trig=1;}else{trig=0;}
でいかがか?
0060デフォルトの名無しさんNGNG
>57
c=65536/3;
if(!trig&&Joy.Px>c)myx++;
trig=(Joy.Px>c);
006157NGNG
>>60
ありがとうございます。
短くなって見やすくなりました。
0062デフォルトの名無しさんNGNG
二次元配列を全て1で初期化するにはどうすればいいですか?
006362NGNG
訂正。

二次元配列を宣言時に全て1で初期化するにはどうすればいいですか?
0064デフォルトの名無しさんNGNG
1並べれば
0065デフォルトの名無しさんNGNG
>>63
static宣言し0を1とみなす。
006663NGNG
>>64
時間かかる。

>>65
良く分からないのですが?
0067デフォルトの名無しさんNGNG
>>66
馬鹿ですね。
0068デフォルトの名無しさんNGNG
>>63
64の方法以外では無理。
0069デフォルトの名無しさんNGNG
素直にmemset汁
007063NGNG
>>68
>>69
そうでしたか。お手数かけました。
0071デフォルトの名無しさんNGNG
もうこのスレも99か。ジョブズ3世ってどこいった?
0072デフォルトの名無しさんNGNG
俺が2ちゃん見始めた頃にこのスレ立ったんだよなあ。懐かしい。
0073デフォルトの名無しさんNGNG
>>65
static宣言のところは満年齢を採用し他のところは数え年を使用していると考える。

0074デフォルトの名無しさんNGNG
>>69
char [] にしか通じない罠。
0075デフォルトの名無しさんNGNG
しょうがねーPascal->C++変換でも作るか
0076デフォルトの名無しさんNGNG
質問します。
float や double は型を宣言するだけで速度が遅くなるんですか?
計算しないでも、型キャストなんてしてしまうと、それだけで極わずかの
遅延が発生するって事ですか?
教えて欲しいです。
0077デフォルトの名無しさんNGNG
>>76
変数を宣言するだけなら普通何もしないのと同じだから遅くはならないと思うが。
0078デフォルトの名無しさんNGNG
int型はサイズが小さくてCPUの中でもすぐに計算できるが、floatはそれより大きいし、int型などとはデータの構造が違う。変換に時間がかかって当たり前。
0079デフォルトの名無しさんNGNG
float型 を int型が同じ4バイトという環境なんですが、
それでも型キャストぐらいなら問題ないですか?
0080デフォルトの名無しさんNGNG
あ、データの構造が違うってことは、やっぱ遅れは発生するんでしょうね・・・
けど同じ4バイトだとしても、どうしてなのか不思議です。
計算して遅れが発生するのは納得がいくんですが。
0081デフォルトの名無しさんNGNG
>79
スーパープログラマじゃあるまいし、そんなにミリ秒の遅延が気になるのか?
0082デフォルトの名無しさんNGNG
>>81
ナノ秒ならともかく、
ミリ秒ならば、気にするべきかと・・・
0083デフォルトの名無しさんNGNG
float a=4.0, b=8.0 ;
b/=a ;
とかの演算だったら int型に変換してくれるっていう最適化は
コンパイラに標準でありますか?
0084デフォルトの名無しさんNGNG
ない、っつうか、bがfloatなのにintにしてどうする。
0085デフォルトの名無しさんNGNG
>>83
そんなことしたら大変でしょ。
float型をfloat型で割ったものをint型に代入する、なんていう式が真っ当な物とは思えない。
0086デフォルトの名無しさんNGNG
>>85
なんでだよ。
耐荷重M kgのエレベーターに、平均体重m kgの人が何人乗れるか、どうやって計算する?
0087デフォルトの名無しさんNGNG
誤解してるね。
0088デフォルトの名無しさんNGNG
ありがとうございます。
よく考えたらおかしいとわかりました。
0089デフォルトの名無しさんNGNG
小数点の切り捨て ってどうやって行ってるんですか?
やっぱ、単にシフトしてるだけなんでしょうか?
0090デフォルトの名無しさんNGNG
>>89
あの、えと、floatって浮動小数点数なんですが…
って、釣りですか。
0091デフォルトの名無しさんNGNG
>83
C++でfloatの前にconst付けると最適化されうる
0092デフォルトの名無しさんNGNG
>>91
なるほど!
0093デフォルトの名無しさんNGNG
>>90
つまり単なるシフトじゃないって事ですね。
じゃどうやってるんですか? マスキングかなんかですか?
0094デフォルトの名無しさんNGNG
93は忘れてください。
よく考えたらおかしいとわかりました。
0095デフォルトの名無しさんNGNG
マクロでループ処理ってできないんすか
0096デフォルトの名無しさんNGNG
>>95
出来るだろ。
009795NGNG
>>96
差し支えなければサンプル見せて下さい。簡単で良いです。
俺にはできんかったとです。
0098デフォルトの名無しさんNGNG
>>97
マクロはただの文字列置換。
マクロ内にループ処理を入れれば、
そのループ処理に勝手に置換される。

> 俺にはできんかったとです。

マクロの基本から勉強し直せ。
0099デフォルトの名無しさんNGNG
//古典的なやり方
#define REPEAT(stmt,n) REPEAT##n(stmt)
#define REPEAT0(stmt) #define REPEAT1(stmt) stmt
#define REPEAT2(stmt) \
do{stmt;stmt;}while(0)
#define REPEAT3(stmt) \
do{stmt;stmt;stmt;}while(0)
0100デフォルトの名無しさんNGNG
>>97
#define ENDLESS_LOOP while(1)

int main( void )
{
  ENDLESS_LOOP;
  return 0;
}
0101デフォルトの名無しさんNGNG
//近代的なヤツ
template<int n>
inline void loop(){
justDoIt();
loop(n-1);
}
inline void loop<0>(){}
0102デフォルトの名無しさんNGNG
>>101
それ書くなら
template <int N>
inline void loop() {
justDoIt();
loop<N-1>();
}
template <>
inline void loop<0>() {}

スレ違いだし。
0103デフォルトの名無しさんNGNG
K&Rで 0より大きいか等しく、1より小さい数の乱数を発生させるのに、
#define frand() ((double)rand()/(RAND_MAX+1))
をつかってますが、gccでコンパイルするとオーバーフローみたいな
エラーがでます。
どうすればよいのでしょう?
お願いします。
0104デフォルトの名無しさんNGNG
>>103
なんか間違ってる
0105デフォルトの名無しさんNGNG
RAND_MAX==UINT_MAXなんだろう
RAND_MAXもdaubleにキャストすりゃいい
0106デフォルトの名無しさんNGNG
dauble
0107デフォルトの名無しさんNGNG
strpbrk()のpbrkってなに?ピーブレイク?
0108デフォルトの名無しさんNGNG
>>103
RAND_MAX+1.0
0109デフォルトの名無しさんNGNG
>>103
じゃあ
#define frand() ((double)rand() / ((double)RAND_MAX + 1) )
にすればいいのでは?
0110デフォルトの名無しさんNGNG
string pointer break 常識!
0111デフォルトの名無しさんNGNG
StrikeBreaker
スト破り
0112デフォルトの名無しさんNGNG
構造体の複数のmemberを参照する時に"."とか"->"ではなくて
配列で、[i]番目のmemberって感じで参照できないんでしょうか?
0113デフォルトの名無しさんNGNG
>>112
Cではミリ
C++ならboost::tupleで代用できなくもないけど
0114デフォルトの名無しさんNGNG
>>113
ありがとうございます。
なんか効率的じゃない気がしたもので・・

ということはwrite()/read()で構造体に入れてあるデータをファイルに
書き込み/読み込みする際も、その都度複数のmemberごとにbufferを./->で
指定しなきゃいけないってことですよね?
0115デフォルトの名無しさんNGNG
>>114
そんなことはない
ただ構造体メンバにポインタが含まれている場合は
ポインタの参照先までちゃんと書き出す処理を自前で書かないといけない
0116デフォルトの名無しさんNGNG
>>115
ありがとうございます。
そうすると、pointerがmemberに含まれていない構造体を一気に
write/readする時はどのようにすれば良いのでしょうか?
0117デフォルトの名無しさんNGNG
構造体を一気にwrite/readすれば良い。
0118デフォルトの名無しさんNGNG
>117
bufferの部分はなんと書けばよいのでしょう?
0119デフォルトの名無しさんNGNG
intをfwrite/freadする時と全く同じに書けばよい。
0120デフォルトの名無しさんNGNG
struct hoge {
 int a;
 char b;
 double c;
};

struct hoge buf;

// 書き込み
fwrite(&buf, sizeof(buf), 1, fp);

// 読み込み
fread(&buf, sizeof(buf), 1, fp);
0121デフォルトの名無しさんNGNG
>>119-120
ありがとうございます。
ということは、↓ということでいいでしょうか。
一応エラーはないようでしたが、ファイルを直接見てみると
文字化けしてましたので・・。

struct Hoge hoge;

write(fd, &hoge, sizeof(hoge));
0122デフォルトの名無しさんNGNG
文字化け…
文字列でも書き出そうとしてるんですかい?
struct Hoge hoge, hoge2;
として
hogeをwriteで書き出した後、hoge2にreadして値がちゃんと入ってるか調べてみては?
0123デフォルトの名無しさんNGNG
一応書かせて頂きますと、open時は
fd = open("C:\\hogelist.text", O_RDWR | O_CREAT, S_IWRITE | S_IREAD);
としています。
0124デフォルトの名無しさんNGNG
>>121
writeで書き出されるのはバイナリデータだから、エディタで開いても見えないよ
0125デフォルトの名無しさんNGNG
>>123-124
とんでもない勘違いをしていました。
ご指摘ありがとうございました。

ところでアクセスモードだと思うのですが、
O_ROWとはなにを指しているのでしょうか?
Microsoft C の純正リファレンスのソースに載っていたのですが
説明がないのです・・。
0126デフォルトの名無しさんNGNG
間違えました、O_RAWです。
0127デフォルトの名無しさんNGNG
>>122
ありがとうございます、試してみたところ問題ないようでした^^
0128デフォルトの名無しさんNGNG
>>125
RAWデータ(つまりバイナリデータ)モードでは?
#if C_MSC & MSDOS2
#include <fcntl.h>
#define O_RAW O_BINARY
#endif
↑こんな風になってるから、O_BINARYと等価かと
0129デフォルトの名無しさんNGNG
>>128
ははぁ・・なるほど、そうでしたか。
大変助かりました、皆さんありがとうございました。
0130デフォルトの名無しさんNGNG
1 なら 0
2 なら 1
4 なら 2
8 なら 3
16 なら 4
32 なら 5
:


という風に'x なら y'
というビットシフト値(y)を得たいのですが、
簡単な変換方法はないでしょうか?
0131デフォルトの名無しさんNGNG
>>130
簡単じゃない方法って、
一体どういう奴の事?
0132デフォルトの名無しさんNGNG
ちなみに今は

f(x) {
 int i=1,y=0;
 for (;i != 0x80000000;i*=2,y++) {
  if (i==x)
   return y;
 }
 return -1; // 一致しない
}

という関数でやってます。
これより良い方法があればご教授下さい。
0133デフォルトの名無しさんNGNG
不一致の場合は-1を返さないとダメ?
0134デフォルトの名無しさんNGNG
>>130
y = log((double)x) / log(2.0);
0135デフォルトの名無しさんNGNG
>>132
なんでxを直接シフトしないのん?
0136デフォルトの名無しさんNGNG
>>134
つまんね
0137デフォルトの名無しさんNGNG
>>133
xが2のn乗とは限らない場合があるので。

>>134
y = (int)(log((double)x) / log(2.0));
としたあと
if (x == 1<<y)
で比較すれば正しいかわかりそうですね。
これでやってみます。
ありがとうございました。

>>135
xに何が入ってくるのかわからないからです。
0138デフォルトの名無しさんNGNG
あー、>>134の方法ではだめでした。
x==8のときyが2でした。

以下テストコード
int x,y;
x = 1;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 2;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 3;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 4;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 5;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 8;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 16;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
x = 32;
y = (int)(log((double)x) / log(2.0));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
0139デフォルトの名無しさんNGNG
結果

x=1 y=0 ok
x=2 y=1 ok
x=3 y=1 ng
x=4 y=2 ok
x=5 y=2 ng
x=8 y=2 ng
x=16 y=4 ok
0140デフォルトの名無しさんNGNG
失礼しました。
ceilをはさんだらうまくいきましいた。

test(x) {
int y = (int)(ceil(log((double)x) / log(2.0)));
printf("x=%d y=%d %s\n",x,y,(x==1<<y)?"ok":"ng");
}
main() {
int i;
for (i=0; i<=64; i++) test(i);
}

x=0 y=0 ng
x=1 y=0 ok
x=2 y=1 ok
x=3 y=2 ng
x=4 y=2 ok
x=5 y=3 ng
x=6 y=3 ng
x=7 y=3 ng
x=8 y=3 ok
x=9 y=4 ng
:
x=15 y=4 ng
x=16 y=4 ok
x=17 y=5 ng
:
x=31 y=5 ng
x=32 y=5 ok
x=33 y=6 ng
0141デフォルトの名無しさんNGNG
ちょっとは誤差とかも考えろよ。
log(x)/log(2.0) <- 両辺とも整数になりようがない
0142デフォルトの名無しさんNGNG
浮動小数点使わない方法ないの?
0143デフォルトの名無しさんNGNG
ある
0144デフォルトの名無しさんNGNG
>>142
int numofbits5(long bits) {
 bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
 bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
 bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
 bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
 return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
}
0145デフォルトの名無しさんNGNG
それはビットカウント
0146デフォルトの名無しさんNGNG
>>144
それはビット数数えるだけでそ。
シフト数を調べたければ、(例外を弾いてあるとして)

int n=32, nb;
nb = numofbits5(~((unsigned long)0) + n;);

だろ
0147デフォルトの名無しさんNGNG
かぶった orz
0148デフォルトの名無しさんNGNG
いいねこれ。
いつ使えるかわかんねけど。

つーかどっかで見たな。
Cマガだったかな。
たしか何かの特集で得意げに紹介されてたよ。
小手先馬鹿だね。
0149デフォルトの名無しさんNGNG
tp://www.nminoru.jp/~nminoru/programming/bitcount.html#leading-0bits
0150デフォルトの名無しさんNGNG
エクセルでボタン作って、そこを押すとランダムに数字がでるプログラムをつくってもらえないですか
0151デフォルトの名無しさんNGNG
>>150
スレ違い

ここのExcelスレで聞け
http://pc5.2ch.net/win/
0152デフォルトの名無しさんNGNG
105>>かしこ
0153デフォルトの名無しさんNGNG
ニュー速から来ました。
記念カキコ
0154デフォルトの名無しさんNGNG
>>120
バグの温床になるから気をつけとけよ。
0155デフォルトの名無しさんNGNG
関数へのポインタを返したいのですが
コンパイルエラーが出てしまいました

#include <stdio.h>
#include <math.h>

double*
get_func(void)
{
double (*fp)(double);
fp = sin;
return (double*)fp;
}

int
main(void)
{
double (*fp)(double);
fp = get_func();
// fp = sin; // これなら問題ない
printf("%g", fp(1));
return 0;
}

~ % gcc -g test.c
test.c: In function `main':
test.c:16: warning: assignment from incompatible pointer type
~ %

型が違っているようには思えないのですが
何かアドバイスいただけますか
0156デフォルトの名無しさんNGNG
get_func()の返却値はdouble*
fpはdouble (*)(double) 
0157デフォルトの名無しさんNGNG
何故get_func()の中でdouble *にキャストしているのだろう・・・
0158デフォルトの名無しさんNGNG
>>155
void*返すようにしとけ。
0159デフォルトの名無しさんNGNG
>>155
関数ポインタをそのままけ返せばいい
double (*get_func(void))(double)
{
〜
return fp;
}
0160デフォルトの名無しさんNGNG
>>155
汝、エラーと警告を混同するなかれ
0161デフォルトの名無しさんNGNG
GCCとやらをインストールしたいんだがどうすればいいんだ?
OSはWinXPだ
0162デフォルトの名無しさんNGNG
>>161
http://cygwin.com
0163デフォルトの名無しさんNGNG
>>156-159
ありがとうございます
以下のどちらでも期待した結果になりました

void* get_func(void)
{
double (*fp)(double);
fp = sin;
return fp;
}

double (*get_func(void))(double)
{
double (*fp)(double);
fp = sin;
return fp;
}

int main(void)
{
double (*fp)(double);
fp = get_func();
printf("%g\n", fp(1));
return 0;
}

修行してきます…
0164デフォルトの名無しさんNGNG
>>160
a.exe できてたよ…
そして期待した結果になってたよ…
もっと落ち着くことを覚えたいと思います

陳謝
0165デフォルトの名無しさんNGNG
英語なんか読めるか ぼけ
0166デフォルトの名無しさんNGNG
ttp://49uper.com:8080/html/img-s/34183.zip

dllにコンパイルしたのですが何故か動かせず・・・
上のソースはネットから拾ってきたもので環境はvc++toolkit2003とSDKでやっております
コマンドプロンプトからtoolkit起動して
cl /c /O1 main.cpp
link /dll main.obj kernel.lib use32.lib /def;main.def

ちなみに上のソースはあるプログラムの拡張dllです
どなたかご教授願いします
0167166NGNG
X link /dll main.obj kernel.lib use32.lib /def;main.def
○ link /dll main.obj kernel.lib use32.lib /def:main.def
です
0168デフォルトの名無しさんNGNG
cl main.cpp main.def user32.lib

・・・・俺もヤキ回ったな・・・・ 何見てんだよまったく
0169デフォルトの名無しさんNGNG
そういえば焼肉食べた。
0170デフォルトの名無しさんNGNG
while (*s) {

k=char(*s);
k=k&0x000000ff;
h0+=k;
cout<<h0<<endl;
*s++;

}

このループってどうなるとループから出るんですか?
0171デフォルトの名無しさんNGNG
sがオーバーフローして0に戻った時
0172デフォルトの名無しさんNGNG
'\0'文字に出会ったとき、
つまり文字列の終端で終了

printf("%s", s);
と同じ
0173デフォルトの名無しさんNGNG
ありがとうございます
0174デフォルトの名無しさんNGNG
#ifdef DEBUG
#define DebugPrint(message, s...) printf(message, ##s)
#else
#define DebugPrint(message, s... )
#endif

このマクロの移植性はどんな感じでしょうか。

参考web
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.6.3.html
http://docs.hp.com/ja/5969-4432/ch01s01.html
0175174NGNG
すみません。

#ifdef DEBUG
#define DebugPrint(message, ...) printf(message, ## __VA_ARGS__)
#else
#define DebugPrint(message, ... )
#endif

と、したほうが良いみたいですね。


http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Variadic-Macros.html#Variadic-Macros
0176デフォルトの名無しさんNGNG
>>175
__VA_ARGS__はつい最近のコンパイラでしか使えないんだよなあ。
まあ正式な規格のものだから古いコンパイラに移植なんてことが
なかったらそれでいいけど。

古い奴も頭に入れる場合は、

#ifdef DEBUG
#define DebugPrint printf
#else
#define DebugPrint 0 && printf
#endif

とかやって最適化でprintf〜が消えることを期待する方法がある。
0177デフォルトの名無しさんNGNG
19 188 とかの数字を 10のように最後が0になるよう変換したいんですが、
何かいい方法ないですか?
シフト演算とかビット演算みたいに簡単に変換したいくて、
割り算は使いたくないんです。
0178デフォルトの名無しさんNGNG
>>177
0179デフォルトの名無しさんNGNG
したくて、でしたね
0180デフォルトの名無しさんNGNG
>>177
*10 でいいんでねーの?

本意じゃないだろうけど、その文じゃ意味不明。
0181デフォルトの名無しさんNGNG
普通に理解できるだろ
19 →10 188→180
0182デフォルトの名無しさんNGNG
>>177
int floor10(int val)
{
char buf[12];
sprintf(buf, "%d", val);
buf[strlen(buf) - 1] = '0';
return atoi(buf);
}
0183デフォルトの名無しさんNGNG
さっぱりわからんが
/10*10ということでいいのか?
0184デフォルトの名無しさんNGNG
除算禁止が条件らしい
>>182 も sprintf 内部じゃ10で割りまくりだから、だめだろ
0185デフォルトの名無しさんNGNG
つーか181でやっとわかった
181はエスパーか?
0186デフォルトの名無しさんNGNG
>>177
int floor10(int x){
 int y = 10;
 for (;y <= x; y+=10)
  if (x - y < 10)
   return y;
  return -1; // 解なし
}
割り算を使ってないというだけだが
0187デフォルトの名無しさんNGNG
>>177
乗除算を使用するのが最も簡単。
何故、除算禁止にこだわるのか、理解に苦しむ。
0188デフォルトの名無しさんNGNG
>>185
>>177=>>181
0189186NGNG
>>186の方法の収束率を上げたやつ
int floor10(int x){
 int y = 10;
 for (;y <= x;) {
  int w = x - y;
  if (w < 10)
   return y;
  if (w > 1000000000) y+=1000000000;
  else if (w > 100000000) y+=100000000;
  else if (w > 10000000) y+=10000000;
  else if (w > 1000000) y+=1000000;
  else if (w > 100000) y+=100000;
  else if (w > 10000) y+=10000;
  else if (w > 1000) y+=1000;
  else if (w > 100) y+=100;
  else y+=10;
 }
 return -1; // 解なし
}

くだらなかったね
ニュートン法かなんかでもうちっと効率良いのってできなかったっけ
0190デフォルトの名無しさんNGNG
先生、%は除算に入りますか?
0191デフォルトの名無しさんNGNG
除算は300円まで
0192デフォルトの名無しさんNGNG
8進数なら & ~7 でいいんだけどねぇ。
0193デフォルトの名無しさんNGNG
Borland C++ Compiler 5.5ってWinXPでも動きますか?
0194デフォルトの名無しさんNGNG
>>190
普通に考えれば入るだろう。
0195デフォルトの名無しさんNGNG
>>193
動くよ
0196デフォルトの名無しさんNGNG
ファイルがバイナリかどうかを調べる方法ってありますか?
0197デフォルトの名無しさんNGNG
文字コードから外れているものがあるかどうか調べる
0198デフォルトの名無しさんNGNG
人間がテキスト表示したものを見ると
エンコードミスによる文字化けなのかバイナリなのか結構わかるもんだけど
あれはどういう基準なんだろう
0199デフォルトの名無しさんNGNG
秩序の有無や、過去に同じような文字化けを見たことがある、等じゃない?
詳しくは認知心理学でもやってくれ
0200デフォルトの名無しさんNGNG
写真を見て、海か川かを判断できる事といっしょだ
0201デフォルトの名無しさんNGNG
適当に改行が入っているか、適当に空白が入っているか、
読めない文字の並び方に連続性がないか適度に再現性があれば文字化け。
0202デフォルトの名無しさんNGNG
>>177
long floor10(long d)
{
    static const int dtbl[] = {0, 6, 2, 8, 4, 0, 6, 2, 8, 4, 0, 6, 2, 8, 4, 0};
    int lastd = (d & 0xF);
    long val;
    if (lastd >= 10)
        lastd -= 10;
    for (val=(d>>4); val; val>>=4) {
        if ((lastd += dtbl[val & 0xF]) >= 10)
            lastd -= 10;
    }
    return d - lastd;
}
0203デフォルトの名無しさんNGNG
双方向リストに文字列を蓄えたいんですが、

struct s{
char *name;
struct s *prev;
struct s *next;
}aiu;
・・・
aiu data;
char buf[100]

scanf("%s", buf);
data.name = buf;
addtail(data);
・・・
addtailはリストを作る関数です。
でこの三つの文をぐるぐる回していれていったんですが、表示するときに
最後に入れた文字列ばっかりが表示されます。文字列ではなくて一文字
だけとか、入力させずに、data.name="abc"というようにプログラム中でそ
のまま指定した場合は、そのとおりに表示されました。なので上のプログ
ラムがおかしいと思うのですが。
0204デフォルトの名無しさんNGNG
>>203
data.name が指す領域は誰が確保して誰が解放するのか考えてみましょ
う。
0205デフォルトの名無しさんNGNG
>>202
よく読んでないが、加減算とシフトを使って割り算を書いてるようにしか見えん。
0206デフォルトの名無しさんNGNG
つか、それでいいんではw
割り算使うな=割り算えみゅれ
0207デフォルトの名無しさんNGNG
>>205
やべーボクすごいとか思ってるんだからほっといてやれよ
0208デフォルトの名無しさんNGNG
こういうことだろう

int waru10(int x)
{
return (x>>3)<<3+(x>>1)<<1;
}
たぶんね
0209デフォルトの名無しさんNGNG
>>205
えーっと、4ビットずつBCD変換して、(最下桁の総和 mod 10) を
元の数から引いてます。ループは最大でも (sizeof long * 2) 回。

>>208
waru10() という関数名と処理が乖離しまくってますが。
0210デフォルトの名無しさんNGNG
まあ、パズル的に解くのは楽しいけど
最近のプロセッサは整数の割り算なんか、全然重い処理じゃないしなあ。
0211デフォルトの名無しさんNGNG
>>210
何サイクルくらい? 面積は??
0212デフォルトの名無しさんNGNG
>>210
むしろ、最近のコンパイラは最適化があるから、
この程度のことでわざわざループやら加算の繰り返しやらを
行ったらどんなプロセッサでもまず間違いなくパフォーマンスが下がると思ふ。
よって、そのことについて言及するだけ無駄でしょう

しかし質問の意図が見えないよ・・・

>>211
前にPen4なら1サイクルと聞いたが・・・調べてないので保障しない
0213デフォルトの名無しさんNGNG
いつもお世話になっております先輩ども

今回聞きたいのは「void*」って戻り値についてです
アレですよ 何だよコレ戻ってんのかYO! voidって何も戻らないんじゃないのかYO!
って話です ご教授宜しく哀愁
0214デフォルトの名無しさんNGNG
>>212
もう一度聞く、何サイクル? 面積は??
0215デフォルトの名無しさんNGNG
面白いと思って書き込んだ、渾身のネタなんだろうな。
0216デフォルトの名無しさんNGNG
>>213
void*はなにを指してるのかわかんないけどとにかく何かを指してる(かもしれない)ポインタの型です。
なにを指してるのか不明なのでこの型のポインタはポインタ演算のほとんどができません。

プログラマはこの型のポインタがなにを指しているのか知ってることが期待され、
その型にキャストして使います。
0217デフォルトの名無しさんNGNG
Cでプロセス間通信に共有メモリを使っているのですが、共有メモリで
2次元配列型のデータを扱うことはできるのでしょうか。
0218デフォルトの名無しさんNGNG
>>217
もちろんだ
0219186NGNG
皆さま、様々なご解答ありがとうございました。
特に、>>202さんの解答には驚きました。

x=floor10(99988883) ;

とか送った場合、わずか6回のループで済んじゃったわけですが、
これが、>>189さんのおっしゃるニュートン法ってやつなんですか?
検索してみたところで、数学が苦手でさっぱり訳がわかりませんでした。
どういう考えの元で、このようなやり方を思いついたのですか?
半分不可能と思っていただけに、ホント驚きました。
ありがとうです。
0220デフォルトの名無しさんNGNG
あ、>>209の方が解説してくれてますね。
すいません、少し焦っちゃいました。
0221デフォルトの名無しさんNGNG
ループ=分岐が入る
この時点で、実行速度的に(もちろんサイズ的にも)かなり不利になるけどね
0222217NGNG
例えばa[3][3]という2次元配列を共有メモリで使いたい場合、
変数宣言とshmgetとshmatの記述はどのようにすればいいのでしょうか。
0223デフォルトの名無しさんNGNG
多次元配列へのポインタ
>>1のリンクを読む
0224デフォルトの名無しさんNGNG
>>222
>shmgetとshmatの記述は
この部分はスレ違い。

a[3][3]を指すポインタは(仮にcharだとして)

char (*p)[3];

になる。
0225217NGNG
どうもありがとうございました。
大変参考になりました。
0226デフォルトの名無しさんNGNG
宣言できる配列の要素数はメモリの量によって変わるんですか?
0227デフォルトの名無しさんNGNG
>>226
いいえ。
0228デフォルトの名無しさんNGNG
>>227
ハー・・・・・・・
0229226NGNG
>>227
intの要素数を100000位使いたいのですが、出来ますか?
0230デフォルトの名無しさんNGNG
>>229
スタックサイズによります。
大体1MBほど使えるかもしれませんが、実装やいろいろな設定で変わってくるでしょう。
もし、多くの領域を使いたいのであれば、ヒープ領域から確保するべきです。
そうすれば、安心できるでしょう?
0231デフォルトの名無しさんNGNG
>>219
それより、除算禁止の理由は?
0232229NGNG
>>230
調べてみます。
0233デフォルトの名無しさんNGNG
>>232
具体的に言えば、例えば、
int a[10000];
int i;
for(i = 0; i < 10000; i++)a[i]=0;
とするところを、
int* a;
int i;
a = (int*)malloc(sizeof(int)*10000);//ヒープ領域に使用領域を確保。その先頭番地のポインタ。
for(i = 0; i < 10000; i++)a[i]=0;
free(a);//確保したら開放しないとダメ。メモリは再利用…
0234デフォルトの名無しさんNGNG
>>231
90000/10 だとコンピュータ内部だと、9000回10を引いているのだと
思っているからです
0235デフォルトの名無しさんNGNG
だと
0236デフォルトの名無しさんNGNG
>>234
ハー・・・・・・・
0237デフォルトの名無しさんNGNG
はふはふ
0238デフォルトの名無しさんNGNG
さっきから考えてみてたんですが、>>202さんのって
BCDコードに変換してる訳じゃないんですね。
0239デフォルトの名無しさんNGNG
ぱふぱふ
0240デフォルトの名無しさんNGNG
さすがに>>234は本人じゃないだろ。あまりにも・・・過ぎる。
もし本人なら、真面目に考えた人が浮かばれん。
俺はパズル以外に意義を見いだせなかったから、全然考えてないけどな。
0241232NGNG
>>233
ありがとうございます。

a = (int*)malloc(sizeof(int)*100000);

これだと400kb位?使っている事になるんですよね?

0242デフォルトの名無しさんNGNG
>>240
では問いますが、除算はどのように実現されているので?
除算回路なんて一般のCPUに組み込まれているんですか?
その辺はよくわからんですが、普通加算回路しか入ってないと思ってるんですけど。
いや、ほんとよくわからないんですけど。
あまりにも・・・過ぎて申し訳ありませんねぇ
0243デフォルトの名無しさんNGNG
いわゆる筆算と同じ方式でやってるんじゃなかった?
引き戻し法とか
0244デフォルトの名無しさんNGNG
なんで割り算ごときでBCD変換だのループだの出てくるわけ?
コードが美しいわけでもない、速度は遅い、無駄に変数使う。。。
そのアルゴリズムの優れている点はどこなの?
勉強したての人がそういうの見てお手本にしたら可哀想だろうに……
0245デフォルトの名無しさんNGNG
だからBCD変換じゃないって・・・
0246デフォルトの名無しさんNGNG
コード読んでないけど、>>209でなんか言ってるじゃん。
0247デフォルトの名無しさんNGNG
>俺はパズル以外に意義を見いだせなかったから、全然考えてないけどな。
>コード読んでないけど

同一人物でつか?
0248デフォルトの名無しさんNGNG
ちげえよバカ。>>244=>>246だよ
0249デフォルトの名無しさんNGNG
もう、何がなんだか
0250デフォルトの名無しさんNGNG
> コードが美しいわけでもない

自分は結構美しいコードだと感じたけど。
0251デフォルトの名無しさんNGNG
>>247
同一っつーか、俺はこの話題については>>210>>221>>240位しか書き込んでないよ。

で、プロセッサの除算は、いわゆる筆算のアルゴリズムを使うが、
最近のプロセッサは、テーブルを使って一発で結果を出す方法も併用していると思う。
少し前にPentiumのバグで回収騒ぎがあっただろ?
あれは浮動小数の方だけど。
0252デフォルトの名無しさんNGNG
>>250
いくらなんでもそれはないだろう
0253デフォルトの名無しさんNGNG
なるほど、とんだ馬鹿な思い込みだったみたいですね。
少し前にPentiumのバグで回収騒ぎなんて話題も知りませんでした。
じゃあ、普通に割り算してたほうが早かった、って事か・・・

けど、ホント勉強になったんです。問題考えてくださった方はありがとございました。

あとついでと言っちゃあ何ですけど、static const int の static がもしなかったら、
関数が呼ばれるたびに初期値が代入されて無駄が発生するって見解は正しいですか?
0254デフォルトの名無しさんNGNG
正しいよ
0255デフォルトの名無しさんNGNG
よかった。ありがとうっす
0256デフォルトの名無しさんNGNG
goto文使うともっと速いらしいぞ
0257デフォルトの名無しさんNGNG
いまどきのコンパイラちゃんなら最適化してくれそうな気もしなくもない
0258デフォルトの名無しさんNGNG
真面目に考えてた人、ご愁傷様でした。
0259デフォルトの名無しさんNGNG
昔、除算命令で商と余り一度に取れたよね。いまのはどうなんだろ。
0260デフォルトの名無しさんNGNG
今もそうよ。
標準ライブラリにldivというのもある。
0261デフォルトの名無しさんNGNG
ファイルをオープンして書き込みするってのは処理としては早い?遅い?。
ゲーム作っててデバッグ用にどこの場所を通ってるか調べるのにLOGを
とりたいんだけどゲームみたいに中で一定の速さが必要なものを作る時
ファイルの書き込みを使ってもスピードに支障はでないレベルでしょうか?
ファイル操作+速度に関して知っておられる方おりましたら助言よろしくです。
0262デフォルトの名無しさんNGNG
ディスクのシーク+回転待ちでかかる時間が5-15ms程度。
OSやファイルシステムにも依るが、書き込みはこれを数回繰り返す。が、
・全部同期で書き込む
・ジャーナリング等の情報だけを同期で、データ本体は非同期で書き込む
・全部非同期で書き込む
等々があって、実際のwriteでどの程度かかるかは環境依存。

その上、Cライブラリのレベルでバッファリングしているから
fwriteやfprintfで実際にシステムコールが呼び出されるかはわからない。

ログの量がある程度以下と想定できるなら、
setvbufによって、事実上ディスクアクセスをfclose時だけにすることも可能。
0263デフォルトの名無しさんNGNG
>>261
速度を保証する必要があるならファイル操作ではなく物理ディスク
0264デフォルトの名無しさんNGNG
↑バカ
0265デフォルトの名無しさんNGNG
h = _open( "sakenosakana.txt", O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE ) ;
fp = fopen( argv[1], "r" ) ;
fscanf( fp, "%s" ,buf ) ;
_write( h, buf, 10 ) ;

ちょっと省略しますが、こんな感じで新規のファイルを作ろうと思いました。
しかし、出来上がる場所が実行ファイルと同じ場所と思ってたんですが、そうでも
ないみたい。なぜ??
どうにかして、場所を指定できないですか?
0266デフォルトの名無しさんNGNG
>>265
普通ファイル名だけを指定するとカレントディレクトリを指定したものと見なされる。
どこかから実行ファイルの場所を得て、そこへファイル名をくっつけて使え。
0267デフォルトの名無しさんNGNG
おぉ! なんとか出来ました。

けど、
> 普通ファイル名だけを指定するとカレントディレクトリを指定したものと見なされる。
自分も、そう思ったんですけど、出来上がる場所はなぜか
C:\Program Files\Common Files\System\Mapi\1041
これは _write とかの仕様なんですかね。
0268202NGNG
一応、
  1. プロセッサが除算をサポートしていないか、あってもコストが高い
  2. 実行速度を最優先
というつもりで書いたんだけど
>>253
あぁそうでつか…orz
0269デフォルトの名無しさんNGNG
>>267
詳細は環境スレでどうぞ。_open()でさえスレ違いですから。

http://pc5.2ch.net/test/read.cgi/tech/1104843249/
http://pc5.2ch.net/test/read.cgi/tech/1104109858/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0270デフォルトの名無しさんNGNG
>>267
たぶんおまえのプログラムの他の処理でカレントディレクトリを
移動しっぱなしの処理があるんだろ
0271デフォルトの名無しさんNGNG
> free(a);//確保したら開放しないとダメ。メモリは再利用…

するなよぼけ > 開放
するなら「解放」だぼけ。
0272デフォルトの名無しさんNGNG
>>226
ふつうに int array[100000]; で確保すればいい
どっかのぼけが「多くの領域」を定義せずにヒープがどうのと言っているが
そういう井の中の蛙は free についても人のコードを自分の環境に合わさせようと画策するから
言うこと1つずつうざいくら疑ってかかれ
決してああなるな
0273デフォルトの名無しさんNGNG
>>272
・・・すげーネタレスだな、おい。
最低限、 size_t 型で表現できる分の配列しか
宣言できないぐらいの事は書けよ。

>>226
言うこと1つずつうざいくら疑ってかかれ
決して >>272 の様になるな
0274デフォルトの名無しさんNGNG
>size_t 型で表現できる分の配列しか

アホ
0275デフォルトの名無しさんNGNG
とんだアフォ>>273 がいるもんだなぁ
0276デフォルトの名無しさんNGNG
なに?>>272-273は自演釣りですか?
0277デフォルトの名無しさんNGNG
>>271からの流れがワンダホーな世界だ
0278デフォルトの名無しさんNGNG
10進数を2進数にする、一番簡単で短いプログラムってどんなのですか?
0279デフォルトの名無しさんNGNG
>>278
二進数にするとは、どのような意味だ?
0280デフォルトの名無しさんNGNG
また三田レベルが来たか
0281デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1048088635/135
0282デフォルトの名無しさんNGNG
>278
x86汗ではAAD命令。
0283デフォルトの名無しさんNGNG
int x=5,y=6;
int st[(x*y)];

こんな風にしたいんですけど、エラーでちゃいますよね。
どうしたらいいんですか?
0284デフォルトの名無しさんNGNG
>>283
malloc
0285デフォルトの名無しさんNGNG
>>283
C止めろ。
0286デフォルトの名無しさんNGNG
>>1を読むかC99準拠のコンパイラを使う
0287デフォルトの名無しさんNGNG
>>283
C99ならできるよ。
おたくのコンパイラが古いだけ。
0288283NGNG
ぅありがとぉう
0289デフォルトの名無しさんNGNG
>>287
仮想の代物であるC99完全対応のコンパイラなんて、現時点に於いて期待する方がおかしい。
0290デフォルトの名無しさんNGNG
mallocで二次元配列を確保できますか?
0291290NGNG
解決しました。
0292デフォルトの名無しさんNGNG
>>290
a[i][j]のようにアクセスできる領域は作れる
0293デフォルトの名無しさんNGNG
最初っから要素数がわかってる場合は簡単。
そうでない場合は>>292の言ってるように少しややこしい
0294デフォルトの名無しさんNGNG
>>292-293
解決したって書いてあるだろうがボケ
0295デフォルトの名無しさんNGNG
>>294
おまいがボケ
0296デフォルトの名無しさんNGNG
>>295
なんだと、このやろ
0297デフォルトの名無しさんNGNG
>>296
素敵
0298ミスターポポNGNG
喧嘩、良くない
0299デフォルトの名無しさんNGNG
ミスターポポの口でイマラチオしたい
0300デフォルトの名無しさんNGNG
> 仮想の代物であるC99完全対応のコンパイラなんて

あ、またVC厨がわいてでた ;-)
0301デフォルトの名無しさんNGNG
10種類は?
0302デフォルトの名無しさんNGNG
unsigned long long intの使えるコンパイラー10種類なんて、すぐに名前あげられそうなもんなのに。
なんでそんなにひっぱるんだろ。
0303デフォルトの名無しさんNGNG
いまんところ1種類も出てないわけだから、C99完全対応のコンパイラ
は仮想とするのは、このスレ的に真
0304デフォルトの名無しさんNGNG
part99だし、C99使ってもいいか。
0305デフォルトの名無しさんNGNG
> いまんところ1種類も出てないわけだから、C99完全対応のコンパイラ

このお題目をとなえれば、VCの存在が正当化されるとでもおもってるんだろうなあ。
毎回これしかいわないんだもの ;-)
0306デフォルトの名無しさんNGNG
使えなものを使えという理不尽さ。
0307デフォルトの名無しさんNGNG
実際には存在するんだから「1種類もない」は大うそだな。
つぎは「少ないから」とかいいそう。

最初は「long longなんて使えるコンパイラーはないから」だったのが
↓
「…少ないから」 にかわって、大概のコンパイラーで使えるようになった数年前からは
↓
「それはつかえるかもしれんが、C99の機能全部をサポートしたコンパイラーはないから」(理由になってない)
になってきたわけだが、それが
↓
「C99の機能を全部サポートしたコンパイラーは数少ないから」
になってしまって、
その「から」のあとに何が続くのか...
「だからVCつかってるのは正しいんだ!」って、かなり無理があるなあ。

まあ無理があるからあえて後半を書かないわけだが。
0308デフォルトの名無しさんNGNG
302と303をみれば一目瞭然!
302の人は
> unsigned long long intの使えるコンパイラー10種類なんて、すぐに
と言ってるのに、
303のやつは
> いまんところ1種類も出てないわけだから、C99完全対応のコンパイラは
と、
「unsigned long long intが使えるコンパイラー」と言ってるのを
あえて「きこえないふり」をして「C99完全対応しているコンパイラーは」とすりかえた
つもりになって、それでごまかせてるつもりになってるのがいかにもVC厨だなあ。
0309デフォルトの名無しさんNGNG
あのー いまどき VCでもunsigned long long intぐらい使えるんですが(って最近ですが)、
実際私は使っているのですが、
その、あなたのいう「VC厨」っていう人たちは何をこわがってるんでしょうか?
0310デフォルトの名無しさんNGNG
↑309
おまえみたいに正規版を買ってるやつはいいが、
ここにいるVC厨は、イリーガルコピー品なので、まだ古いVCつかってるんだよ!
0311デフォルトの名無しさんNGNG
>>310
そんなわけないじゃん。妄想癖?
0312デフォルトの名無しさんNGNG
っていうかそもそも、たとえば一番多く使われている「gcc」。
こいつのどこが「C99に対応していない」かを知っているVC厨はほとんどいない。

「どうやらC99完全対応じゃないらしい」とだけ聞きかじって、実際にどこがどうかとか
までは知らないので、いわれてもでてこないんだよな。だめすぎ。

完全対応しているコンパイラーは私の知る限りでは2種類だけだ(2004年夏の時点で)
0313デフォルトの名無しさんNGNG
> そんなわけないじゃん。

ひっしだな!
0314デフォルトの名無しさんNGNG
やーい > VC厨
0315デフォルトの名無しさんNGNG
うんこー!!
0316デフォルトの名無しさんNGNG
誰もVCなぞ話題にしてないのだが。VCの素晴らしさがそんなにくやしいですか?
0317デフォルトの名無しさんNGNG
みんな!!!うんこトークしようぜ!!!!!
0318デフォルトの名無しさんNGNG
>>312
で、10種類は?
0319デフォルトの名無しさんNGNG
まあ、たしかに gcc -std=c99 で何も不便は感じないな。
おれの知ってるかぎりのC99の機能は使っているが。
0320デフォルトの名無しさんNGNG
まずstdbool
0321デフォルトの名無しさんNGNG
-std=C99すれば、#include <stdbool.h> して、なーんにも問題なく
boolもtrueもfalseも使えるぞ。

おまえ使ったこともないのか? > 320
やーい。ぼけすぎ
0322デフォルトの名無しさんNGNG
*p++=*q++
0323デフォルトの名無しさんNGNG
Cの基本だな > *p++ = *q++;
昔のCから一番かわってない部分。
0324デフォルトの名無しさんNGNG
>>321
a-ha、so 10 of compilers, you know?
0325デフォルトの名無しさんNGNG
その前に80種類のコンパイラーだろ?
0326デフォルトの名無しさんNGNG
ofじゃないな
0327デフォルトの名無しさんNGNG
うんこー!!! おいしいよこのうんこ!!
0328デフォルトの名無しさんNGNG
^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D^D
0329デフォルトの名無しさんNGNG
>>326
おまえ英語の成績悪いだろ?
0330デフォルトの名無しさんNGNG
なんや。このスレも結局HSPスレと同レベルやん。
0331デフォルトの名無しさんNGNG
VC厨がおおいからね
0332デフォルトの名無しさんNGNG
今ごろ気付くなって・・・
0333デフォルトの名無しさんNGNG
>>331
いや、多分一人しかいない
0334デフォルトの名無しさんNGNG
つまり、gccなりなんなりの普通のコンパイラーで、どこがC99準拠に足りてないか
さえしらないわけ > お題目をとなえれば受難が通りすぎるとおもっているVC厨
0335デフォルトの名無しさんNGNG
週末当番ご苦労様であります!!!!!!
0336デフォルトの名無しさんNGNG
>>332
私はCプログラマというよりも数学方面の人間だから。。
0337デフォルトの名無しさんNGNG
333
じゃあ、その1人が毎回「C99に完全対応しているコンパイラーなんてほとんどないのだから」
と書いてるのかー。
0338デフォルトの名無しさんNGNG
>>337
でも、その「C99に完全対応しているやつはあまりない」がいいわけになると
思っているんだからすごいよね。
0339デフォルトの名無しさんNGNG
> というよりも数学方面の人間だから。。

消防署のほうからきました。
0340デフォルトの名無しさんNGNG
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
これを
> GUIなどの標準C99ではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
にしちゃえばいいね
0341デフォルトの名無しさんNGNG
>>340
だね。
よろしく! > 次スレたてるひと
0342デフォルトの名無しさんNGNG
Hello worldの次はどんなプログラムを作れば良いんだ?
本にはHelloworldの後はもう簡単な説明してくれないから、
前に進めないよ orz...
0343デフォルトの名無しさんNGNG
一人芝居ご苦労様であります!!!!!!
0344デフォルトの名無しさんNGNG
>>342
ここで聞くと頭悪くなるよ
0345デフォルトの名無しさんNGNG
>>344
ここはC言語のスレじゃないの?
なんかよくわからんが俺も頭悪いので、
素直に言うこと聴いて、探してみます。
手取り足取りとは言わないまでも、
あまりにも基本的なことを質問できるスレってどこかあります?
0346デフォルトの名無しさんNGNG
大原ゆきなら長々と説明してくれるよ!
0347デフォルトの名無しさんNGNG
> Hello worldの次はどんなプログラムを作れば良いんだ

hello kittyです。それができないようでは先にすすめない。
0348デフォルトの名無しさんNGNG
> 本にはHelloworldの後はもう簡単な説明してくれないから、

これウソ。まるで読んでいる本が悪いかのように言っているが、こいつはどの本も読んでない。
読んでたら本の名前書けるはずだもんなあ。
0349デフォルトの名無しさんNGNG
class TestA{
public:
TestA() {
a = new int;
}
~TestA() {
delete a;
}
int *a;
};
class TestB : public TestA{
public:
TestB() {
b = new int;
}
TestB(const TestB& B) {
b = new int;
*b = *B.b;
}
~TestB() {
delete b;
}
int *b;
};
main() {
TestB a;
TestB b = a;
}

というプログラムで何故コピーコンストラクタでTestAクラスのメンバのaに別のアドレスを割り当てなくても大丈夫なのでしょうか?
0350デフォルトの名無しさんNGNG
スレ違い
0351デフォルトの名無しさんNGNG
>342
時間割やアスキーコード表など何でもいいから、テキストかHTMLの表を出力するプログラムを書け。
0352デフォルトの名無しさんNGNG
int hoge;
の値によって処理を分岐させたいのですが、

ifとelse ifでネストさせて分岐させるのと
switch(hoge)で分岐させるのでは、
処理速度に差が出ますでしょうか?

将来的に分岐が増えそうなので
switchを利用したいと思っているのですが、
両者に大きな処理速度の違いがあるのか疑問に思いました。
0353デフォルトの名無しさんNGNG
>>352
実際にコード書いて試してみようとはしないのか。
0354デフォルトの名無しさんNGNG
>352
確率に大きな偏りがなければ、迷わずswitchを使え。
0355デフォルトの名無しさんNGNG
定期的に出るな。このネタ
0356デフォルトの名無しさんNGNG
>>352
関数ポインタは頭にないか?
0357352NGNG
>>356
なるほどー
関数ポインタという手もあったんですね。
勉強になりました。

>>354
switchが可読性が良いので、そっちを利用する
という意見があるようですね。

ありがとうございました。
あと、Part98にも同じ質問がありましたね…
すみませんでした(´・ω・`)
0358デフォルトの名無しさんNGNG
またいつもの方が来てたのね
0359デフォルトの名無しさんNGNG
> switchが可読性が良いので

それうそ
0360デフォルトの名無しさんNGNG
Win厨 Tシャツをつくっておまえらに着させようかな
0361デフォルトの名無しさんNGNG
関数名("hoge");

と言う書き方で文字列を一つずつ画面に表示する関数は作れますか?
0362デフォルトの名無しさんNGNG
何をやろうとしているのかよく分からないが
たぶん作れる。
0363デフォルトの名無しさんNGNG
>361
f(char*p){int i=0;
while(p[i]){
putchar(p[i++]); putchar('\a');
sleep(100);
}}
0364デフォルトの名無しさんNGNG
ぴー、ぴー、ぴー
0365デフォルトの名無しさんNGNG
int i;
for(i=0;i<15;i++){if(n&&n%3&&n%9){putchar('\a');}sleep(1000);
}
0366デフォルトの名無しさんNGNG
>>363
できました!ありがとうございます!
書き方自体は物凄く簡単なんですね。
次からは聞かなくても作れるように頑張ります!
0367デフォルトの名無しさん05/01/17 00:41:13
linux redhatつかってます。
例えばこういうプログラムをつくりました。
#include <stdio.h>
int main(void){
printf("Hello");
return 0;
}

この時、gcc uuuu.cでコンパイルできても、
./a.outとしても、何も表示されずに終了します。
プログラムが変なんでしょうか?設定がおかしいのでしょうか?
良く分かりません。gccを入れ直してもダメでした。。
0368デフォルトの名無しさん05/01/17 00:43:03
改行してないからプロンプトに上書きされてたりして。
#詳細は該当スレにて。
0369デフォルトの名無しさん05/01/17 00:52:33
プロンプトの左に出てなきゃ、'\r'で上書きされてるんだろうな。
0370デフォルトの名無しさん05/01/17 00:55:19
>>368
改行したら、確かにできました。
そうなんですね。。
ありがとうございました。
0371デフォルトの名無しさん05/01/17 01:17:30
C言語を用いたMPIによる並列化コードを作成について質問させて下さい。
以下のような擬似コードをデッドロックさせないで動作完了を保障する送信命令はないのでしょうか。

----------------------------
if( proc1 ){
x = 1;
send(x) [ => proc2 ]
recv(y) [ <= proc2 ]
print(x+y);
}
if( proc2 ){
y=2;
send(y) [ => proc1 ]
recv(x) [ <= proc1 ]
print(x+y);
}
----------------------------

特に上記の擬似コードのSendにMP_Send命令を用いても環境によっては動作するのですが、
これはMPIの規定を無視したコーディングになっています。確実な動作を保障できるSend命令はないでしょうか
よろしくお願いします。
0372デフォルトの名無しさん05/01/17 01:46:45
>>371
>>1
0373デフォルトの名無しさん05/01/17 01:48:57
またまた>>368です。
今度は文字を一つ違う文字に変えるプログラムを(AがB、4が5)作りました。
#include <stdio.h>

int main(void)
{ char t[44];
char *s;
s = t;
int j = 0;
int o = 0;
scanf("%s", t);
while('\0'!= *s){
j++;
}
s =s - j;
while(j != o){
*s++;
s++;
o++;
}
printf("%s \n", *s);
return 0;
}
それが、どうやらscanfで止まってしまうようで、
文字をいれてリターンをいれても、また入力待ち状態になってしまいます。
なぜなんでしょうか。。。
0374デフォルトの名無しさん05/01/17 01:50:09
scanf使うな
fgets+sscanf推薦
0375デフォルトの名無しさん05/01/17 01:51:39
なぜscanfがダメなのかは>>1のFAQ読め
0376デフォルトの名無しさん05/01/17 01:54:33
whileの部分間違えてました。
while('\0'!= *s){
j++;
s++;
}
0377デフォルトの名無しさん05/01/17 01:55:33
(`_ゝ´)アッソ
0378デフォルトの名無しさん05/01/17 01:56:10
>>374
>>375
よんでみます。。。
0379デフォルトの名無しさん05/01/17 02:10:55
while(*s != '\0'){
(*s)++;
s++;
}
s =s - j;
printf("%s \n", s);
0380デフォルトの名無しさん05/01/17 02:11:23
>>373
やりたいのはこんなの?

#include <stdio.h>

int main(void)
{
char t[256];
int i;

fgets(t, 256, stdin);
for(i=0; t[i] != '\n'; i++)
t[i] += 1;

printf("%s", t);

return 0;
}
0381デフォルトの名無しさん05/01/17 02:55:34
どなたかこの問題お願いします。

(問)ガウス法のプログラムを作成し、次の方程式を解け。
  3X1 + 2X2 + X3 = 10
  2X1 + 5X2 + 2X3 = 18
  X1 + 4X2 + X3 = 12

#include <stdio.h>
#define n 3

main()
{
int i,j,k;
double a[n][n+1]={{3,2,1,10},{2,5,2,18},{1,4,1,12}};
double d;

この続きをお願いします。言語はCです。
0382デフォルトの名無しさん05/01/17 03:05:52
宿題は(ry
0383デフォルトの名無しさん05/01/17 03:19:23
>>381
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/80.txt

ピボット選択無しの最も単純なバージョン。
0384デフォルトの名無しさん05/01/17 03:29:54
>>383
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/80.txt
これ見れませんよ。
0385デフォルトの名無しさん05/01/17 03:31:00
>>384
みれますよ
0386デフォルトの名無しさん05/01/17 03:41:09
>>385
見れました。ありがとうございました。
0387デフォルトの名無しさん05/01/17 06:42:40
> それが、どうやらscanfで止まってしまうようで、


だから使うなっていっただろ ぼけ
0388デフォルトの名無しさん05/01/17 11:21:50
使わざる者食うべからず
0389デフォルトの名無しさん05/01/17 11:42:49
↑意味不明
それを言うなら
触らぬ神に祟りなし
だろ
0390デフォルトの名無しさん05/01/17 12:07:12
三次元配列の配列幅を多くしたときに、プログラムが回るようにするにはどうしたらいいですか?
回してみようとしたところ、スタックのオーバーフローが起こってしまいました。
ちなみに、エラーメッセージは以下の通りでした。

Pid 6548 received a SIGSEGV for stack growth failure.
Possible causes: insuficient memory or swap space,
or stack size exceeded maxssiz.
0391デフォルトの名無しさん05/01/17 12:28:00
>>390
1.スタックサイズを大きくする
2.配列をスタックに取らない。

お好きな方法をどうぞ。
0392デフォルトの名無しさん05/01/17 12:57:06
構造体のファイル間での書き込み/読み込みなのですが、write()でエラーが
返ってきます。どこが間違っているのでしょうか?

#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#define STUDENTS 2

typedef struct {
int sub1;
int sub2;
} Scorelist;

void ip_scorelist(FILE *fp, Scorelist *scorelist)
{
char buf[256];
int i;

for (i = 0; i < STUDENTS; i++) {
/* sub1のスコアを入力 */
printf("sub1(student #%d?)\n", i + 1);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d", &scorelist[i].sub1);
/* sub2のスコアを入力 */
printf("sub2(student #%d?)\n", i + 1);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d", &scorelist[i].sub2);
}
}
0393デフォルトの名無しさん05/01/17 12:58:12
void op_scorelist(FILE *fp, Scorelist *scorelist)
{
int i;

for (i = 0; i < STUDENTS; i++) {
printf("sub1(student #%d): %d\n", i + 1, scorelist[i].sub1);
printf("sub2(student #%d): %d\n", i + 1, scorelist[i].sub2);
}
}

int main(void)
{
int fd;
Scorelist scorelist[STUDENTS];

fd = open("C:\\fooscore",
O_RDWR | O_CREAT | O_RAW, S_IWRITE | S_IREAD);
if (fd = -1)
fprintf(stderr, "The file couldn't be opened.\n");
else
printf("The file was opened.\n");

/* 構造体へ入力 */
ip_scorelist(stdin, &scorelist[0]);

/* 構造体の出力 */
op_scorelist(stdout, &scorelist[0]);

/* ファイルへの書き込み */
if (write(fd, &scorelist[0], sizeof(scorelist)) < 0)
fprintf(stderr, "couldn't be written.\n");
0394デフォルトの名無しさん05/01/17 12:58:54
lseek(fd, 0, SEEK_SET);

fd = open("C:\\fooscore", O_RDONLY);
if (fd = -1)
fprintf(stderr, "The file couldn't be opened.\n");
else
printf("The file was opened.\n");

/* ファイルから読み込み */
if (read(fd, &scorelist, sizeof(scorelist)) < 0)
fprintf(stderr, "couldn't be read.\n");

/* 構造体の出力 */
op_scorelist(stdout, &scorelist[0]);

close(fd);

return 0;
}
0395デフォルトの名無しさん05/01/17 13:00:58
↑すいませんlseek()下のopen()関連は無視して下さい
0396デフォルトの名無しさん05/01/17 13:03:42
人のプログラム見て思ったんですが、
#define XXX 0x0036
とか、全部16進表記してあるんです。
これってなんかメリットあるんですか?
コンパイル時間が短くなるとか。自分的にはただ見づらいだけだと思うんですが。
0397デフォルトの名無しさん05/01/17 13:22:11
>396
hex1桁=4bits.
fh=1111(2).
ちなみに俺様の場合、8進数の方が見やすい。
0398デフォルトの名無しさん05/01/17 13:23:54
>>396
書いたヤシに聞け。
おそらく、16進数の方がわかりやすいからだと思うが。
0399デフォルトの名無しさん05/01/17 13:32:01
>>392
何のエラーだよ。

>>396
bit毎に変化がある値が読みやすくなる。
コンピュータ相手の場合は2^n進表現にすると色々と都合が良い。
コンパイル時間はあまり関係ない。
ただし16進文字列だとn<<=4で桁の繰り上げができるので、
10進の掛け算(n *= 10)よりは効率が良い。
8進はn<<=3、2進はn<<=1。
0400デフォルトの名無しさん05/01/17 13:33:28
>>396
それはあなたの思考パターンに人間らしさが残っているから
0401デフォルトの名無しさん05/01/17 13:37:16
>>397
> ちなみに俺様の場合、8進数の方が見やすい。

PDP世代の生き残りですか?
040239005/01/17 13:47:31
>>390にて質問をさせていただいたものです。

スタックサイズを大きくする、との助言を頂きました。
UNIXを使用して、メモリを限界まで上げて演算を行っているのですが、
(最初に記述すべきでした。すいません。)
それ以上に引き上げる方法はあるのでしょうか。
調べてはみたのですが情報が見つからなくて・・。
0403デフォルトの名無しさん05/01/17 13:48:49
>>399
if (write(fd, &scorelist[0], sizeof(scorelist)) < 0)
fprintf(stderr, "couldn't be written.\n");
ここで < 0 が成り立ってしまうんです。
0404デフォルトの名無しさん05/01/17 13:55:12
>>392は読んでないが、システムコールとか入出力関連でエラーが起きたら、
迷わず perror しろ。
if (... < 0) perror("write");
0405デフォルトの名無しさん05/01/17 13:59:27
>402
スタックじゃなくて、ヒープから(mallocで)切り出すか、システムコールで仮想メモリを得るか、ファイルで仮想メモリをバリバリ実装するか、使わないブロックを圧縮する方法がある。コンパイラのオプションは何だ?
040639205/01/17 14:03:30
>>404
perror("write")だと実行時にfile descripterがだめだと出てしまいます。
引数に"write"と書くだけではないのでしょうか?
0407デフォルトの名無しさん05/01/17 14:09:10
>392
なんかわかりにくいから
単純なテストコード書いて試してみれば?
openしてwriteしてcloseするだけのやつ
0408デフォルトの名無しさん05/01/17 14:09:24
>406
だったらfdを疑え。本当に開かれてるのか?
040939205/01/17 14:09:36
勘違いしてました・・。
つまりfd自体に問題があるってことなんですよね・・。
041039205/01/17 14:12:59
>>407-408
すいません、アホでした。
しっかりファイルが開けないと出てました。
fd = open("C:\\fooscore",
O_RDWR | O_CREAT | O_RAW, S_IWRITE | S_IREAD);
↑どこが間違っているのでしょうか?
041139205/01/17 14:16:38
度々すみません・・・・・
if (fd = -1) → fd == -1
ここを直したら開けていると出ました。
ということはfdの何に問題があるのでしょうか?^^;
0412デフォルトの名無しさん05/01/17 14:18:32
>411
代入じゃダメだろ
0413デフォルトの名無しさん05/01/17 15:26:15
定数は左に書くよ派の人が現れないね。
0414デフォルトの名無しさん05/01/17 15:56:09
>>413
http://www.kouno.jp/home/c_faq/c17.html#4
それにどうせ変数同士の比較の時には意味無い。
041539605/01/17 18:04:26
ご教授ありがとうございました。
0416デフォルトの名無しさん05/01/17 18:18:48
char *p ;
p=(char *)malloc(1);
とかするんですけど、(void*)型で、しかも同じ8バイトなのに、
大体こうやるのはなぜですか?
ただ見やすいからなのでしょうか?
0417デフォルトの名無しさん05/01/17 18:25:20
>416
voidは文法チェックのため、後から導入された型。char*をvoid*と同じ意味で使うのは時代遅れか、やっつけ仕事の時のみ。
0418デフォルトの名無しさん05/01/17 18:27:31
>>416
char*型というのは(大抵)1byteごとに1増えるの。
int*型というのは(大抵)4byteごとに1増えるの。
void*型はchar*型とは違う型なの。
0419デフォルトの名無しさん05/01/17 18:30:34
つまりは、キャストしないと、>>416の p には char* 型で入ったまま
という事でしょうか?
アドレスとは単なる数値の羅列とはちがうのですか?
0420デフォルトの名無しさん05/01/17 18:36:56
>419
試してみろ
cout << &(((char*)0)[1]) << endl << &(((short*)0)[1]) << endl << &(((long*)0)[1]) << endl;
0421デフォルトの名無しさん05/01/17 18:39:18
>>416
>しかも同じ8バイトなのに

何が 8 バイトだと言うのかね?
0422デフォルトの名無しさん05/01/17 18:46:34
4バイトでしたか

>>420
試したとして、なにがわかるのでしょうか??
おそらくC++なのでしょうか? よくわかりません。
0423デフォルトの名無しさん05/01/17 18:48:44
>420
C++で失礼。
printf("%p\n", ...);
で調べてみ
0424デフォルトの名無しさん05/01/17 18:53:49
>>422
>4バイトでしたか

何が 4 バイトよ?
0425デフォルトの名無しさん05/01/17 18:56:23
lintって今は使われてないんでしょうか?
gccといっしょに使えるやつがあったら教えてください。
0426デフォルトの名無しさん05/01/17 18:57:38
環境によるのでしたか

>>423
すみません。訂正していただき嬉しいです。
printf("%p\n",&(((char*)0)[1]));
で、いいですか?
見る限りではアドレスの移動量が違うって感じですか。
いま試せる環境がないので、あとで試そうと思います。
0427デフォルトの名無しさん05/01/17 18:58:55
64bitではsizeof(void*)==8.
32bitでは4.
void*pv;と宣言するとpv[1]は文法的にダメ。
0428デフォルトの名無しさん05/01/17 18:59:51
>>426
>環境によるのでしたか

「何が」環境によるのよ?
0429デフォルトの名無しさん05/01/17 19:01:11
アドレス。
Windowsでは32ビット・・・
0430デフォルトの名無しさん05/01/17 19:01:30
>426
そう。答えは1,2,4だろう。
0431デフォルトの名無しさん05/01/17 19:08:58
>>427
なぜ駄目なのでしょう?
やはり文法チェックのためだけに作られた型だからですか?
pv[1]は容量が確保できないって良いのでしょうか?
0432デフォルトの名無しさん05/01/17 19:18:42
いいって
0433デフォルトの名無しさん05/01/17 19:19:05
>431
void*はあらゆるポインタ型を抽象化した型で、あらゆるポインタをキャストせずに代入できる。
f(void*p);という関数はf(char*)と互換だが、逆は不可。
sizeof(pv[1])==sizeof(void)==???
0434デフォルトの名無しさん05/01/17 19:22:43
てすと
0435デフォルトの名無しさん05/01/17 19:40:15,
このようにvoidの使用は不便な点も便利な点もある。何か質問がなければ答えない。
0436デフォルトの名無しさん05/01/17 20:24:15
>>433
エラーと警告を混同してる香具師ハケーン
0437デフォルトの名無しさん05/01/17 20:45:21
>436
どこに派遣するの?
0438デフォルトの名無しさん05/01/17 20:51:13
やーい、反論できねえ (プ
0439デフォルトの名無しさん05/01/17 20:57:54
詭弁の特徴その13
勝利宣言をする
http://bio-diversity.hp.infoseek.co.jp/kiben.html
0440デフォルトの名無しさん05/01/17 21:02:40
そもそも勝負なんかできなかったヒヨッ子がなにをか言わんや
0441デフォルトの名無しさん05/01/17 21:11:14
ピーターパン症候群になりやすい性格と診断されたので気を付けて>438-439
0442デフォルトの名無しさん05/01/17 21:12:36
非GPLなgetoptのソースってない?
0443デフォルトの名無しさん05/01/17 21:15:21
>>436
どこにエラーとか警告とかについて言及しているの?
0444デフォルトの名無しさん05/01/17 21:24:04
>>443
うん、してる
ああ、おまえもわかんねえのかw
0445デフォルトの名無しさん05/01/17 21:27:21
>>444
何も言わないで理解してもらおうなんて、考えが甘いんじゃない?
0446デフォルトの名無しさん05/01/17 21:28:20
>>444
その調子で、誰も理解してくれないからって、引き篭ってきたんとちゃうの?
0447デフォルトの名無しさん05/01/17 21:32:14
>>445
別に俺が言う必要ねえんだよ
ISO が言ってくれてるから
0448デフォルトの名無しさん05/01/17 21:32:38
こらー、仲良くしなさーい!
0449デフォルトの名無しさん05/01/17 21:34:47
8:知能障害を起こす
って起せるものなのか?
0450デフォルトの名無しさん05/01/17 21:36:47
>>449
わりと簡単。
0451デフォルトの名無しさん05/01/17 21:37:53
>449
君の頭、外科手術したげるね
0452デフォルトの名無しさん05/01/17 21:40:03
なーるほど
0453デフォルトの名無しさん05/01/17 21:42:41
>>442
BSDライセンスでよければ、FreeBSDとかにでも入ってるでしょ
0454デフォルトの名無しさん05/01/17 23:09:21
ほっ、ほぁーっ! ほぁーっ!! ぬるぽ
0455デフォルトの名無しさん05/01/17 23:19:51
finally {
    >>454ガッ
}
0456デフォルトの名無しさん05/01/17 23:23:21
>>455
syntax error
ここはCスレですよ
0457デフォルトの名無しさん05/01/17 23:31:40
>>455
error: unexpected character { near finally
0458デフォルトの名無しさん05/01/18 00:39:05
あるサンプルプログラム(.cpp)をテキストで開いたら
一行がすごく長くてところどころに↑矢印みたいなやつが入ってるんですけど、
この矢印ごとに簡単に改行する方法はありますか?

それとも今はテキストでしか見てないのですが、
他のエディタであれば正常通り見られますかね?
0459デフォルトの名無しさん05/01/18 00:40:47
>.cpp
スレ違い
0460デフォルトの名無しさん05/01/18 00:44:18
>>458
具体的に開いたエディタを上げてみそ。

ちなみに俺の勘によれば、たぶん改行コードがLFだけになっているのでしょう。
であるので、見るだけならWebブラウザでも見れますし、
ちょっと気の利いたエディタならたいがいちゃんと編集もできるでしょう。
0461デフォルトの名無しさん05/01/18 03:18:03
IEブラウザなら見れるんじゃね?
046245805/01/18 09:26:30
IEブラウザで正常にみることができました。

スレ違い申し訳ないです。ありがとうございました。
0463デフォルトの名無しさん05/01/18 10:47:19
ダブルポインタで確保した多重配列の現在のサイズを
取得したいのですがいい方法はありませんでしょうか?

ソースは以下のようになっています。

  // 200バイトを10列分確保 (buffer[10][200])
  char** buffer;

  buffer = (char**)malloc(sizeof(char*)*10);
  for(int i=0;i<10;i++)
  {
    buffer[i] = (char*)malloc(200 * sizeof(char));
    memset(buffer[i], 0, 200);
  }

  // freeや必要な処理はこのあとで
0464デフォルトの名無しさん05/01/18 10:54:02
>>463
ありません
0465デフォルトの名無しさん05/01/18 11:01:35
printf("\x1b[2A");
と書いてもカーソルが移動しないで"2A"と表示されてしまう
んですけどなんか間違ってます?
0466デフォルトの名無しさん05/01/18 11:02:22
>463
小学生に掛け算教えてもらえ。
callocや#define talloc(n,type)
使えば簡単なのに
0467デフォルトの名無しさん05/01/18 11:06:37
>>465
質問するスレから間違ってます。
OSやコンパイラくらい書いてくれ。
0468デフォルトの名無しさん05/01/18 11:14:57
>465
NT系か9x系か知らないが、コンソール端末で
C:\> adddrv ansi.sys
を実行した後、その端末でプログラムを実行してみろ。
046946505/01/18 11:17:07
>>467
OS:WINDOWS 2000
コンパイラ:visual C++ 6.0
です。
これってC言語だけのエスケープシーケンスじゃないんですか?
0470デフォルトの名無しさん05/01/18 11:19:52
>>469
C言語とは関係ありません。
2000でソレをやりたかったら
CONFIG.NTにANSI.SYSを追加して16bitコードを吐くコンパイラを
使用しないとダメ。VC6.0ではprintfではできません。
047146505/01/18 11:21:05
>>468
コマンドプロンプトでC:\>adddrv ansi.sysを実行するという意味でしょうか?
試してみましたが、その後プログラムを実行してもやはり同じでした・・。
0472デフォルトの名無しさん05/01/18 11:23:41
NT系だと、dosx使う方法もあるが(ry
047346505/01/18 11:26:34
>>470
え・・そうなんですか。
なんで課題で出たんだろう・・・、学校もVC6.0なのに。
では現在の環境で、カーソルを移動させる手段が他にあるのでしょうか?
現在時刻を同じ場所で上書きして表示させるプログラムを書きたいのですが・・
0474デフォルトの名無しさん05/01/18 11:28:49
>473
'\r'出力か、<conio.h>使えば〜?
047546505/01/18 11:43:41
>>474
"表示するフォーマット\r"でできました、ありがとうございました。
0476デフォルトの名無しさん05/01/18 11:48:54
>470
dosx使えば32bitの混合コードも受け付けるんじゃなかった?
0477どうしても判らないんです。助けてください・・・05/01/18 11:51:31
突然教えてちゃんでごめんなさい
なりふり構ってられなくて、、><;

問題
与えられたグラフGに対しKruskalの算法をもちい最小木を求めるプログラムを作る。
条件1・採用した辺からできる部分グラフの連結成分を保持するデータ構造において、
linkを行う際にunion by rank だけ取り入れたものとunion by rank と path compression を
併用したものの両方を作成。
条件2・四則演算、比較、代入の総数を計測し、最小木とともにその総数を出力すること
0478デフォルトの名無しさん05/01/18 11:53:08
>>477
>>1を読んで下さい
0479デフォルトの名無しさん05/01/18 12:02:40
>477
落ち着いてテキスト読め。グラフ理論の用語が分からないなら数学板に行け。グラフを表すデータ構造が分からないなら聞くがよい。
0480デフォルトの名無しさん05/01/18 12:12:04
いや、ここで聞くな。宿題スレ逝け。
0481デフォルトの名無しさん05/01/18 12:17:08
>>463
「ダブルポインタ」とかいう一般的でない言葉を使うのはやめれ。

で、「200」とか「10」とかいう数字をキミのプログラムは知っている
ではないか。それをどこかに保存すればいいんですよ。
0482デフォルトの名無しさん05/01/18 12:40:55
>>463
ついでに言うと、それは正確には多重配列とは言わない。
0483デフォルトの名無しさん05/01/18 13:55:03
( ´∀`)ダブルぬるぽ
0484デフォルトの名無しさん05/01/18 14:08:27
>>483
いやまて、最初のぬるぽは
次のぬるぽを指してはいないぞ。
0485デフォルトの名無しさん05/01/18 14:15:21
いずれにせよ
          | |
          | | ガガッ
  ( ・∀・)   .人
 と    )  <  >_∧∩
   Y /ノ    .人`Д´)/ ←>>483
    / )    <  >_∧∩
  _/し' //. V`Д´)/ ←>>484
 (_フ彡       /
048646305/01/18 15:37:41
>>466
配列全体のサイズではなく要素数を取得したかったです。
質問が間違っていました。

>>481
一般的いでない言葉は使わないようにしておきます。
200、10(要素数)を静的に保存するのはヘボくないですか?
スマートに任意のタイミングで計測できないかが知りたいです。

>>482
はい分かっています。
0487デフォルトの名無しさん05/01/18 16:04:50
>一般的いでない言葉は使わないようにしておきます。
×ダブルポインタ
○ポポインタ
0488デフォルトの名無しさん05/01/18 16:09:03
>>486
どういうわけか、malloc() した領域のサイズを取る手段って標準では
ないんですよね。ライブラリ内でサイズを保持してない訳ないのに。
なので、ヘボくても仕方ないので自分で記録するしかないです。

typedef struct {
int num;
char elem[];
} foo_t;

typedef struct {
int num;
foo_t *foo[];
} buffer_t;

buffer_t *buffer;
buffer = malloc(sizeof(buffer_t) + sizeof(foo_t *) * N1);
buffer->num = N1;
for (int i = 0; i < N1; i++) {
buffer->foo[i] = malloc(sizeof(foo_t) + sizeof(char) * N2);
buffer->foo[i]->num = N2;
memset(&buffer->foo[i]->elem, 0, sizeof(char) * N2);
}

みたいなー。
0489デフォルトの名無しさん05/01/18 17:02:20
>488
吐きそう。ゲー。その上、こんな低次元の処理で構造体使うか? calloc,_msize…、やめた、どうせ人の忠告聞かないんだから。
0490デフォルトの名無しさん05/01/18 17:08:59
>>489
VCしか知らない奴は黙ってろ
0491デフォルトの名無しさん05/01/18 17:12:09
>490
_msizeのポートもできないくせに生
0492デフォルトの名無しさん05/01/18 17:14:11
>490
こいつはxmallocもVCも知らないぼけ
0493デフォルトの名無しさん05/01/18 17:19:37
>490
なめんなよ
0494デフォルトの名無しさん05/01/18 17:31:33
>490
おまいは簡単な変数の加算もできないのか
0495デフォルトの名無しさん05/01/18 17:44:52
自分で割り当てたメモリサイズは自分で管理汁。

                           それが標準Cクオリティ
       http://pc5.2ch.net/test/read.cgi/tech/1105454700/l50
0496デフォルトの名無しさん05/01/18 18:55:12
ヘボくても仕方ないよね
0497デフォルトの名無しさん05/01/18 19:40:00
>>490
ヒマ人に合わせてらんねーの
おぢさんたちわ
0498デフォルトの名無しさん05/01/18 20:01:30
>>497
やめとけ。
0499デフォルトの名無しさん05/01/18 20:08:19
> ダブルポインタで確保した多重配列の現在のサイズを取得したい
する必要はない。
0500デフォルトの名無しさん05/01/18 20:17:31
>>486
mallocで領域確保する時の要素数は変数の値が多いから無問題
0501デフォルトの名無しさん05/01/18 20:24:52
あらかじめ全体のサイズを計算していれば、malloc一回呼ぶだけでも二次配列のようなものは確保可能。
0502デフォルトの名無しさん05/01/18 20:33:13
VCが相当羨ましいようだな
0503デフォルトの名無しさん05/01/18 20:34:43
VCの問題なの?
0504デフォルトの名無しさん05/01/18 20:41:09
暇だったら>501のマクロか関数を書いてくんろ
0505デフォルトの名無しさん05/01/18 22:03:15
typedef char row_t[200];
row_t *buf1;
char (*buf2)[200];
buf1 = (row_t *)malloc(10*sizeof(row_t));
buf2 = (char(*)[200])malloc(10*200*sizeof(char));
0506デフォルトの名無しさん05/01/18 22:08:01
どなたかちょっと前(Part98だったかな?)
「これは左辺値ですか?」
「違います」
って感じのやりとりがあったと思うんです。あそこらのキャッシュ持ってないでしょうか?
持ってたらぜひにでも、あっぷお願いします。
0507左辺値がわかった人05/01/18 22:17:46
>>506
Part98該当箇所だけ
ttp://paw.s2.x-beat.com/up/img/4712.zip
0508デフォルトの名無しさん05/01/18 22:58:10
>>507
ご親切にありがとうございます!
無事ダウンロードさせて頂きました。
本当にありがとう!
0509デフォルトの名無しさん05/01/19 03:06:17
文字列の最後に改行を入れたいのですが
a[30]="\0"
とやっても改行が入らないのですがどうすればいいんでしょうか?
0510デフォルトの名無しさん05/01/19 03:09:37
そりゃあ改行は \n だからな。入れ方にも問題あるし。
0511デフォルトの名無しさん05/01/19 03:10:06
>>509
a[30] = '\n'; a[31] = '\0';
つーか、それエラーだろ。
0512デフォルトの名無しさん05/01/19 03:11:18
>改行

\0 は NUL
0513デフォルトの名無しさん05/01/19 04:21:43
pu
0514デフォルトの名無しさん05/01/19 04:41:37
だね。 > 512
0x00 NUL 0x10 DLE 0x20 SP
0x01 SOH 0x11 DC1
0x02 STX 0x12 DC2
0x03 ETX 0x13 DC3
0x04 EOT 0x14 DC4
0x05 ENQ 0x15 NAK
0x06 ACK 0x16 SYN
0x07 BEL 0x17 ETB
0x08 BS 0x18 CAN
0x09 HT 0x19 EM
0x0a LF 0x1a SUB
0x0b VT 0x1b ESC
0x0c FF 0x1c FS
0x0d CR 0x1d GS
0x0e SO 0x1e RS
0x0f SI 0x1f US 0x7f DEL
これぐらいは基本だ。おぼえとけ ぼけ
0515デフォルトの名無しさん05/01/19 04:42:18
513はかなりのしろーとの知ったかぶり ;-)
0516デフォルトの名無しさん05/01/19 04:47:49
man asciiすりゃ出てくるものを意気揚々と書かれてもなあ…
0517デフォルトの名無しさん05/01/19 04:54:09
はあ? それさもしらないやつが2人もいたから書いたわけだろ? やっぱり516のぼけは
自分のぼけをごまかせるとでも思っているようだ ;-)
0518デフォルトの名無しさん05/01/19 04:59:56
えーと516なんですが、私が他になにを書いたと?
0519デフォルトの名無しさん05/01/19 05:13:48
最近のがきはうざい、報告書は簡潔にね
0520デフォルトの名無しさん05/01/19 06:50:59
ようは、まぬけをさらしたのをごまかすために相手にケチをつけたかったのね ;-) > 519
0521デフォルトの名無しさん05/01/19 09:17:58
非公開関数って知ってます?
どんなの知ってます?
0522デフォルトの名無しさん05/01/19 09:22:54
>512
何の?
0523デフォルトの名無しさん05/01/19 09:23:33
>>433
Cの場合はvoid*はあらゆるポインタ型にキャスト無しで代入できるのですが.
0524デフォルトの名無しさん05/01/19 09:25:24
>522
誤爆。
>521
何の?
0525デフォルトの名無しさん05/01/19 09:33:14
>521
例えば公開ヘッダーの関数宣言を意図的に削ったり、関数定義にstaticを付ければ非公開だろ
0526デフォルトの名無しさん05/01/19 09:47:53
>>525
宣言を削っても非公開にはできないわけだが。
0527デフォルトの名無しさん05/01/19 11:08:55
>523 は本当?
けどキャストはした方がいくない?
0528デフォルトの名無しさん05/01/19 11:11:52
>521
_lock とか _unlock はマイクロソフトの非公開関数だよ ;-)
0529デフォルトの名無しさん05/01/19 11:23:09
すんません、初心者OKですか…?
入門書にて勉強中、やはりポインタで唸ってますが、
基本的な部分で疑問が生まれ、どこ読んでも書いてないもので…。

変数の宣言と代入なのですが、

int a=5;
int b=6;

または、

int a;
int b;
a=5;
b=5;

という記述はOKで、

int a;
a=5;
int b;
b=6;

という記述はなぜNGなんでしょうか?

諸先輩方、教えてくださいませ。お願いいたします。
0530デフォルトの名無しさん05/01/19 11:26:05
そんなはずはないよ
間違っているのは君の入門書だ。
0531デフォルトの名無しさん05/01/19 11:26:42
>529
int a=1;
は初期化を伴う宣言だ。代入文ではない。なお、C++では可
0532デフォルトの名無しさん05/01/19 11:28:00
>530
こいつの頭はC++
0533デフォルトの名無しさん05/01/19 11:28:52
>>529
Cでは
ローカル変数はスコープ(関数)の入り口の最初にしか
書けないことになっているから

C++だとどちらのやり方も書ける。
0534デフォルトの名無しさん05/01/19 11:29:31
C99ならNGじゃないよ。
0535デフォルトの名無しさん05/01/19 11:35:36
あ、ごめんなさい。

NGのやり方で記述すると、コンパイルエラーが起きるのです。

●コード
1 #include<stdio.h>
2 int main(void)
3 {
4int a;
5a=3;
6int b;
7b=5;
8
9printf("%dと%d\n",a,b);
10
11return 0;
12 }


●コンパイルエラー
6:parse error before 'int'
7:'b' undeclared (first use in this function)
7:(each undeclared identifier is reported only once
7:for each function it appears in.)

こんな感じです…。
053652905/01/19 11:39:13
>>531

初期化と代入を理解してませんでした。
ありがとうございます。


>>533

「最初に書け!」
というルールなのですね。
ありがとうございます。

今のところ「こういうルールだから」
というものには丸暗記で対応していこうと思っています。


みなさま、ありがとうございます。
0537デフォルトの名無しさん05/01/19 11:41:00
>>535
Cでは
ローカル変数はスコープ(関数(main))の入り口の最初にしか
書けないことになっているから

C++だとどちらのやり方も書ける。
0538デフォルトの名無しさん05/01/19 11:44:10
スレチガイ
すまん
0539デフォルトの名無しさん05/01/19 12:25:44
int a=1;
は初期化を伴う宣言だ。代入文ではない。なお、C++では可

激しく嘘 Cでも可 ;-)
0540デフォルトの名無しさん05/01/19 12:39:38
>>539
>int a=1;
>は初期化を伴う宣言だ。代入文ではない。なお、C++では可

>激しく嘘 Cでも可 ;-)

どこに嘘が?
Cで不可とはどこにも書いてないと思うのだが。
0541デフォルトの名無しさん05/01/19 12:43:10
>C++では可
Cでは不可ととれる
0542デフォルトの名無しさん05/01/19 12:55:26
昔のCではダメ。今のCではOK。
0543デフォルトの名無しさん05/01/19 12:59:21
>>542
なにこの人
054452705/01/19 13:01:24
だれか>>527に答えてください
0545デフォルトの名無しさん05/01/19 13:05:31
>>527
本当ですよ。
malloc() の返り値とかキャストするのは大マヌケ。
0546デフォルトの名無しさん05/01/19 13:08:10
よい。
というか最近のコンパイラ(MSCだけど)はキャストしないと
えらーにならなかったっけ。
0547デフォルトの名無しさん05/01/19 13:09:50
普通のコンパイラのディフォルトだと、mallocのvoid*型返値をキャストしなければvoid*以外に代入すべきでない。少なくとも警告かエラーになる。>523は間違い
0548デフォルトの名無しさん05/01/19 13:11:48
>>545
malloc()はvoid*を返すからvoid*で受け取ればキャストしないのは
あたりまえ。
でも、例えばそのメモリを構造体のタグを使って参照するんだったら
その構造体のポインタに直接ぶち込めば言い訳で、
そのときにキャストするのはあたりまえ。
0549デフォルトの名無しさん05/01/19 13:19:29
>>523には「Cの場合は」と書いているが何時のCかで変わってくるんじゃ?
0550デフォルトの名無しさん05/01/19 13:19:58
>>523は根本的に間違い
CASTを使えばvoid*うんぬん関係なく
あらゆるポインタ型に代入できる。
極端な話、
char a = 'C';
float *p = (float*)a;
なんかも可能なわけだ。
0551デフォルトの名無しさん05/01/19 13:24:05
このスレの信頼性が下がった…orz
0552デフォルトの名無しさん05/01/19 13:24:36
「データ入力及びデータの表示を行なうプログラムを作りなさい。一件分の入力処理は
input_data()で、表示はdisplay_data()と処理を関数で分けて行ないなさい」
という問題があるのですが、「一件分の入力処理はinput_data()で、表示はすべてdisplay_data()で
処理しなさい」ということですか??
0553デフォルトの名無しさん05/01/19 13:27:38
中途半端な知識の人が多いのね。
void * の値を void * 以外のポインタにキャストなしで代入しようと
すると、
C では問題なし
C++ ではエラー
だよもん。
0554デフォルトの名無しさん05/01/19 13:28:57
input_data()という関数に入力処理のコードを書いて
display_data()という関数に表示処理のコードを書け!!
と その問題作成者の先生はおっしゃっているのじゃ。
0555デフォルトの名無しさん05/01/19 13:31:56
誰もお前の環境の場合を聞いてない。できることとやってもいいことは違う。
0556デフォルトの名無しさん05/01/19 13:36:47
>>551
そもそも2chに信頼を求めるのはあかんでぇ〜
参考程度にしときやぁ〜
055755105/01/19 14:39:18
おいっす
0558デフォルトの名無しさん05/01/19 18:27:05
Cで組んだプログラムを可視化したいのですが
(a[x][y]=1(1なら赤)みたいな感じで…)
なんか方法ないですか?;;

0559デフォルトの名無しさん05/01/19 18:59:58
>>558
可視化とはプログラムが見えないとな!?
冗談はさておき、環境を書かないことにはどうにもならない
WinかUn*xかエディタ上なのかHTMLに吐き出すのか

数字の中で1を赤くするのはあんまり意義が感じられないけど・・・
とりあえず定数化するべきなんじゃ
0560デフォルトの名無しさん05/01/19 19:02:29
>558
http://www.google.co.jp/search?hl=ja&q=C%2B%2B+source+code+format+color+download&btnG=Google+%E6%A4%9C%E7%B4%A2
0561デフォルトの名無しさん05/01/19 19:07:19
>>558
何がしたいのか、さっぱり理解出来ない... orz
0562デフォルトの名無しさん05/01/19 19:08:59
プログラムのコードを可視化したいのか、aに格納されたデータを可視化したいのか
0563デフォルトの名無しさん05/01/19 19:12:13
>>559
レスどもです
え〜と、プログラム走らせてるのはLinux上です
セルオートマトンのプログラムなんですが
#define M 50
#define N 50
main(){
・・・
for(i=0;i<M;i++){
for(j=0;<j<N;j++){
 printf("a[i][[j]=%d\n",a[i][j])
今はこんな感じで結果を出しているのですが
画像でだしたいなぁと思ってるのです;;
すごく見難いので
0564デフォルトの名無しさん05/01/19 19:14:15
>>563
スレ違い
0565デフォルトの名無しさん05/01/19 19:42:23
>558
doxygen使え
http://kamakura.cool.ne.jp/oppama/misc/doxygen.html
0566デフォルトの名無しさん05/01/19 20:01:19
>>563
ソースを色分けするんじゃなかったのかよorz
0567デフォルトの名無しさん05/01/19 20:01:26
質問です。

メンバが数値型変数のみで構成される構造体を初期化する場合、
memset で char 配列を初期化する方法を流用して、

memset( &abc, '\0', sizeof(abc));

こんな感じにするのは、どうなんでしょうか?
領域が 0 埋めになるわけだから、一応初期化にはなるのですが。
0568デフォルトの名無しさん05/01/19 20:11:39
>>567
かなり一般的。
確か厳密には仕様違反のはずだけど、移植性はかなり高い

0569デフォルトの名無しさん05/01/19 20:19:16
>>567
0で埋めていいのならそれで構わないが、
memset(&abc, 0, sizeof(abc));
にしとけ。
0570デフォルトの名無しさん05/01/19 20:22:23
>>547
エラーが出るという「普通の」コンパイラを教えてください
0571デフォルトの名無しさん05/01/19 20:23:22
>>567
宣言とともに初期化するなら
struct A a = { 0 };
もあり。
0572デフォルトの名無しさん05/01/19 20:56:41
使用違反なの?
ポインタ型以外はオールゼロビット=0だしC++
みたいに仮想関数とかもないPODだから別に
仕様的にも問題ないと思ってたけど
057356705/01/19 20:59:42
>>568 >>569 >>571
ありがとうございます。

char と long が混在している構造体を今まで特に気にせず
memset の初期化してましたが、気になったので。
>571 の方法は恥ずかしながら知りませんでした。

memset とか memcpy って、柔軟に使っちゃっていいんですかね?
0574デフォルトの名無しさん05/01/19 21:01:05
文字列(123.45 とか -0.123456789 とか 1.3e-9 とか)をlong doubleに
変換したいのですが、どのような方法がよいでしょうか?
057556805/01/19 21:04:44
うう・・記憶違いだった模様
規格上は問題ありませんね
>>572
ポインタ以外に浮動小数点型についてもオールビット0=0が
保障されてはいないとの事
0576デフォルトの名無しさん05/01/19 21:05:32
strtod
0577デフォルトの名無しさん05/01/19 21:06:24
>>575
なんで「との事」で終わっちゃうの?
0578デフォルトの名無しさん05/01/19 21:07:34
char *p;
p = &abc;
for(i=0;i<sizeof(abc);i++){
*(p + i) = 0;
}
0579デフォルトの名無しさん05/01/19 22:00:23
char a[3],int(2byte) b; の構造体があって、2バイトごとに管理していた場合
そういうときに>>567では a[3] へアクセスすることとなり、違反になる可能性もあるかもしれない。
0580デフォルトの名無しさん05/01/19 22:10:27
>>579
詰物にアクセスするのは違反なの?
0581デフォルトの名無しさん05/01/19 22:37:13
配列の場合は配列の要素数を一個超えたところへのアクセスに限っては
大丈夫じゃなかったっけ?
0582デフォルトの名無しさん05/01/19 22:39:23
ただし書き込みは出来ないけどな
0583デフォルトの名無しさん05/01/19 22:39:46
そんな馬鹿な。
0584デフォルトの名無しさん05/01/19 22:41:58
変数aが2の場合で、

w = a++;

って言ったら3じゃないんでしょうか?教えてください
0585デフォルトの名無しさん05/01/19 22:42:48
>>584
bは3かもしれないな
0586デフォルトの名無しさん05/01/19 22:46:54
>>584
a は 3 だな(w
0587デフォルトの名無しさん05/01/19 22:47:05
b?
0588デフォルトの名無しさん05/01/19 22:48:53
>584
やればわかる。拘置所++
0589デフォルトの名無しさん05/01/19 22:51:08
> ディフォルト

プ
0590デフォルトの名無しさん05/01/19 22:51:36
デイフォールト
0591デフォルトの名無しさん05/01/19 22:54:36
wは3じゃないんですか?どうしてwは2なんでしょうか・・・
0592デフォルトの名無しさん05/01/19 22:56:54
ディフォルート
0593デフォルトの名無しさん05/01/19 22:58:25
あと置きは後で評価するから
0594デフォルトの名無しさん05/01/19 22:59:53
>>589
世間知らず
0595デフォルトの名無しさん05/01/19 23:02:42
なるほど、てことはw = ++a;だとwは3ですね。
あとW = a>b;だとなぜ0になるんでしょうか?
0596デフォルトの名無しさん05/01/19 23:03:26
>>591
入門書に書いてる
0597ほ、ほーっ、ホアアーッ!! ホアーッ!!05/01/19 23:04:05
>>591
後置き ++ は、インクリメント前の値を返す。
w = ++a; の場合は w は 3 になる。
0598デフォルトの名無しさん05/01/19 23:04:30
>>595
お前が知的障害者だと言うことがわかった。
0599ほ、ほーっ、ホアアーッ!! ホアーッ!!05/01/19 23:05:37
>>595
a > b は、a が b より大きければ 1 を、そうでなければ 0 を返す。
w にはその結果が代入される。
0600デフォルトの名無しさん05/01/19 23:09:22
ほんまありがとう
0601デフォルトの名無しさん05/01/19 23:09:35
>>593
優先順位は=より高いのに?
0602デフォルトの名無しさん05/01/19 23:15:37
後置インクリメントと言え

変数に対して+1加算は行われるが、式の値は加算される前の値。

mov eax [ebp+i]  ; 式の値を作成
inc [EBP+i]     ; 変数を加算

というだけ。
0603デフォルトの名無しさん05/01/19 23:17:12
> 後置インクリメントと言え

やだ。
0604デフォルトの名無しさん05/01/19 23:23:31
>>602
なるほど、そーゆー世代ですか
0605デフォルトの名無しさん05/01/19 23:38:26
2行に分ければ確実。
1行増えるだけで、迷わなくて済む
0606デフォルトの名無しさん05/01/19 23:54:27
>>601
後で評価されるという言い方はおかしいね。
先に評価され、そのままの値が返る。
0607デフォルトの名無しさん05/01/20 00:01:27
>>581
アクセスはだめです。一個超えたところのポインタ値を生成するのは合法です。

char a[8];
char *p = a;

p += 8; /* 末尾より一個超えてるけど合法 */
*p; /* 参照はダメ */
0608デフォルトの名無しさん05/01/20 00:01:30
>>606
日本語やや不自由さんですか?
0609デフォルトの名無しさん05/01/20 00:03:57
> *p; /* 参照はダメ */

read 要求も write 要求もしてないのに
どんなアクセスが生じるんだ?
0610デフォルトの名無しさん05/01/20 00:07:53
*演算子禁止ってことだろ
0611デフォルトの名無しさん05/01/20 00:09:38
>>609
Cの文法において*pは、pが指しているところをcharとして評価するってことですから、
最適化などによって実際に読み出さないとか、そういうのには関係なく違法ですよ。
0612デフォルトの名無しさん05/01/20 00:15:22
>>607
while(*p++)なんてやってもいいようにそうなっているんだよな
0613デフォルトの名無しさん05/01/20 00:19:00
範囲指定を
[first, last)
にすると便利なことが多いしな
0614デフォルトの名無しさん05/01/20 00:19:38
>>608
ん?何がおかしい?
0615デフォルトの名無しさん05/01/20 00:29:52
>>612
歴史的にはそういうコードがたくさんあるから合法にした、ということのようです。
これが合法になったためにコンパイラ作ってる人が
「じゃあ配列の末尾が生成できるアドレスMAXだったらどうすんじゃいわれ!!」
と憤ってるところを見たことがありますw
0616デフォルトの名無しさん05/01/20 00:36:31
>Cの文法において*pは、pが指しているところをcharとして評価するってことです
本当?
どっかに書いてるなら教えて。
0617デフォルトの名無しさん05/01/20 00:46:18
よくエラーチェックしない人が、アドレス0付近にアクセスしてるけど、
その辺データにアクセスして危険って事あるの?
環境依存で運が悪ければ、なのかな…
0618デフォルトの名無しさん05/01/20 00:47:38
> 「じゃあ配列の末尾が生成できるアドレスMAXだったらどうすんじゃいわれ!!」

そんなところまで配列はつくれないようにする!
簡単だね。
0619デフォルトの名無しさん05/01/20 00:48:19
>>611
だから、その「評価」とは具体的に何だと聞いている
アドレスバスに出力するときの R/nW はどっちだ
0620デフォルトの名無しさん05/01/20 00:56:58
>>619
アドレスバスというのはこのスレでは扱いません
0621デフォルトの名無しさん05/01/20 01:02:05
>>620
こいつぼけ。知らないからってごまかそうとしても無駄ですよ ;-)
0622デフォルトの名無しさん05/01/20 01:02:31
>>617
危険な場合はあるよ。
もっとも、ちゃんとした環境で運がよければプログラム落ちたりするけどね。
いいかげんな環境だったり、運が悪かったりすれば何も起こらない。
0623デフォルトの名無しさん05/01/20 01:10:15
int *p;
p=(int *)malloc(sizeof(int)*3);

*(p+0) = 10
*(P+1) = 11
printf(%d %d\n",*(p+0),*(p+0));


みたいにしたとき、freeはfree(p)だけでいいの?

0624デフォルトの名無しさん05/01/20 01:12:33
いいよ
0625デフォルトの名無しさん05/01/20 01:12:38
ハイインピーという主張を期待していたのだがw
0626デフォルトの名無しさん05/01/20 01:15:13
なんか滅茶苦茶だ
int *p;
p=(int *)malloc(sizeof(int)*3);

*(p+0) = 10
*(p+1) = 11
printf(%d %d\n",*(p+0),*(p+1));

>>624
ありがとう
0627デフォルトの名無しさん05/01/20 01:31:28
>>626
>>624じゃないが、; は抜けてるし、
*(p+1) じゃなくて p[1] って書かんか?
0628デフォルトの名無しさん05/01/20 01:51:53
>>619
実装上の仕組みと、文法上の問題は切り離して考えろ。
実際にメモリ上の値から読み込んできたり、書き込んだりすることはC言語とは関係ない領域。
*p; というコードがあった場合、コンパイラが完全に無視して、アクセスは起こらない。これが実装上。
だけど文法的には、 *p というのは評価され、値「*p」をとる。だから、この時点でpが領域外を指す事は
許されない。これが文法上。
0629デフォルトの名無しさん05/01/20 02:02:18
>>618
コトはそう簡単じゃありません。配列の配置を決めるのはリンカの仕事である場合もあるわけでして。
0630デフォルトの名無しさん05/01/20 02:31:11
開発環境は Win2k、 Visual C++6.0 です。

Win32 console apprication のコーディングで、
以下のような初歩のループプログラムを記述したんですが、

while( ( c = getchar() ) != EOF ){
// 任意の処理
}

WindowsのEOFコマンドである ctrl+Z を入力しても
エンドオブファイルと認識されず、ループを抜けられません。
もちろん、UNIXの ctrl+D でもダメでした。^Zとは表示されるんですが・・・。
何か根本的に知識がないような予感がしますが、
どうにかしてEOFを返せる方法がありましたら、どうかご教示ください。
0631デフォルトの名無しさん05/01/20 02:35:45
>>630
Ctrl+Zでエンター押してるんだろうね
cはint型になってるかい?
063263005/01/20 02:51:21
>>631
一行目のご解答を見て思うところがあり、
^Z単独でエンターを押してみたところ、スルッと抜けました。
getchar関数はエンターを押すまでEOFと見なされないんだ・・・
ctrl+Zを押した直後に抜けるものかと勘違いしていました。これは恥ずかしい。

おかげさまで、問題は解決しました。どうもありがとうございました。
0633デフォルトの名無しさん05/01/20 03:00:03
int*型ににはint型のアドレスを格納することができるよな
んじゃあint*型のアドレスを格納できるint**型ってのは存在するのか?
0634デフォルトの名無しさん05/01/20 03:08:42
存在します
0635デフォルトの名無しさん05/01/20 03:36:20
ポインタポインタ続いてゆく
ポインタポインタどこまでも
0636デフォルトの名無しさん05/01/20 04:21:34
単にwarningレベルの話に過ぎない事にいつまでもうだうだ言うなよ
0637デフォルトの名無しさん05/01/20 04:25:52
>>636
お前はいつまでうだうだ言ってるんだよ
0638デフォルトの名無しさん05/01/20 04:26:47
何の話だろう?って感じなんだが
0639デフォルトの名無しさん05/01/20 04:31:06
こんな時間に・・・みんな暇なんだね
0640デフォルトの名無しさん05/01/20 04:32:37
オマエモナー
0641デフォルトの名無しさん05/01/20 04:38:35
もしかしたら、中途半端な知識の知ったか無改行君かな。
0642デフォルトの名無しさん05/01/20 04:42:47
ちなみにあちしは朝日vsNHK祭りの記事やスレを読んでました。
0643デフォルトの名無しさん05/01/20 04:46:18
朝日は結局
慰安婦問題を追及したいのか
NHKを攻撃したいのか
政府に反抗したいだけなのかよくわからん
ポイントは絞った方がいい
0644デフォルトの名無しさん05/01/20 04:58:16
ほんとに詳しい人、見てるんなら最初っから発言してよ。
中途半端な人がぐだぐだ言い出す -> 詳しい人登場
           ↑ここの部分いらないです。
0645デフォルトの名無しさん05/01/20 05:36:57
>>644
仕様です
0646デフォルトの名無しさん05/01/20 07:27:11
その仕様けずれませんかね
0647デフォルトの名無しさん05/01/20 07:47:44
struct A{
int a;
};
struct B{
struct A *AAA;
int b;
};

int WinMain(~~~){
struct B *BBB = ( struct B * )malloc( sizeof( struct B ));
B->AAA = ( struct A * )malloc( sizeof( struct A ));
free( B );
return 0;
}
のようなプログラムがあった場合、AAAの確保した領域というのは解放されますか?
0648デフォルトの名無しさん05/01/20 07:49:13
間違い
free( B ) → free( BBB )
0649デフォルトの名無しさん05/01/20 08:59:07
単純に数を数えればいい
mallocが2回でfreeが1回
つまりどこかが解放されてない
0650デフォルトの名無しさん05/01/20 10:08:59
>>647
される訳がない。
malloc()やcalloc()などで確保した領域は、
必ず明示的に解放しなければ、プロセス終了まで生き残る。
0651デフォルトの名無しさん05/01/20 10:30:32
>641
ID見ろぼけ
0652デフォルトの名無しさん05/01/20 10:48:41
質問します。
C言語のみで以下のことは可能でしょうか?
(Windows 環境下です。すなわち DOS 窓から起動します)

1.起動されたプログラムのフルパスを取得する

2.あるフォルダ内の全ファイル名を取得する

3.あるファイルのコピーを作成する


1.については、argv[0] にフルパスが渡される処理系なら、それを使えばいいような気がしますが、
もしファイル名のみの処理系の場合、どのようにしたらいいのですか?
そもそも、argv[0] を使うのはマズイですか?

2.ですが、これは system 関数で DOS の dir コマンドを実行し、それをファイルに取り、
そこから引っぱり出す、というくらいしか思いつきません。

3.は、Cにはファイル削除とリネームの関数はあるのに、なぜファイルコピーが
無いのだろう、と疑問でした。fopen と while と fget などで自力コピーするしか
方法はないのかな?


長文すみません。よろしくお願いします。
0653デフォルトの名無しさん05/01/20 11:05:53
できる
0654デフォルトの名無しさん05/01/20 11:26:31
>>652
ファイルそのものが存在しない環境もあるので、
C のみで完全に行う事は不可能。
0655デフォルトの名無しさん05/01/20 11:37:05
Windows環境って書いてあるだろ
0656デフォルトの名無しさん05/01/20 11:55:46
>>655
C のみって書いてあるだろ。
Windows API や Windows のコマンド等は、
当然のごとく C じゃないぞ。
0657デフォルトの名無しさん05/01/20 13:08:29
for(in_cnt = 0 ; in_cnt <3 ; in_cnt++)
{
while(1)
{
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);

if(in_cnt == 1)
{
if(num[in_cnt] != num[in_cnt-1])
{
break;
}
}
else if(in_cnt == 2)
{
if(num[in_cnt] != num[in_cnt-1] && num[in_cnt] !=num[in_cnt-2])
{
break;
}
}
else if(in_cnt == 0)
{
break;
}
printf("\nSorry. This is already existent number\n\n");
}
}
return 0;
}
このプログラムをもう少しコンパクとに記述するにはどうすればよいのでしょうか??
0658デフォルトの名無しさん05/01/20 13:59:31
変数を一文字にする。メッセージを短くする、かな?
0659デフォルトの名無しさん05/01/20 14:04:05
さらに、インデント、改行は使うな
0660デフォルトの名無しさん05/01/20 14:04:52
for (in_cnt = 0 ; in_cnt <3 ; in_cnt++) {
while (1) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if(in_cnt == 1) {
if(num[in_cnt] != num[in_cnt-1]) {
break;
}
} else if (in_cnt == 2) {
if(num[in_cnt] != num[in_cnt-1] && num[in_cnt] !=num[in_cnt-2]) {
break;
}
} else if (in_cnt == 0) {
break;
}
printf("\nわるいけどもうこの数字使っちゃってるから。\n");
}
}
return 0;
}
0661デフォルトの名無しさん05/01/20 14:08:50
for (in_cnt = 0 ; in_cnt <3 ; in_cnt++) {
while (1) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if(in_cnt == 1) {
if(num[in_cnt] != num[in_cnt-1])
break;
} else if (in_cnt == 2) {
if(num[in_cnt] != num[in_cnt-1] && num[in_cnt] !=num[in_cnt-2])
break;
} else if (in_cnt == 0)
break;
printf("\n既存数字不可使用\n");
}
}
return 0;
}
0662デフォルトの名無しさん05/01/20 14:10:18
論理式を否定して無駄なif,breakを削る。
in_cnt→i.
num→an.
0663デフォルトの名無しさん05/01/20 14:12:37
>659
変なこと教えるなよ
0664デフォルトの名無しさん05/01/20 14:13:50
二重ループをなんとかしろ
0665デフォルトの名無しさん05/01/20 14:14:15
次スレからはスレタイを
「Cなら俺に訊け」
に戻した方がいいよ。
あれの方が善かった。
0666デフォルトの名無しさん05/01/20 14:18:47
ifの連続を&&と||で連結した後、forを展開し、添字の式を簡略化した上でルーチンを一般化し、再びループに直す
0667デフォルトの名無しさん05/01/20 14:23:41
ネタはさておきこんなもんかね。
for(in_cnt = 0 ; in_cnt <3 ; in_cnt++) {
while(1) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
switch (in_cnt) {
case 2:
if (num[in_cnt] == num[in_cnt - 2]) {
continue;
}
case 1:
if (num[in_cnt] == num[in_cnt - 1]) {
continue;
}
case 0:
goto OutOfWhile;
}
printf("\nSorry. This is already existent number\n\n");
}
OutOfWhile:
}
0668デフォルトの名無しさん05/01/20 14:28:24
>>652

1.
C:\>debug \winnt\system32\winver.exe
-d80,9f
2CE3:0080 00 0D 5C 77 69 6E 6E 74-5C 73 79 73 74 65 6D 33 ..\winnt\system3
2CE3:0090 32 5C 77 69 6E 76 65 72-2E 65 78 65 0D 20 6F 66 2\winver.exe. of
-q


2.と3.は
DOSのシステムコール使えばよい
(system()じゃなくてINT21の方ね)
0669デフォルトの名無しさん05/01/20 14:32:10
>>664 
for( in_cnt = 0; in_cnt < 3; )
{
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);
if( in_cnt == 2 && num[in_cnt] != num[in_cnt-1] && num[in_cnt] != num[in_cnt-2])
in_cnt++;
else if( in_cnt == 1 && num[in_cnt] != num[in_cnt-1])
in_cnt++;
else if( in_cnt == 0)
in_cnt++;
else
printf("\nSorry. This is already existent number\n\n");
}
return 0;
0670デフォルトの名無しさん05/01/20 15:01:34
>>668
C のみじゃないじゃん。
0671デフォルトの名無しさん05/01/20 15:03:04
#define a printf("#%d",in_cnt);scanf("%d",num[in_cnt]);
#define b(j,k) p[k]==p[j]||(puts("err"),goto
int*p=num;a
e:a b(0,1) e);
f:a b(0,2) f);b(1,2) f);
return 0;
0672デフォルトの名無しさん05/01/20 15:03:14
そうだね、反則だね、レッドカードだね。
067365205/01/20 15:05:06
>>668
ありがとうございます。
1はつまりバイナリでオープンして、パスがあるところを読み出せ、ということですね。
2と3はやはり INT21 ですか、うーむ。共用体 AX とか AL に設定してコール、っていう
あれですね。
ファイルコピーは自力でもいいとして、フォルダ内ファイル一覧取得については、
C++ の勉強を兼ねてクラスとして作ってみようと思います(>652 に書いたやり方で)
0674デフォルトの名無しさん05/01/20 15:05:31
>671
++を忘れてたorz
067565705/01/20 15:13:59
みなさんありがとうございます。
感謝します。
0676デフォルトの名無しさん05/01/20 15:14:00
>>657
超大人気だな!!!
0677デフォルトの名無しさん05/01/20 19:24:18
while(in_cnt<=3) {
printf("input number%d: ",in_cnt);
scanf("%d",&num[in_cnt]);

for(i = 0 :i <=int_cnt;i++){
if(num[in_cnt] == num[i]){
printf("\nSorry. This is already existent number\n\n");
continue;
}
}
int_cnt++;
}

あかん?
0678デフォルトの名無しさん05/01/20 19:32:40
遅いし、:と;間違い
0679デフォルトの名無しさん05/01/20 19:56:58
こういうのになったとたん書き込みが増えるな
0680デフォルトの名無しさん05/01/20 20:17:10
>>628
俺べつに実装上の仕組みの話なんかしてないぜ
アドレスバスという用語に気を取られてしどろもどろな発言すると恥の上塗りだぞ
読めとも書けとも言ってないのに何をどう「コンパイラが完全に無視」するって言うんだよ
ちょっとヒントやるからよく考えて答えろな
0;
0681デフォルトの名無しさん05/01/20 20:32:58
ポインタ=アドレスと勘違いしてるやつが多いな。
0682デフォルトの名無しさん05/01/20 20:41:01
>>657
{と}の数合ってますか?
0683デフォルトの名無しさん05/01/20 21:05:18
>>681
え?
違うの?
0684デフォルトの名無しさん05/01/20 21:08:00
>>680
おまえバカか?無視って言葉の意味わからないの? *p; ってのがまったく相手にされないってことだよ?
そのヒントとやらも言語上は評価されるんだよ?わかる?
0685デフォルトの名無しさん05/01/20 21:12:37
ポインタとポインタ変数を混同してる奴が多いな。
0686デフォルトの名無しさん05/01/20 21:13:41
>>628によると 評価する!=読み書きする と言っていて、
>>680によると 評価する==読み書きする って言ってるわけですよね。
結局どっちが正しいんですか?
0687デフォルトの名無しさん05/01/20 21:16:42
>686
マニュアル見て自分で判断
0688デフォルトの名無しさん05/01/20 21:20:49
>>684
りんご
0689デフォルトの名無しさん05/01/20 21:23:16
>>687
わからないんで教えてください
0690デフォルトの名無しさん05/01/20 21:25:43
void ってコンパイラの中では *(NULL *)で定義されてるんだっけ?
0691デフォルトの名無しさん05/01/20 21:26:20
違った

NULL ってコンパイラの中では *(void 0)で定義されてるんだっけ?
0692デフォルトの名無しさん05/01/20 21:27:17
NULL は stdio.h の中で、((void *)0) と定義されています

http://www1.cts.ne.jp/~clab/hsample/File/File01/File01.html
069362805/01/20 21:31:34
アドレスバスに出力とか言い出したのお前さんじゃないか。
そういうこと言い出した時点で実装の話になっちゃうんだっての。
0694デフォルトの名無しさん05/01/20 21:33:32
>>693
>>680
069562805/01/20 21:36:13
>>694
メール欄の意味がわからんので、教えてくれ。レスを無視すればいいのか?
0696デフォルトの名無しさん05/01/20 21:37:32
>686
文法の評価と式の評価の混同。最適化されると無視されるかも知れない。完全にコンパイラとプリプロセサの状態に依存する。
「遊んでないで仕事しろ!」
0697デフォルトの名無しさん05/01/20 21:39:34
>>695
>>695

>>696
シンタックスとセマンティクスを一緒にしてるのはオマエだ
0698デフォルトの名無しさん05/01/20 21:40:23
パーサ書いてるつもりでコードジェネレータ作るタイプな
0699デフォルトの名無しさん05/01/20 21:45:31
>>696
なんかよくわからないです。コンパイラとプリプロセッサってことは実装に依存するってことですか?
0700デフォルトの名無しさん05/01/20 21:49:08
>699
何が?
0701デフォルトの名無しさん05/01/20 21:50:51
おまえらキモヲタばかりだなwww
0702デフォルトの名無しさん05/01/20 21:53:45
>>700
よくわからないんでやっぱり取り消してください。わからないなりに考えると
>>607は、アクセスが起こるかどうかはやってみないとわからないけど、評価はされるってことですか?
0703デフォルトの名無しさん05/01/20 21:55:32
>702
何が評価?
0704デフォルトの名無しさん05/01/20 21:56:34
*p; って部分です
0705デフォルトの名無しさん05/01/20 22:00:19
>704
その部分の値か?それとも式か?
0706デフォルトの名無しさん05/01/20 22:03:43
式とされた結果、値が出てくるんじゃないですか?
ひょっとして勘違いしてますかね?
0707デフォルトの名無しさん05/01/20 22:07:21
>704
その式に副作用はあるのか
0708デフォルトの名無しさん05/01/20 22:10:19
ないと思います
0709デフォルトの名無しさん05/01/20 22:16:27
なんかわかってきたような気がします。 while(1); とか書けますよね。
ということは、1は式としてみなされてるってことですよね。
ということは、 1; ってのは、 a=1; とかと同じように式とされるってことですか?
0710デフォルトの名無しさん05/01/20 22:19:59

いまどきC言語なんかできても自慢になりません。
プログラマ?(ププ…って時代だしw
俺はSE。おまいらから見れば超上級職だろうなw

0711デフォルトの名無しさん05/01/20 22:42:56
>1; ってのは、 a=1; とかと同じように式とされるってことですか?

式ってとこはあってるが、動詞の有無は違う
0712デフォルトの名無しさん05/01/20 22:44:16
>>710
あなたは、その実態が「単価が高くて使いにくいプログラマ」だったりするSEなんですね?(Y/y)
0713デフォルトの名無しさん05/01/20 22:46:00
>>712
× 使いにくい
○ 機能しない
0714デフォルトの名無しさん05/01/20 22:47:48
>>710
お前が超上級職であるSEだという証拠を見せろ。
0715デフォルトの名無しさん05/01/20 22:48:36
while(1.0); とか書けますか
0716デフォルトの名無しさん05/01/20 22:50:44
ぬ る ぽ
0717デフォルトの名無しさん05/01/20 22:52:43
で、結局だれが正しいんだ
0718デフォルトの名無しさん05/01/20 22:53:01
typedef struct {
    void* p;
} NullPointerException;

C99でもこんな構造体ないの?
0719デフォルトの名無しさん05/01/20 22:58:15
>>718
ないガッ?
0720デフォルトの名無しさん05/01/20 22:59:16
>>715
while (1,0);  ならOK。
0721デフォルトの名無しさん05/01/20 23:03:03
>>710
雑用係はマ板へ。
0722デフォルトの名無しさん05/01/20 23:10:46
SEも同程度に負け組
0723デフォルトの名無しさん05/01/20 23:19:07
IT自体が負け(プギャヒャラ
0724デフォルトの名無しさん05/01/20 23:21:48
>>723
勝ち組のつもりでこの世界に入るアフォは痛杉
しょせんベンチャー
鉄くず泥棒どもは開き直ってなんぼだよ
0725デフォルトの名無しさん05/01/20 23:23:07
なんでみんな>>910に釣られてるの?低レベルだから?

>>607はまず実行結果をここに貼り付けてみろ
オマエの画面はどうなってる?
0726デフォルトの名無しさん05/01/20 23:25:42
所詮日本は文系の社会

実力のある奴はみんな米国だよ
0727デフォルトの名無しさん05/01/20 23:29:03
>>910の責任がいやが上にも高まった
0728デフォルトの名無しさん05/01/20 23:30:24
二桁最後のスレなんだからマターリしろ
0729デフォルトの名無しさん05/01/20 23:38:31
勝ちとか負けとか、んなことバッカいってるショウもない奴は
ママのおっぱいでもしゃぶってろ
0730デフォルトの名無しさん05/01/20 23:40:21
>>729
ママのおっぱいしゃぶりながら言わないでくれ
0731デフォルトの名無しさん05/01/20 23:41:43
うわ、キモッ・・・
0732デフォルトの名無しさん05/01/20 23:50:22
char cycleno[10]    = "1234567890";

if (strlen(cycleno) > sizeof(cycleno)) {        
        printf("strlen(cycleno) %d\n",strlen(cycleno));
        printf("sizeof(cycleno) %d\n",sizeof(cycleno));
        printf("cycleno %s\n",cycleno);
}

/********* 出力 *********/
strlen(cycleno) 16
sizeof(cycleno) 10
cycleno 1234567890慎


質問です。
上記の様に、strlen()で末尾にNULL文字の無い文字列を調べた時
訳分からん値が返ってくる件についてなんすが
これってNULL文字が検出されるまで
メモリ内の無関係な隣りの領域まで読み込んでるって解釈でよいのですか
また、%s出力に関しても同義ですか

あと、上記の解釈で正しいとすれば、仮にNULL文字がたまたまずっと
検出されなかったとすると、永久に読み込みが走るのですか





0733デフォルトの名無しさん05/01/20 23:51:41
>>732
その前にアクセス違反で落ちる
0734デフォルトの名無しさん05/01/20 23:54:23
>>733
会社のHP-UXと自宅のRedHatは落ちなかったとですよ
0735デフォルトの名無しさん05/01/20 23:55:18
> 俺はSE。おまいらから見れば超上級職だろうな

...
0736デフォルトの名無しさん05/01/20 23:57:37
> メモリ内の無関係な隣りの領域まで読み込んでるって解釈でよいのですか

そんなに疑問なら、
cycleno[0]
cycleno[1]
cycleno[2]
...
cycleno[9]
cycleno[10]
...
cycleno[14]
cycleno[15]
cycleno[16]
を出力してみればいいだろうに。
頭悪いなあ。
0737デフォルトの名無しさん05/01/21 00:03:43
で、本人は>>736のを試してみたか?

どうなった?
073873205/01/21 00:08:11
for (i=0; i < strlen(cycleno); i++) {
        printf(" %c, ",cycleno[i]);
}

/******* 実行結果 **********/
1,  2,  3,  4,  5,  6,  7,  8,  9,  0,  ,  B,  F,  ,  , ,


>>736-737
やってみた。
ら、なおさらわかんなくなりました。
間にちらほらNULL文字っぽいの入っとる。

0739デフォルトの名無しさん05/01/21 00:12:08
>>738
%2x にしてみれ
0740デフォルトの名無しさん05/01/21 00:21:02
で、本人は>>739のを試してみたか?

どうなった?
074173205/01/21 00:22:50
for (i=0; i <= strlen(cycleno); i++) {
    printf("%2x, ",cycleno[i]);
}

31, 32, 33, 34, 35, 36, 37, 38, 39, 30,  1, 42, 46, ffffff83,  4,  8,  0,

>>739-740
NULL文字かと思ったら別の制御文字だったです。
やっぱ隣りの無関係領域の'\0'出るまで読み込みでビンゴだったようです。
どうもありがとうです。

つまり
終端がNULL文字でない文字列にstrlenや%sをかけるのは不正アクセスを
引き起こすので普通やっちゃいけない、
・・・って結論でよいですかね ´∀`
0742デフォルトの名無しさん05/01/21 00:25:18
くだらん質問○投げスンナ
0743デフォルトの名無しさん05/01/21 00:25:34
>>741
OK
0744デフォルトの名無しさん05/01/21 00:26:39
たったこの程度のこと理解するのにどれだけ
時間かかってんだよ
0745デフォルトの名無しさん05/01/21 00:29:21
人生こんなもんだ
0746デフォルトの名無しさん05/01/21 00:36:52
> printf("%c,",cycleno[i]);


ぼけ %c でやって見えるわけねーだろ! ぼけ
%02 が常識 > ぼけ

さっさと> printf("%02x,",cycleno[i] & 0xff); しろ
0747デフォルトの名無しさん05/01/21 00:37:36
おまえぼけか?

> 終端がNULL文字でない文字列にstrlenや%sをかけるのは不正アクセスを
> 引き起こすので普通やっちゃいけない、

strlenして、何を得たいわけ?
0748デフォルトの名無しさん05/01/21 00:45:59
>>747
今まで気づかなかったおまえが一番ボケ
0749デフォルトの名無しさん05/01/21 00:52:27
別のスレッドで個人的に面白いのあったんだけど、他の言語分からないのでこれをC言語に直してください。

http://pc5.2ch.net/test/read.cgi/tech/1090227743/550
http://pc5.2ch.net/test/read.cgi/tech/1090227743/558

よろしくです。
0750デフォルトの名無しさん05/01/21 02:01:05
int main(int argc, char **argv)
{

日下部先生


}
0751デフォルトの名無しさん05/01/21 08:07:43
せっかくここ3年ほどよりつかなくなったのに、呼ぶんじゃねーよ!
0752デフォルトの名無しさん05/01/21 08:40:21
グーグルの検索後のURLみたいに%12%34...となっているようなのを表示したいんですけど、printfで普通に表示しようとしても数字に置き換えられてしまいます
何とか表示する方法はないでしょうか?
0753デフォルトの名無しさん05/01/21 08:54:32
>752
sscanf(buf,"%%%02x",&c)
0754デフォルトの名無しさん05/01/21 08:56:45
buf2[i++]=c;
0755デフォルトの名無しさん05/01/21 08:57:55
printf("%s\n",buf2);
0756デフォルトの名無しさん05/01/21 09:13:51
#include <stdio.h>
int main(){
char string[] = "日本語?";
int i = 0;
while (string[i]!='\0') printf("%%%02X", 0xff & string[i++]);
return 0;
}
0757デフォルトの名無しさん05/01/21 15:21:31
ランダムでファイルから一行ぬきだすのって
どうやるんですか?教えてください
0758デフォルトの名無しさん05/01/21 15:23:53
rand()でどれか一行選べばいい
0759デフォルトの名無しさん05/01/21 15:42:58
カレントディレクトリに指定した名前のファイルが存在するか調べてくれるような関数はありますか?
0760デフォルトの名無しさん05/01/21 15:47:32
>>759
環境依存。標準関数ではない。
076175905/01/21 15:53:52
>>760
そうですか・・・・。
例えばWindowsならどんな関数がありますか?
0762デフォルトの名無しさん05/01/21 15:55:16
>>761
Windowsは知らん。ググれば解かると思うが。
076375905/01/21 15:55:44
>>762
分かりました。
0764デフォルトの名無しさん05/01/21 15:58:50
すみません質問の仕方が不適切でした
タイピングもどきを作ってるんですけど、ファイルから
ランダムに一行ぬいて、キーボードでうちこんで、strcmpで正誤判定
ってのを作ってて、ファイルを上から読んでいく事はできたんですけど
rand()って0〜指定した数字までをランダムに指定するってものですよね?
これをどう用いればファイルからの抜き出しができるんですか?
初心者なものでお願いします
0765デフォルトの名無しさん05/01/21 16:02:38
>>759
一般的に、stat()は割りと環境を問わずあると思う。
また、読めることを以って存在すると仮定していいのなら、fopen()してみればいい。
0766デフォルトの名無しさん05/01/21 16:05:18
>>764
一旦、メモリに読み込むのが常套手段かと。
076775905/01/21 16:06:26
>>765
ありがとうございます。
調べてみます。
0768デフォルトの名無しさん05/01/21 16:08:00
>>764

char** str;
str=(char**)malloc(〜…

行番号=(int)((double)行数*((double)rand()/RAND_MAX));
printf("%s",str[行番号]);//なんなりと
0769デフォルトの名無しさん05/01/21 16:17:28
引数って何でつか?
0770デフォルトの名無しさん05/01/21 16:25:22
void mian(void)
の括弧の中へvoidをなぜ書かなきゃならんとでつか?
0771デフォルトの名無しさん05/01/21 16:28:25
>>770
main(void)は引数がないことを意味し、
main()だと引数は不定だということを意味する。
ちなみにC++だと共に前者の意味になる。
0772デフォルトの名無しさん05/01/21 16:29:12
なあんだ、誰も応えられないんでつね
0773デフォルトの名無しさん05/01/21 16:32:49
>>771
サンクスコ。
voidを明記しないと不貞の浮気者になるんでつね。
0774デフォルトの名無しさん05/01/21 16:57:29
善意に甘えるついでにさらに質問させてもらいまつ。

プロトタイプ宣言で
void function(void)
と宣言していても、下のほうでvoidを記述しなくてもいいんでつか?
void funtion()
{
printf("ほにゃらら");
}
こんな感じで。
0775デフォルトの名無しさん05/01/21 17:17:28
>>774
OK。2つは合成される。
ところでmain関数の戻り値はintが正しい。
0776デフォルトの名無しさん05/01/21 17:32:38
>>775
そうでなくてはいけないわけでもないけれど、その方がいろんな面で有益。
0777デフォルトの名無しさん05/01/21 17:39:18
うんとね、setMessage(String s)と書いとけば、
後はmainメソッドに書いてるように
method1.setMessage("ええんか");のように
括弧の中に具体的な値を好きなようにかけるんですよね?
0778デフォルトの名無しさん05/01/21 17:39:48
>>775-776
ありがとさん。

プロトタイプ宣言でvoidを書いておけば
下のほうで書かなくてもいいんでつね。

で775のmainの戻り値をintでってのはなぜでつか?
0779デフォルトの名無しさん05/01/21 17:52:46
終了コードも知らんのか。いやはや世も末だ
0780デフォルトの名無しさん05/01/21 18:51:19
余談だけど、ファーム系だと void main() だったりすることもあったりする。
0781デフォルトの名無しさん05/01/21 20:00:11
>>780
それはシェル使わんし、Mainを終わることは電源切るときだけだから。
0782デフォルトの名無しさん05/01/21 20:02:38
>>781
馬鹿はすっこんでろ
0783デフォルトの名無しさん05/01/21 20:09:20
782:デフォルトの名無しさん:05/01/21 20:02:38
>>781
馬鹿はすっこんでろ
0784デフォルトの名無しさん05/01/21 20:13:11
なんかまた始まったな。読んだことないやつはC99の5.1.2.2.3でも読んどけ。
0785デフォルトの名無しさん05/01/21 20:14:37
>>784
リンクぐらい張っとけ。
0786デフォルトの名無しさん05/01/21 20:16:25
だな、そこまでググル気にもならんし
0787デフォルトの名無しさん05/01/21 20:23:53
http://www.cs.jhu.edu/~xentar/n869.html
0788デフォルトの名無しさん05/01/21 20:44:37
質問です。
2つ以上のソースファイルからなるプログラムで、異なるソースファイルで同じ関数名や変数名を使っても
大丈夫な方法ってありますか?
どうしてもエラーになってしまうのですが・・・。
0789デフォルトの名無しさん05/01/21 20:45:11
同じ関数名や変数名を使わなければいい。
0790デフォルトの名無しさん05/01/21 20:45:38
781 名前:デフォルトの名無しさん[sage] 投稿日:05/01/21 20:00:11
>>780
それはシェル使わんし、Mainを終わることは電源切るときだけだから。
0791デフォルトの名無しさん05/01/21 20:46:57
main関数の戻り値はintが正しい。
0792デフォルトの名無しさん05/01/21 20:47:47
>>788
全部大文字にするとか?
0793デフォルトの名無しさん05/01/21 20:48:11
Mが大文字なのは、ファームだから?
0794デフォルトの名無しさん05/01/21 20:48:42
>>788
static
0795デフォルトの名無しさん05/01/21 20:49:08
CでCGIの勉強をしようと思っているのですが、
#include<stdio.h>
int main()
{
printf("Content-type:text/html\n\n");
printf("<HTML>\n");
printf("<HEAD>\n");
printf("<TITLE>cgi01</TITLE>\n");
printf("</HEAD>\n");
printf("<BODY>\n");
printf("TEST\n");
printf("</BODY>\n");
printf("</HTML>\n");

return 0;
}
このソースをVisualC++でコンパイルし、拡張子を.cgiに変えてUP、パーミッションを変更しました。
そしてアクセスすると何故かCGIWrap Error: Script Execution Failedと表示され実行できません。
なぜですか?
0796デフォルトの名無しさん05/01/21 20:49:55
>>788
オブジェクトのシンボルテーブル弄ればいけるんじゃない?
0797デフォルトの名無しさん05/01/21 20:50:58
>>795
exeに変えとけ。
0798デフォルトの名無しさん05/01/21 20:51:15
>>788
関数名衝突させるなよ
0799デフォルトの名無しさん05/01/21 20:53:19
>>793
リンカーのため、つい、mainはデバッグ用、Mainは商用と分けてる
080078805/01/21 21:01:46
>>794
有難う御座いました、解決しました!
本当に助かりました。
080179405/01/21 21:16:28
>>800
一番の解決方法は、名前を分ける事なのだが、
それをしない理由はなんだ?
0802デフォルトの名無しさん05/01/21 23:00:22


名前と入力番号の降順を自作関数で処理するプログラムを作ったのですが、
名前の降順がうまくいきません。

void sort_data(struct person *pdata,int i_cnt)
{
int cnt1;
int cnt2;
int temp;
char temp2[STRING_SIZE];
for(cnt1 = 0 ; cnt1 < i_cnt ; cnt1++)
{
for(cnt2 = cnt1+1 ; cnt2 < i_cnt+1 ; cnt2++)
{
if((pdata+cnt1)->point < (pdata+cnt2)->point)
{
temp =(pdata+cnt1)->point;
temp2[0] =(pdata+cnt1)->name[STRING_SIZE];
(pdata+cnt1)->point = (pdata+cnt2)->point;
(pdata+cnt1)->name[0] = (pdata+cnt2)->name[STRING_SIZE];
(pdata+cnt2)->point = temp;
(pdata+cnt2)->name[0] = temp2[STRING_SIZE];
}
}
}
}
どこを修正すればうまく処理されるのでしょうか??
0803デフォルトの名無しさん05/01/21 23:38:06
if((pdata+cnt1)->point < (pdata+cnt2)->point)
{
 struct person temp;
 temp = pdata[cnt1];
 pdata[cnt1] = pdata[cnt2];
 pdata[cnt2] = temp;
}

ソートキーは番号ですか名前ですか。
文字列の比較には strcmp() を使います。
文字列のコピーには strcpy() を使います。
0804デフォルトの名無しさん05/01/22 00:34:44
>>803
そんなCがだぁいすきv(^-^=)
080571005/01/22 00:42:23
>>712
まあ、確かに俺は単価の高いSEだな。
毎日9時-17時で退社。月給手取りで約60万。
「単価が安くて使えるプログラマ」なおまいらは毎日深夜まで残業…。
でも手取りで30も貰えてないだろ(プ…かわいそうにwww
0806デフォルトの名無しさん05/01/22 00:50:38
参考書でvoid main()を見かけることの何と多いことか。。。
大学の講義ページでも堂々と使ってるの見たよ。
0807デフォルトの名無しさん05/01/22 00:51:08
30円くらいはもらえるよ。
0808デフォルトの名無しさん05/01/22 00:56:50
>>806
よくない、ほんとよくない、講義ですね。
0809デフォルトの名無しさん05/01/22 00:57:34
>>806
よくない本と、よくない講義ですね。
0810デフォルトの名無しさん05/01/22 03:57:55
精度がよく実行速度がはやい積分方法で、おすすめのありませんか?
0811デフォルトの名無しさん05/01/22 04:42:33
>>810
ニュートン法でいいじゃん
0812デフォルトの名無しさん05/01/22 04:51:25
>>811
適当な事言ってんじゃねーよバカ。
081381005/01/22 05:27:03
>>811
しらないなら別にいいよ
0814デフォルトの名無しさん05/01/22 05:32:32
積み上げ法がいいと思うよ
0815デフォルトの名無しさん05/01/22 08:32:30
ともかくスレちがい
0816デフォルトの名無しさん05/01/22 11:29:23
>>809
耳従ってない青二才の典型
1つ気になることがあると
そこに気を取られるばかりで話に入れない
結果として自分と大差ない人からだけ聞いた
偏った知識のまま大成することなく歳を取る
筋の悪い「素材」だ
081781005/01/22 11:51:10
>>815
あんたには聞いてないから
0818デフォルトの名無しさん05/01/22 11:51:48
>>816
君の言っている事は全く理にかなっていないよ。
単なる経験則でしょ。
無意味な自己満足のレス付けて楽しい??

>>806はただ参考書や講義で使われているのを良くみると書いているだけで、
そう書くことの利点については全く言及していない。
081980205/01/22 12:22:17
>>804
大変参考になります。
ありがとうございます。

それとソートキーは番号です。

0820デフォルトの名無しさん05/01/22 12:25:28
> 大学の講義ページでも堂々と使ってるの見たよ。

よくみたらJavaの講義だった...っていうオチでは?
0821デフォルトの名無しさん05/01/22 12:26:58
>>818
アンカーもロクに読めてないようだな
0822デフォルトの名無しさん05/01/22 12:29:59
> 月給手取りで約60万。

やす,,,。ってそれ自慢できる収入かぁ?
0823デフォルトの名無しさん05/01/22 12:37:50
年齢による
0824デフォルトの名無しさん05/01/22 12:40:25
そかなあ。20台後半でそれだったら、すくなすぎだぞ
0825デフォルトの名無しさん05/01/22 12:41:51
>>821
まず、根本的に、君は文を読んでいないし、議論にもなっていない。

# どうせ釣りだのなんだのと言いたいのだろうが、こっちは釣られても全然恥だとは
# 思っていないし、必死だといわれても恥とは思わない。
0826デフォルトの名無しさん05/01/22 12:42:19
地域にもよるな
田舎で60なら自慢できるだろwww
0827デフォルトの名無しさん05/01/22 12:43:14
おまえら、給料のこと書くんだったらマ板池。糞共
0828デフォルトの名無しさん05/01/22 12:46:02
ふゆのそなた
0829デフォルトの名無しさん05/01/22 12:49:53
>>825
では聞くが void main() という断片から、大学や講義の何がわかるんだ?
君ならちゃんと「理にかなった」説明ができるなら拝聴しようか。
0830デフォルトの名無しさん05/01/22 12:59:59
>>829
決まっているだろ。
void main()という書き方をしたという事実だよ。
サンプルでそう書いたのだから、推奨したということだろう。

ところで、>>809は私ではない。
0831デフォルトの名無しさん05/01/22 13:00:12
Javaの講義では
int main だったりして
0832デフォルトの名無しさん05/01/22 13:01:18
> では聞くが void main() という断片から、大学や講義の何がわかるんだ

その講義が「だめだめ」だということだな。
hello, worldを出力して改行するサンプルで、バックスラッシュじゃなくて、円記号で
ホワイトボードに書くような講義もだめだめ
0833デフォルトの名無しさん05/01/22 13:06:55
円記号なんて使わないだろ。普通。
0834デフォルトの名無しさん05/01/22 13:07:26
>>830
うまく逃げたな
こっちも深追いする理由は特にない

>>832
説得力ゼロだな
観測事実と結論が何ら関連づけられていないばかりか
結論に使っている独自の用語を定義していない
0835デフォルトの名無しさん05/01/22 13:08:14
>>834
あはは あほだー
0836デフォルトの名無しさん05/01/22 13:09:30
おこちゃまはお外で遊んでおいで
0837デフォルトの名無しさん05/01/22 13:11:34
> 円記号なんて使わないだろ。普通。

だよねえ。ふつう (まっとうな大学なら)

なのに使って、さらにその表記にnをつづけたもの(ようするに改行)を「えんえぬ」とか
口頭で読んでる講師って、どうだ? (実在する)
0838デフォルトの名無しさん05/01/22 13:12:56
>>837
若くて美人できょにゅうならゆるす!
0839デフォルトの名無しさん05/01/22 13:13:59
確かに美人なら許せるな。
0840デフォルトの名無しさん05/01/22 13:14:25
>>838

虚乳でむさいおやじです。どうする?
0841デフォルトの名無しさん05/01/22 13:14:37
ヌッコロ
0842デフォルトの名無しさん05/01/22 13:16:23
技術系で若くて美人なんているか?
0843デフォルトの名無しさん05/01/22 13:17:19
大学にいなさそう > 技術系で若くて美人なんているか?

でも、以前話題にでてた「えんえぬ」先生は、
専門学校で若くて美人だったはず
0844デフォルトの名無しさん05/01/22 13:19:07
>>843
たしか日下部が教えた専門学校の学生が書いてたんじゃなかったっけ
で、CじゃなくてJavaの講師だったはず > えんえぬと読むけど美人
0845デフォルトの名無しさん05/01/22 13:20:36
> 技術系で若くて美人なんているか

大学の講師とかではいないだそうが(みたことない!)、
現場ではけっこうみかける(ときどき)。
少なくともここ九州北部のH系の会社では
1人は (っていうか、この1人で10人分ぐらい美人なのだが!) いる
0846デフォルトの名無しさん05/01/22 13:21:11
>>844
VBだったら最高だったのにな(えんえぬはないけど)
0847デフォルトの名無しさん05/01/22 13:21:59
> 参考書でvoid main()を見かけることの何と多いことか。。。

そんなだめ本はむしろ少ない (って、まあ全体の1/3以下だっていうだけのことで、1/100以下だって
いうわけではない)

まともな本使えばいいだけでは?
0848デフォルトの名無しさん05/01/22 13:22:44
>>847
たとえばどんな本だ?
0849デフォルトの名無しさん05/01/22 13:23:21
読んで分かるC言語プログラミング
0850デフォルトの名無しさん05/01/22 13:30:32
たしかに「void main()」とかは「絶対」かいてなさそうな
著者を、少なくとも1人は知ってるな ;-)
0851デフォルトの名無しさん05/01/22 13:31:04
>>850
誰だよ?
0852デフォルトの名無しさん05/01/22 13:31:34
returnに括弧をつけちゃう著者も ;-)
0853デフォルトの名無しさん05/01/22 13:31:41
>>846
VBなど今どき専門学校でおしえるかよ ぼけ
あったらよほどだめな学校だ。
0854デフォルトの名無しさん05/01/22 13:34:24
>>851
voidさん
0855デフォルトの名無しさん05/01/22 13:34:32
>>837
>口頭で読んでる講師って、どうだ? (実在する)

実際に会って確認するしかねえだろ
そんなこともわからん奴らしいぼけ発言だな
0856デフォルトの名無しさん05/01/22 13:35:29
ところでみんなはindentは-krそれとも-gnu?
0857デフォルトの名無しさん05/01/22 13:36:02
> 実際に会って確認するしかねえだろ

意味不明。なにを確認するんだか
0858デフォルトの名無しさん05/01/22 13:36:44
>>857
顔に決まっているだろ。
0859デフォルトの名無しさん05/01/22 13:38:33
>>857
それは 837 に聞いてくれ
0860デフォルトの名無しさん05/01/22 13:46:02
わたしはだんぜん-krだな
0861デフォルトの名無しさん05/01/22 13:47:22
勝手にインデントするな。
0862デフォルトの名無しさん05/01/22 13:51:01
インデントみたいなプロトコルを1つしかサポートできないことを自慢するアフォが多いな
0863デフォルトの名無しさん05/01/22 14:29:17
インデントってプロトコルか?
0864デフォルトの名無しさん05/01/22 14:55:11
GNU indentのタブ幅設定は-ts3だよな?
0865デフォルトの名無しさん05/01/22 15:40:41
>>845
技術系で若くて美人がいたが糞に蠅がたかる状態だった。
おぼっちゃんがゲットしました。
0866デフォルトの名無しさん05/01/22 15:42:16
それはつまり

糞=若くて美人
蠅=そこらの男

ってことか?
0867デフォルトの名無しさん05/01/22 15:46:31
-gnuは醜すぎ
はよなくなれ
0868デフォルトの名無しさん05/01/22 16:19:24
>>863
プロトコルは元来人間同士の儀礼
マシン間の通信規約を指さなくとも何ら問題はない
0869デフォルトの名無しさん05/01/22 16:43:28
とっても単純な質問なのですが、
#include<stdio.h>
int main(void)
{
int num;
printf("input : ");
scanf("\n%d",&num);

printf("\n%d",num);

return 0; /*正常終了 */
}
このプログラムでは実数値を入力しても、整数値が出力されます。
実数値を出力するにはどこを修正すればいいのでしょうか。
0870デフォルトの名無しさん05/01/22 16:53:29
>869
printfとscanfをヘルプで見ろ
0871デフォルトの名無しさん05/01/22 17:01:44
>>869

>>871をヘルプで見ろ
#include<stdio.h> 
int main(void) 
{ 
    double num;
    printf("input : ");
    scanf("%lf", &num);
    printf("%d\n", num);
    return 0;
}
0872デフォルトの名無しさん05/01/22 17:04:10

質問です。

void main()
{
char* aaa;
scanf("%d",&aaa);

if (aaa == "abc")
     printf("OK\n");
else
printf("NO\n");

return;
}

このプログラムで入力文字が"abc"だったらOKと表示させたいんですが、
abcと入力してもONを表示されてしまいます。
どうしたらいいでしょうか?

それともif文は文字列判定はできないのでしょうか?

どうかよろしくお願いいたします
0873デフォルトの名無しさん05/01/22 17:09:19
>>872
そのコードはポインタを比較しています。
ポインタが指している文字列を比較しているのではありません。
0874デフォルトの名無しさん05/01/22 17:09:27
>>872
#include <stdio.h>
#include <string.h>
int main(void) {
    char buf[256]; 
    if (scanf("%256s", buf) != 1) return 1;
    if (strcmp(buf, "abc") == 0) puts("OK");
    else puts("NO");
    return 0;
}
0875デフォルトの名無しさん05/01/22 17:10:21
>>872
void mainじゃなくてint mainな.

if文は文字列判定できないっていうより,Cの==演算子は文字列には適用できない.
JavaとかC++ならクラスを使ってできるんだけどね.
だからstring.hにあるstrcmpってやつを使う.
ぐぐったら出てくるから調べてみ.
0876デフォルトの名無しさん05/01/22 17:16:23
>>873
>>874
>>875
ご教授ありがとうございます。
ちょっとした謎が解けました。
ありがとうございました。
0877デフォルトの名無しさん05/01/22 17:22:33
>>872
それより今きづいたが,
scanf("%d",&aaa); はまずい気がする.
scanf("%s",aaa);にしとけ.
上のままだと,たぶんヌル文字が入らないと思うけど.
教えてエロい人!
0878デフォルトの名無しさん05/01/22 17:33:14
strcpy(fname, argv[1]);
len = strlen(fname);
if((fname[len - 1] == ".") && (fname[len] == "c")) //ここでwarning

fnameの最後に".c"がついてるかどうかを知りたいのですが
if((fname[len - 1] == ".") && (fname[len] == "c"))のところで
ポインタに関してのwarningがでます。何が間違っているのでしょうか。
0879デフォルトの名無しさん05/01/22 17:34:15
オレはエロくない
0880デフォルトの名無しさん05/01/22 17:37:49
>>878
ダブル区ぉーとじゃなくてシングル区ぉーとを使え.
fname[len]はまずいと思うが.
0881デフォルトの名無しさん05/01/22 17:38:56
>878
いわゆる負の添字参照バグ。もはやa[-1]のような式は使うべきでない。環境(32or64-bit)が変わる度にバグとなる。また、len==0の場合は?
0882デフォルトの名無しさん05/01/22 17:40:47
>>881
ctype.h のよくある実装も否定されます?
0883デフォルトの名無しさん05/01/22 17:43:27
>882
環境ごとに最適化すればいい
088487805/01/22 17:44:13
>>880
レスありがとうございます。
>>fname[len]はまずいと思うが
lenは\0を入れない文字列の長さだから
fname[len-2]=='.'、fname[len-1]=='c'ということですよね??(;;
0885デフォルトの名無しさん05/01/22 17:45:48
fname[0-2]
0886デフォルトの名無しさん05/01/22 17:49:12
1000
0887デフォルトの名無しさん05/01/22 17:51:08
>>884
そうだけど,>>881がいうように,
len==0だとまずいから,一応if(len>1)を入れておいた方がいいね.
088887805/01/22 17:55:01
>>881
>>884
あっ、なるほど。早とちりしてました。
わかりやすい解説ありがとうございました。
0889デフォルトの名無しさん05/01/22 18:29:25
>>872
本当にそのソースで「ON」と表示されたのか?
0890デフォルトの名無しさん05/01/22 18:35:45
>>889
どんな天才が作ってもONとは表示されないだろ
0891デフォルトの名無しさん05/01/22 18:40:06
>890
天才を侮辱するな
-Delse=puts("ON");
#define else puts("ON");
0892デフォルトの名無しさん05/01/22 18:41:41
>>890
void main なので、原理的にはありうる。
0893デフォルトの名無しさん05/01/22 18:41:46
先輩!何回実行させても「OK」か「NO」しか出ません
0894デフォルトの名無しさん05/01/22 18:42:19
int foo[] = { 100, 200 } ;
int bar[] = { 0, 1 } ;
: //略
printf( "%3d\n" ,foo[ bar[ 0 ] ] ) ;

自分たまにこんなの使ったりしてますが、これって実際どうなんですか?
環境依存とか、そういういけないやり方ですか?
教えてください。
0895デフォルトの名無しさん05/01/22 18:42:53
ところでなんでONになるんだろう...
0896デフォルトの名無しさん05/01/22 18:46:23
puts("buf overflow\rON");
0897デフォルトの名無しさん05/01/22 18:47:55
>>894
何の問題もない。もっとひどくしてbar[0][foo]と書く事もできる。
0898デフォルトの名無しさん05/01/22 18:48:59
>894
配列[int型]に問題ない
0899デフォルトの名無しさん05/01/22 19:02:17
>>897
>>898
レスありがとうございます。
bar[0][foo]とした場合の解釈の仕方としてはどういう感じなんでしょうか?
0900デフォルトの名無しさん05/01/22 19:06:56
以下のようなことを実現したいときに、どのようにしたら良いか悩んでおります。
//まず、処理をするかしないかユーザーに問う。
//しないなら終了、するなら処理へ。一つの処理が終わったら、再びユーザに問う
もちろん、処理の内容はとりあえず何でも良いです。
コードを短くするためには、ループだろうと考え、こんな感じで作ってみましたが、うまくいきません。

#include<stdio.h>
int main(void)
{
char handan;
int a;
for(;;)
{
printf("実行はyを 、終了するならそれ以外のキー\n");
handan=getchar();
if(handan!='y') break;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("入力された数字は%dです\n",a);
}
return 0;}

1回目のy入力→処理、までは問題ないのですが、
なぜか2回目に入ると、「実行はyを、〜〜」を表示して、終了してしまうのです…。
どこがおかしいか、先輩諸氏、ご教唆をお願いします。
また、我が儘を申し上げれば、今回のような設問時には、みなさんはどのような手法を取るか、
教えていただければ幸いです。
090190005/01/22 19:08:34
すみません。
「改行が多い!」が出たんで、減らしたた見にくくなっちゃいました。
インデントもなくなってるし…。
0902デフォルトの名無しさん05/01/22 19:16:19
12行目>scanf("%d%*c",&a);
0903デフォルトの名無しさん05/01/22 19:19:07
>900
scanfはstdinを汚す。
直後にrewindを呼べ。
0904デフォルトの名無しさん05/01/22 19:21:59

>>900
>今回のような設問時には、みなさんはどのような手法を取るか、
>教えていただければ幸いです。

scanf を使わない。
0905デフォルトの名無しさん05/01/22 19:22:26
>>900
fgetsあたりで一行読み込んだ後、その行を処理するのが定石。
0906デフォルトの名無しさん05/01/22 19:23:20
rewind を知らないだけのアフォが吠えてるぜw
0907デフォルトの名無しさん05/01/22 19:28:05
俺はいつも
gets(tmp);
a=atoi(tmp);
rewind(stdin);
で書いてるけど。
0908デフォルトの名無しさん05/01/22 19:28:39
>>906
一番のアホはお前
0909デフォルトの名無しさん05/01/22 19:31:50
>>906
昔、いろいろ実験した挙句、
何となく rewind を入れてみたら
なぜか上手くいった。

俺はその時の感動が
今でも忘れられないんだよ、
とかいう人?
0910デフォルトの名無しさん05/01/22 19:32:41
海外のプログラミング学習サイトのサンプルコードに入っていたのを見つけて、やみつきになった>rewind
0911デフォルトの名無しさん05/01/22 19:32:45
>>906
そうだ、お前がアホだ。
0912デフォルトの名無しさん05/01/22 19:34:55
お前ら、いつまでそんなレガシー関数使ってんだよ。恥ずかしいなーもー。
091390005/01/22 19:35:17
先輩諸氏、ありがとうございます。
rewind、fgets・・・、まだ知らない単語でした。
勉強を進めて参ります。

現状では、
>902さん
のやり方でうまくいきました。ありがとうございます。
0914デフォルトの名無しさん05/01/22 19:36:15
rewind を知らないだけってのは買いかぶり過ぎだったか
たかが scanf 程度のものでさえ仕様をちゃんと理解して使えない
適性の最も低い層から今日も漏れ聞こえる慟哭かw

そんなのとは比較にもならない複雑怪奇なものを次から次へと理解せにゃならんのがPGだというのに
0915デフォルトの名無しさん05/01/22 19:36:48
stdin に rewind をかけるというのが
正当な解法だと考えるセンスは
いかがなものかと。
0916デフォルトの名無しさん05/01/22 19:38:05
#include<stdio.h>
int main()
{
char* a="a%" ;
printf(a) ;
return 0 ;
}
とすると % が出力されないのに、printf("%s",a) ;とすると%が出力されるの
はなぜでつか?
0917デフォルトの名無しさん05/01/22 19:38:50
>>915
確かにセンスねえな
知ってればいいってものでもない
0918デフォルトの名無しさん05/01/22 19:39:23
まぁ、用意されている関数を覚えている、というのは別にすごいことでもなんでも
ないわけだが。逆に言うと、覚えていなくても別に大して恥ずかしいことでもない。
基礎を知っているなら、別に大きな問題ではないね。
0919デフォルトの名無しさん05/01/22 19:40:31
あ、基礎というのは言語仕様の事ではないよ。
0920デフォルトの名無しさん05/01/22 19:42:50
>>915
ファイルリダイレクトして渡したりしたらえらいことになりそうな気がする。
0921デフォルトの名無しさん05/01/22 19:44:25
>そんなのとは比較にもならない複雑怪奇なものを次から次へと理解せにゃならんのがPGだというのに

と、学生が吠えておりますが
0922デフォルトの名無しさん05/01/22 19:44:59
>>921
元メインフレーム屋ですが何か?
0923デフォルトの名無しさん05/01/22 19:45:00
すいません、初心者なんですが>>902の「%*c」が意味するものを教えてください。
0924デフォルトの名無しさん05/01/22 19:45:22
>916
%おいちいからprintfにたべらりちゃふの。でも%%は%になるの。putsはたべないけれどね
0925デフォルトの名無しさん05/01/22 19:46:12
>>923
実行してみたの?していないの?していないなら実行してから質問ね。
0926デフォルトの名無しさん05/01/22 19:46:24
>>922
Cは向いていない気が。
0927デフォルトの名無しさん05/01/22 19:48:15
遅レスだが

>>768
rand==RAND_MAXの場合困らない?

>>806
うちの大学の教授もvoid mainの人が居た
int mainなのは、C言語の仕様決めた人が、main関数は下の2つのどっちか。って決めたから、どちらにせよintだと聞いた
「int main(void)」
「int main(int c,char *argv[])」
argvの後に引数付けてもOKだけど、これは環境依存でOKだっただけなんだろうな。

>>901
2ch書く時に、先頭のインデントは半角スペースだと消える。
全角に直して(置換)書き込みすれば良いよ
(どうせエディタで書いたのをコピペだろうから、エディタで置換させれば楽)
0928デフォルトの名無しさん05/01/22 19:48:25
>>926
ああ、自分は適性が高いとはこれっぽっちも感じないね
コード書けば金もらえる
それだけだ
0929デフォルトの名無しさん05/01/22 19:48:31
>>916
釣りならもう一回ネタを練り直して来い
釣りじゃないならprintfが何をする関数なのか調べて来い
0930デフォルトの名無しさん05/01/22 19:48:55
Cのどこが複雑怪奇なんだか・・・
0931デフォルトの名無しさん05/01/22 19:49:05
・標準入力にrewind()
>920の指摘などの問題。
・scanf()
使いこなせていないとバッファオーバランの危険。
・gets()
常にバッファオーバランの危険。使用禁止。

>>916
printf()の第一パラメータは常にフォーマット文字列として解釈されるので、
%を出力するには%%と書く必要がある。
例えば、char *a = "%s" だったりすると大変危険。
0932デフォルトの名無しさん05/01/22 19:50:21
>>922
>元メインフレーム屋ですが何か?

いや、なるほど。納得した。

さすがは・・・(ry
0933デフォルトの名無しさん05/01/22 19:50:43
>>928
そんなんだから複雑怪奇だと思っちゃうんだよ。
rewindに限らず「よくわかんないけど動けばいいや」って感じなんでしょ。
0934デフォルトの名無しさん05/01/22 19:53:28
>>931
すいません、それなら数字や文字列を入力する時はどの関数を使えば良いんでしょうか。
fgetsだと改行も入ってしまうんですが…
0935デフォルトの名無しさん05/01/22 19:53:52
>>930
Cというか、最近はソフトとはそもそも何かというところで悩んでる
それこそ学生時代にしっかり押さえたはずのことが今になってアバランシェ
・・・大パニックがかえって楽しいけどね
0936デフォルトの名無しさん05/01/22 19:55:24
文字列→sscanf
    →atoiなど
0937デフォルトの名無しさん05/01/22 19:55:24
void main(void)

私は美しい・・・・・・・・・
0938デフォルトの名無しさん05/01/22 20:00:14
何でコードを短くとか考えるのよ?その前にバグを減らす方を考えろよ
0939デフォルトの名無しさん05/01/22 20:00:23
>>936
つまり、fgetsでchar変数に値を与えてからsscanfやatoiで直せば良いんですね。
教えていただいて有難うございます。m(_ _)m
fgetsならstdinは汚れませんよね?
0940デフォルトの名無しさん05/01/22 20:02:01
>>938
短くすればバグも減る。
0941デフォルトの名無しさん05/01/22 20:03:02
>>939
しゅくふくのつえを持っているのにベホイミを唱えるようなもの
0942デフォルトの名無しさん05/01/22 20:05:10
「汚れる」がどういう状態を指すのかわからんけど、
stdinに変なデータを書き込まれたりということはない。
0943デフォルトの名無しさん05/01/22 20:06:04
>>935
>Cというか、最近はソフトとはそもそも何かというところで悩んでる
>それこそ学生時代にしっかり押さえたはずのことが今になってアバランシェ

もしかして学校ではバッチ処理の事しか教えてもらえなかったのでは?

まともな学校ならば、SICP のようにしっかりした教科書を使うから、
そんなことにはならないと思う。
0944デフォルトの名無しさん05/01/22 20:08:27
結局>>906は話をそらして遁走か
0945デフォルトの名無しさん05/01/22 20:09:03
>>944
話したければどうぞ
0946デフォルトの名無しさん05/01/22 20:09:51
>>943
ホレリスカードね
094794305/01/22 20:12:30
>>946
>ホレリスカードね

おいおい・・・
学校って、「何時」の学校だよ(w
094886905/01/22 20:13:28
>>871

大変参考になりました。
ありがとうございます
094986905/01/22 20:14:42
>>871
大変参考になりました。
ありがとうございます。
0950デフォルトの名無しさん05/01/22 20:14:43
char str[4]="str";
str[0,2]='d';

みたいに、カンマで区切ってもエラーにならないんですけど、なぜでしょうか?
(2行目は、0,2です)
何か使い所があるから、OKって事になってるかと思ったんですが…
0951デフォルトの名無しさん05/01/22 20:17:01
>>950
そこでD言語ですよ
0952デフォルトの名無しさん05/01/22 20:23:11
>>950
0, 2が式として評価されるから。
カンマで区切った式は左から順番に評価され、
最後に評価された値が帰ることになる。
0953デフォルトの名無しさん05/01/22 20:23:12
>>950
「式 + 式」が「式」なのと同じように、
「式, 式」は「式」だから。
0954デフォルトの名無しさん05/01/22 20:23:40
(0,2)==2.
(0,1,7)==7.
(0,2,4,8)==8.
0955デフォルトの名無しさん05/01/22 20:24:25
文法書嫁よ。あー釣られた
0956デフォルトの名無しさん05/01/22 20:25:00
>>950
for(n = 0, m = 0; m < max; m++)
のように使うときのカンマと同じ。
0957デフォルトの名無しさん05/01/22 20:25:36
>>955
釣られても気にするな。君は思った意見を言っただけだ。
正しいものは正しいと胸を張って生きよう。
0958デフォルトの名無しさん05/01/22 20:49:05
>>931
改行は、消すか無視すれば問題ないだろ。
なんで、その程度で悩む?
0959デフォルトの名無しさん 05/01/22 21:18:59
jacobi法を使用して

行列Aに対して
 Axベクトル = λxベクトル
を満たす
 ベクトルx(固有ベクトル)と
 値λ (固有値)と
組を求める。

のプログラムを作ってください。
0960デフォルトの名無しさん05/01/22 21:25:39










 ____
. \ _, ,_ /∩   ソニック!ソニック!
  ( `Д´)彡  ∽
  (  ⊂彡        ∽
   |   | 
   し ⌒J










0961デフォルトの名無しさん05/01/22 21:27:25
板違い、帰れ
0962デフォルトの名無しさん05/01/22 21:30:22
>959
数学板に戻りなさい
0963デフォルトの名無しさん05/01/22 21:33:19
>>959
ここから、ヤコビ法のコードを拾え。

http://oku.edu.mie-u.ac.jp/~okumura/algo/archive/

そして今度からは、
わざわざ他人に作ってもらおうとする前には必ず、
ここにそのコードがない事を確認してから依頼しれ。
0964デフォルトの名無しさん05/01/22 22:40:26
>>899
a[b]とb[a]は同じ。
aにfoo、bにbar[0]を当てはめてみるとfoo[bar[0]]とbar[0][foo]になり、問題ないということになる。
0965デフォルトの名無しさん05/01/22 22:49:23
>>964
便乗質問です。

型Tの配列aがあったとして、
a[b] の解釈は
*(a + sizeof(T) * b) になると思います。
とすると、同様にb[a]は
*(b + sizeof(T) * b)
と解釈されると考えました。

この条件でa[b] == b[a]となるのは、
sizeof(T) == 1 つまりTがcharだけの場合に限る

と考えたのですが、間違いでしょうか?
0966デフォルトの名無しさん05/01/22 22:50:16
b + sizeof(T) * b → b + sizeof(T) * a
でした… orz
0967 ◆DRAGONS/66 05/01/22 22:52:25
> *(a + sizeof(T) * b) になると思います。
ならない。
*(a+b)
0968デフォルトの名無しさん05/01/22 22:54:22
>>965
おまいの発想だと後者は
*(b + sizeof(b) * a)
になるんじゃねーのか?アァ?
0969デフォルトの名無しさん05/01/22 22:54:30
>>967
即レスありがとうございます。
ポインタ演算の基礎を忘れて混同してました…
スレ汚し失礼しました^^;
0970デフォルトの名無しさん05/01/22 23:00:34
return(0);
と書いている参考書を買ってしまったのですが
まずいですか?
0971デフォルトの名無しさん05/01/22 23:01:39
>>970
その辺がどっちが良いかは完全に宗教論争だから、どっちでもいいんじゃね?
0972デフォルトの名無しさん05/01/22 23:02:16
>970
ちと古い。
0973デフォルトの名無しさん05/01/22 23:03:49
>>971
別にあってもなくてもいいという感じで
とらえておけばいいでしょうか?

まだ初学者なのに
いきなり駄目な参考書に当たっちゃったかなあと思いましたが
他の部分は読みやすそうなので気にするのをやめます

ありがとうございました
0974デフォルトの名無しさん05/01/22 23:05:14
>>972
99年12月30日発行でした
0975デフォルトの名無しさん05/01/22 23:05:51
>>974
ミレニアムまで待てなかったのか
0976デフォルトの名無しさん05/01/22 23:07:58
>>974
ギリギリC99が載ってなさそうな日付じゃん…
0977デフォルトの名無しさん05/01/22 23:08:50
C99準拠の参考書ってどれぐらいあるんだろう?
0978デフォルトの名無しさん05/01/22 23:10:18
プログラミング言語CのC99版ってまだ出ないの?
0979デフォルトの名無しさん05/01/22 23:10:38
なんとしても90年代に出したかった必死さが伝わってくるようだ。
0980デフォルトの名無しさん05/01/22 23:10:47
C99ってなんやねん
0981デフォルトの名無しさん05/01/22 23:12:21
>>980
この業界にいて知らないのはヤバい
0982無理だったので誰か次スレ立てて☆05/01/22 23:12:35
【板名】 プログラム技術
【板のURL】 http://pc5.2ch.net/tech/
【タイトル】↓
C言語なら俺に聞け! Part 100
【名前】 v(^o^i)d
【メール欄(省略可)】
【本文】↓
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

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

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

C言語なら俺に聞け! Part 99
http://pc5.2ch.net/test/read.cgi/tech/1105454700/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0983デフォルトの名無しさん05/01/22 23:12:58
別にC99なんて使わないっしょ
0984デフォルトの名無しさん05/01/22 23:13:41
>>982
このタイミングでそのコピペが出る意味がわからない
0985デフォルトの名無しさん05/01/22 23:14:02
>>981
すいません、業界の者ではないです
ヴァージョンみたいな認識でOK?
0986デフォルトの名無しさん05/01/22 23:15:35
>>985
プログラミング言語Cの「現在の」標準規格
正式にはISO/IEC 9899:1999-Programming Language C
0987デフォルトの名無しさん05/01/22 23:16:40
ついでに書籍プログラミング言語C第2版のはC90
0988デフォルトの名無しさん05/01/22 23:16:41
>>980
タダでさえこのスレまで99なのに知らないってのは釣りか…

http://seclan.dll.jp/c99d/c99d01.htm#dt19990319
0989デフォルトの名無しさん05/01/22 23:17:13
ドイツ語の正書法みたいなもんですね
理解しました
0990デフォルトの名無しさん05/01/22 23:18:43
みなさんはどのくらいC言語が書けるんですか?
0991デフォルトの名無しさん05/01/22 23:20:02
突然失礼します。
#include <stdio.h>
#include <string.h>
void main()
{
char data[65535];
int i, len;
scanf("%s", data);
len = strlen(data);
i = len - 1;
while(i >= 0)
{
printf("%c", data[i]);
i = i - 1;
}
}
これで文字列を反転できたんですが、その反転したやつをもとの文字列の
後ろにくっつけるにはどうしたらいいでしょうか。
strcatを使おうとしたんですがいまいちうまくいかなくて…
よろしくお願いします。


0992デフォルトの名無しさん05/01/22 23:20:26
>>990
仕事が出来るくらい。ここ数年C++ばっかだけど。
0993デフォルトの名無しさん05/01/22 23:21:06
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1106403600/
0994デフォルトの名無しさん05/01/22 23:21:49
なんとなく、標準化委員会の努力と
世のニーズがずれていたような・・・
0995デフォルトの名無しさん05/01/22 23:22:09
> ついでに書籍プログラミング言語C第2版のはC90

というかC89だ。
0996デフォルトの名無しさん05/01/22 23:23:00
>>995
おっと失敬
0997デフォルトの名無しさん05/01/22 23:24:03
1000Get
0998デフォルトの名無しさん05/01/22 23:25:34
>>997
フライング。
0999デフォルトの名無しさん05/01/22 23:26:47
999
1000デフォルトの名無しさん05/01/22 23:27:16
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。