- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:34:33 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 19 pc11.2ch.net/test/read.cgi/tech/1190342593/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
- 313 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:45:44 ]
- for ( int i = 0; i < img_height; i++ )
free(img_data[i]); free(img_data);
- 314 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:53:37 ]
- >>312
img_dataの型がよく分からないのだが…… img_dataもimg_data[i]も両方HOGE型てなんなん int **ar,i; ar = (int**)malloc(sizeof(int*)*HEIGHT); for(i=0; i<HEIGHT; ++i) ar[i] = (int*)malloc(sizeof(int)*WIDTH); こういうのをイメージしてるなら、こう↓ for(i=0; i<HEIGHT; ++i) free(a[i]); free(ar);
- 315 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 02:12:47 ]
- >>307
ありがとう。 種類の違うデータを二次元配列にいれたりしてるんだけど、 printfで表示させてもあっているのに、 あるアルゴリズムをかけると変な値がでるんだよなー。 ある空白の二次元配列の1行ずつに、違う二次元配列の1行ずつを代入して 足し算していくような感じのプログラムなんだけど。 計算が対数計算だから場合わけが非常に精密にしないとだめなんだよね。
- 316 名前:312 mailto:sage [2007/10/23(火) 02:13:07 ]
- ありがとうございます。
img_dataを開放しても、img_data[i]は開放されないんですね。
- 317 名前:プリンがー mailto:aaa [2007/10/24(水) 00:15:56 ]
- 1から10の2乗を3桁で表示するプログラムを作れ。
#include<stdio.h> void main (void) { int x i; double y; for(i=0;i<=9;i++){ printf("数値を入力して下さい"); scanf("%d",&x); y=x*x; printf("y=%3lf\n",y); } return0; } であってますか?
- 318 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 00:24:43 ]
- >>317
10の二乗は? というか、実行すればいいだろ
- 319 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 00:28:55 ]
- >>312
exit(0);
- 320 名前:318 mailto:sage [2007/10/24(水) 00:29:56 ]
- >>317
ごめ 間違えた #include<stdio.h> int main(void) { int i, x; for(i=1;i<=10;i++){ printf("%d の二乗を入力して下さい : ", i); scanf("%d", &x); printf("%3d\n", x); } return 0; }
- 321 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:00:02 ]
- printf("%3d\n", x);
printf("%3d\n", x); printf("%3d\n", x);
- 322 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 02:18:57 ]
- コマンドプロンプトでコンパイルするような
無償コンパイラが欲しいんですがないですか?
- 323 名前:デフォルトの名無しさん [2007/10/24(水) 02:20:05 ]
- 問題に反してるだろ?1〜10の二乗を表示なのに、11以上の二乗も表示できるようになっとるぞ?フローチャートなどで考えたらどうだ?ただプログラムを組むだけでは、上達しないよ。
- 324 名前:318 mailto:sage [2007/10/24(水) 06:12:02 ]
- >>322
MinGW Visual C++ 2005 Express Lcc cint LSI-C86 評価版
- 325 名前:318 mailto:sage [2007/10/24(水) 06:13:11 ]
- printf("%d の二乗を入力して下さい : ", i);
scanf("%d", &x); ↓ x=i*i;
- 326 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 10:29:58 ]
- >フローチャートなどで考えたらどうだ?
なるほど、>323のようになれると。
- 327 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 12:04:28 ]
- >>322
Turbo-C 2.01 ttp://bdn.borland.com/museum/ お薦め。
- 328 名前:プリンがー mailto:aaa [2007/10/24(水) 12:29:22 ]
- プログラム演習の初心者からできるいい問題集ありませんかね?
大学生協は置いてなくて・・・ 講義では問題解くってことはしないのでorz
- 329 名前:318 mailto:sage [2007/10/24(水) 12:41:42 ]
- >>328
推薦図書/必読書のためのスレッド 37 pc11.2ch.net/test/read.cgi/tech/1190192944/
- 330 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 12:42:28 ]
- Boland C++ Compiler
が抜けてるな
- 331 名前:プリンがー mailto:aaa [2007/10/24(水) 12:53:45 ]
- >>318
プログラムってどこで実行できるんすか??
- 332 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 12:54:43 ]
- NG
- 333 名前:takumi [2007/10/24(水) 14:13:59 ]
- XPでvisualstudioを使ってます。
問題:長さ100のint型配列 int a[100]がある。a[0]〜a[99]には整数が収められているする。 この100個の中で一番小さい数を求め、画面に出力するプログラムを作成せよ。 出力形式は「ans.=???」とせよ。???の部分は答え。 なんですが、全くわからないので教えて下さい。。
- 334 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:08:21 ]
- 宿題スレへ
pc11.2ch.net/test/read.cgi/tech/1193150915/l50
- 335 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:24:03 ]
- コテ付目欄空欄…
どこの中学生掲示板だよ
- 336 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 17:59:26 ]
- つか入力がわかっているのになぜscanfを使う必要あるんだよ。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:19:58 ]
- 未経験ということでソフトウェア開発企業に入社したんだけど、whileのところで早速詰まった('A`
0〜9 までの数字を、0 から1個ずつ増やしながら 10行表示しなさいっていうプログラムを作るんだけど、 0 01 012 0123 01234 012345・・・ とはならずに 0 1 2 3 4 ってなっちゃいます。というかそういう風に書いてるのもわかるんですが、 #include <stdio.h> int main(void) { int a = 0; a = 0; while(a < 10) { printf("%d\n" ,a); a++; } return 0; } ↑whileの中をどうすればいいんでしょう・・・。
- 338 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:26:55 ]
- while(a < 10)
{ int b = 0; while(b <= a) { printf("%d", b); b++; } printf("\n"); }
- 339 名前:デフォルトの名無しさん [2007/10/24(水) 21:29:01 ]
- #include <stdio.h>
int main(void) { int a,b; for(a=0;a<10;a++) { for(b=0;b<=a;b++)printf("%d" ,b); printf("\n"); } return 0; }
- 340 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:32:40 ]
- >>338
ああああありがとうございます! whileの中にwhile使うとは盲点。 流れも理解できましたありがとうございます!
- 341 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:35:51 ]
- >>340 for文を使ったほうがベター
- 342 名前:デフォルトの名無しさん [2007/10/24(水) 21:38:14 ]
- そこまで出来ないでよく仕事になるな 入って2週間以内とかか? それならいい
- 343 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:38:43 ]
- >>341
そうなんですよね。 他にもwhileを使って、2個入力した文字列が、同じ文字列かどうか判断するプログラムを作ったんですが、 ifelse使った方が手っ取り早かったり、一応基本中の基本ということで頑張ってますが、 とりあえずとことん覚えてみようと思います。
- 344 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:40:48 ]
- >>342
まだ3日目です('A`)('A`)('A`) 初日はOSインスコとかパソコンに関する事を教わって(というか何回もやってきた事なので余裕でした) 二日目は%dやらfloat=小数点やら、long=スゲーでかい数とか、配列とかを覚えて 本日三日目でif else for を覚えたんですが、whileがなんかスゴイ曲者というか、問題がクセものでてんてこ舞いです。。。
- 345 名前:デフォルトの名無しさん [2007/10/24(水) 21:44:45 ]
- >>343
実戦力高めるならSTLだな たとえば2つの文字列比較するならこうやればいい #include <iostream> #include<string> using namespace std; main(){ string a,b; a="こんにちは"; b="こんばんわ"; cout<<a<<" と "<<b<<"は "; if(a==b)cout<<"一致"; else cout<<"違う"; }
- 346 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:59:46 ]
- 行列を計算するときにライブラリって使えるの?
固有値を求めたいんだけど。
- 347 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:09:40 ]
- >>345
初心者(それも++じゃなくてCっぽい)にそんなこと教えたら、 同じ文字列が入ったchar配列を==比較して「あれ? 同じのはずなのに……」てことになるぞ
- 348 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:16:49 ]
- >>346
標準ライブラリーにはない 特殊な科学技術計算用のライブラリーを手に入れるか、自作するか
- 349 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:26:44 ]
- >>346
clapack
- 350 名前:デフォルトの名無しさん [2007/10/25(木) 22:25:22 ]
- typedef struct{
int hoge; int hage; int hige; int huge; } HOGE; と言う構造体があるとして、hoge = 1; hage = 0; hige = 1; huga = 1;となっているとします。 その構造体の中で、値が"1"になっている物を見付けたいのですが、そういうことはできないですか? 構造体内の変数の値を調べ、それが条件にあっていれば別々の処理をしたいです。
- 351 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:28:28 ]
- Cじゃムリ。
リフレクションのある言語ならできる。
- 352 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:39:37 ]
- 意味がわからんぽ
メンバ名で参照したくないって事? 構造体先頭からのオフセットでアクセスするとかかな
- 353 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:50:11 ]
- >>350
配列にしない(できない)理由はあるの? typedef union{ struct{ int hoge; int hage; int hige; int huge; } int array[4]; } HOGE;
- 354 名前:350 mailto:sage [2007/10/25(木) 22:57:44 ]
- >>353
なんですかそれは… 始めてみました。 意味がちょっとわかりません… その形にしておいて、 HOGE u_hoge; .... u_hoge.array[0]にしたら、hogeにアクセスできるって事ですかね?
- 355 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:58:37 ]
- 共用体でググってくるんだ!
- 356 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:55:24 ]
- だんだんと解ってくると、プログラム書くのが面白くなってくるなぁと思った超初心者な俺。
- 357 名前:デフォルトの名無しさん [2007/10/26(金) 00:26:59 ]
- fgetsで入力した後'\n'を消す方法はありますか?
あまりポインタは使いたくないんですが・・・
- 358 名前:aho mailto:sage [2007/10/26(金) 00:29:26 ]
- >>350
構造体のポインタを利用してみました。 #include <stdio.h> typedef struct{ int hoge; int hage; int hige; int huge; }HOGE; int main(){ HOGE* hogep = NULL; try{ hogep = new HOGE(); }catch(...){ printf("new error!\n"); } /* メンバ変数の初期化 */ hogep->hoge = 1; hogep->hage = 0; hogep->hige = 1; hogep->huge = 1; printf("%d\n", hogep->hoge); return 0; }
- 359 名前:デフォルトの名無しさん [2007/10/26(金) 00:40:51 ]
- >>357
fgets(buf, n, fp); if (buf[strlen(buf) - 1] == '\n') { buf[strlen(buf) - 1] = '\0'; } ・・・?
- 360 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 00:44:21 ]
- >>357
fgets(buff, sizeof buff, stdin); for(i=0; buff[i]; i++) if(buff[i]=='\n') { buff[i] = '\0'; break;}
- 361 名前:デフォルトの名無しさん [2007/10/26(金) 01:39:24 ]
- C++Compiler / Turbo Debugger をzipから解凍したらフォルダに何も入ってなかったんだけど・・・
どこでパス入力するの?
- 362 名前:教えてください mailto:sage [2007/10/26(金) 03:23:34 ]
- C言語についての質問です。
下記の素数か素数でないか調べるコードで、 @変数名にis_primeとありますが、isは何を意味しているのですか? Ais_prime = 1;とするのがわかりません。 B以下、return 0; まで、どういう流れかわかりません よろしければ1行ずつ教えてもらえるとうれしいです。 #include <stdio.h> int main(void) { int num, i, is_prime; printf("判定したい数を入力してください: "); scanf("%d", &num); /* 約数があるかどうか調べる */ is_prime = 1; for(i=2; i<=num/2; i=i+1) if((num%i)==0) is_prime = 0; if(is_prime==1 && num > 1) printf("素数です"); else if (num > 1) printf("素数ではありません"); return 0; }
- 363 名前:デフォルトの名無しさん [2007/10/26(金) 03:44:59 ]
- num is_prime なんだろ
- 364 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 08:08:18 ]
- >>362
適当な数字入れて処理追いかけてみろよ。
- 365 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 08:13:38 ]
- なんにもわかってないってことかよw
- 366 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 11:02:57 ]
- >>362
You is fool.
- 367 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 11:26:14 ]
- >>361
解凍しなおしてみたら?
- 368 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 12:54:26 ]
- You are Shock!
- 369 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 13:24:17 ]
- atofとか解読できなさそうだな
- 370 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 13:55:39 ]
- 数値計算において
不等号の>>と>の判別ってプログラム的にどうすべきですかね? 計算は対数でするんだけど。
- 371 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 14:35:43 ]
- 差が閾値を越えるかどうかで判定
もしくは比が閾値を越えるかで判定
- 372 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 15:09:54 ]
- その問題では>>と>=で計算方法違うんだよ。
今計算してみると対数の値をexpかけてみて値をみていくと 値がかわってくるのが差が10から15あたりのときみたいだから 閾値を15で計算をかえてみることにするわ。
- 373 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 15:49:02 ]
- for(;loc<100;loc++){
if(loc<100){ printf("氏名を入力して下さい(空白で終了):\n"); fgets(data[loc].namae,39,stdin);←この行 if(!*data[loc].namae)break; printf("電話番号を入力して下さい:\n"); fgets(data[loc].denwa,39,stdin); printf("市外局番を入力して下さい:\n"); fgets(str,9,stdin); data[loc].sigai=atoi(str); } } 上の行のfgetsをgetsに変えるとEnterでbreakするんですけど fgetsのままでは動作しません。どうすればfgetsのままで動作しますか?
- 374 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:10:04 ]
- >>367
何回解凍しなおしてもダウンロードしなおしても空… zipファイルはちゃんと容量あるのに解答してできたフォルダには容量が全くなくなる。
- 375 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:15:36 ]
- >>374
解凍ソフトは何? パス付きに対応してないやつなんじゃね?
- 376 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:17:32 ]
- >>373
fgetsは改行も取り込むから、 fgets(data[loc].namae,39,stdin); if(data[loc].name[0] == '\n') break; これでおk
- 377 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:26:35 ]
- >>376
出来ました。ありがとうございます。
- 378 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:30:47 ]
- fgetsの解説ですが
ohmoriws1.ms.kagu.tus.ac.jp/1997/sotsuken/miyakosi/c04.html ここは間違ってる?もしくは誤解される様な感じなのですか・・? 一度参考にしたんですが・・。
- 379 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 16:46:34 ]
- >>378
'\n'を取り除くとも書いてないから間違いとは言えない。 しかし、その直後のfputs()の説明が間違っているから信用できない。
- 380 名前:デフォルトの名無しさん [2007/10/26(金) 17:20:43 ]
- すいません超絶初心者な僕に教えて頂きたいことがあるます
1行64バイトのファイル(行数可変)のデータに何回も文字列の検索を行ういアウトプットするプログラムを作っています。 fgetsを使い何回もファイルを読み込んで一行ずつ比較するというようにできたにはできたのですが、 行数可変で多い場合100000行超えたりするファイルに対してはえらい時間がかかります。 メモリにぶちこんでそこから何回も検索を行いたいと思うのですが、どう組んだらいいでしょうか。
- 381 名前:これ参考に [2007/10/26(金) 17:37:47 ]
- #include <stdio.h>
#include <time.h> #include <string.h> int N; void serch(char* x,char* str,int* adr){ char t[256];int n,M,k,su=0; for(M=0;;M++)if(str[M]=='\0')break; for(n=0;n<256;n++)t[n]=M; for(n=1;n<=M;n++){k=(unsigned char)str[M-n];if(t[k]==M)t[k]=n;} n=0;while(1){ for(k=0;k<M;k++)if(str[k]!=x[n+k]) break; if(k==M){adr[su]=n;su++;n+=M;} else {k=(unsigned char)x[n+M];n+=t[k];} if(n+M>=N){adr[su]=-1;return;}}} main(){ N=18000000;char *x=new char[N];N=0; char buf[120],k,n; FILE *fp=fopen("2ch.txt","rb"); while(k=fread( buf,1,100,fp)){ for(n=0;n<k;n++)x[N+n]=buf[n];N+=k;} fclose(fp); printf("データロード完了!\n測定中です・・・\n"); int adr[30000]; char str[]="名無し"; serch(x,str,adr); }
- 382 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 18:07:20 ]
- >>381
変数の使い方、変数の名前が気持ち悪い >>380 malloc,realloc使うべし
- 383 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 18:08:40 ]
- あ、いや、バイナリならftellとfseekでサイズが分かるから、
reallocはいらないやも
- 384 名前:デフォルトの名無しさん [2007/10/26(金) 18:24:22 ]
- >>381さん
ありがとうございます >>382さん mallocを使った場合どのように組めばいいでしょうか?
- 385 名前:デフォルトの名無しさん [2007/10/26(金) 18:35:14 ]
- 一番簡単な方法おしえてやる
- 386 名前:デフォルトの名無しさん [2007/10/26(金) 18:36:04 ]
- >>375
ありがとう。 解凍ソフト変えたらできた。
- 387 名前:デフォルトの名無しさん [2007/10/26(金) 18:53:06 ]
- #include <iostream>
#include <string> #include <fstream> using namespace std; int main() { fstream fp("test.txt"); string str,buf; do{ fp >> buf; str+=buf; }while((!fp.eof())); int n=str.find("会議"); cout << n; }
- 388 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 18:53:49 ]
- >>381
だからその入力ロジックを何とかしろって
- 389 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 19:06:04 ]
- >>384
適当に書いた例だけど FILE *fp; char *data; ... //省略 data = (char*)malloc(sizeof(char) * 128); /とりあえずchar128個分確保 if(data==NULL) return 1; //エラー処理 int i=0,size=128; while((data[i] = getchar()) != EOF){ if(++i >= size){ char *tmp; tmp = realloc(data,sizeof(char) * (size + 50)); //50ずつ拡張 if(tmp == NULL){ /* reallocは元の領域を解放するが、失敗時は解放せずにNULLを返す そのため、失敗時に解放できるように、別変数で一度戻り値を受けてから、エラーチェックする */ free(data); //mallocやreallocで確保した領域は必ず解放する return 1; } else { data = tmp; size += 50; } } } free(data) //必ず解放
- 390 名前:デフォルトの名無しさん [2007/10/26(金) 20:26:58 ]
- #include<stdio.h>
int A; int B; void X(int a[],int b[]){ printf("%d",a); printf("%d",b); } void main(void){ //省略 X("A","B"); 質問させてください 変数A Bを引数使って表示させたいんですけど、コマンドプロンプト?で実行させると警告がでてちゃんと表示されません。 どうすればいいでしょうか? 説明不足ですみませんがよろしくお願いします
- 391 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 20:29:39 ]
- 関数の引数としてポインタを渡して、そのポインタの変数に値をいれているのですが、
関数を呼び出す時によって、値をいれる必要が無いときがあります。 不要な値のために変数を宣言したくないのですが、変数を宣言しないでいい方法などはありませんか? hoge( &x, &y, &height, &width); と呼び出すのですが、&heightと&widthの結果を使わないときもあるので、 int x, y; だけ宣言して、heightとwidthは変数宣言したくないと思っています。
- 392 名前:デフォルトの名無しさん [2007/10/26(金) 20:30:26 ]
- 型がヘンすぎる 勉強不足
- 393 名前:デフォルトの名無しさん [2007/10/26(金) 20:31:42 ]
- >>391
C++は入れない場合も同じ名前に出来る 2つ書けばいい
- 394 名前:デフォルトの名無しさん [2007/10/26(金) 20:33:40 ]
- int hoge( a, b, c, d);を定義して
たとえばcとdを使わないなら、hoge( a, b) { return hoge( a, b , 0 , 0);}
- 395 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 20:34:45 ]
- >>391
NULL を使えばいいと思うよ >>393 ここはC言語のみ C++なら誘導してからにしてください
- 396 名前:391 mailto:sage [2007/10/26(金) 20:39:55 ]
- >>393
すみません、C言語です。 >>394 すみません。 私が関数ではないため動作が変えれないのと、不必要な値は6この引数のうち、 1, 2, 5が不要になったりする場合もあります。 >>395 すみません。 NULLを使うと言うのは、どのようにすればいいのでしょうか? 型を、castするという意味でしょうか?
- 397 名前:391 mailto:sage [2007/10/26(金) 20:48:00 ]
- 連続投稿失礼します。
hoge( &x, &y, NULL, NULL); とすれば、コンパイルは通ったのですが、これは正しいのでしょうか? 簡単に動作を説明して頂けるとありがたいです。
- 398 名前:デフォルトの名無しさん [2007/10/26(金) 20:50:47 ]
- >>397
動作はNULLで通るように自分で書かなければ行けない
- 399 名前:391 mailto:sage [2007/10/26(金) 21:26:43 ]
- >>398
> 自分で書かなければいけない と言うのは、関数をそのように修正すると言うことでしょうか? 関数は自分で作ったもので修正はできないと思います。
- 400 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 21:27:56 ]
- >>399
NULL の指す先を読み書きしないようにするだけ
- 401 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 22:00:33 ]
- >>399
hoge()の仕様がわからないと、引数でNULLを渡していいかどうかは判断できない。
- 402 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 22:44:08 ]
- heightとwidthは>>391が使わないというだけでhogeは内部で値を設定しようとするからNGだと予測する俺エスパー
- 403 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 22:51:54 ]
- まともな関数ならチェックしてるだろうけど・・・
- 404 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:01:40 ]
- 昔はチェックしてたけど不定値渡されて以来チェックするのをやめた
- 405 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:10:28 ]
- >>404
あなたが hoge() か
- 406 名前:デフォルトの名無しさん [2007/10/27(土) 00:15:31 ]
- #include <stdio.h>
int f(int &x){ if(&x==NULL) return -1; return x+10;} int main(){ int x=0; printf("%d\n",f(x));}
- 407 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:23:05 ]
- >>406
それじゃポインタ渡した意味な(ry
- 408 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:29:32 ]
- -1がreturnされることってある?
てか参照渡しってCで使えるの?
- 409 名前:デフォルトの名無しさん [2007/10/27(土) 00:38:22 ]
- #include <stdio.h>
int f(int *x){ if(x==NULL) return -1; return *x+10;} int main(){ int x=0; printf("%d\n",f(NULL));}
- 410 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:42:57 ]
- それがどうしたと言わざるをえない
- 411 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:45:11 ]
- assert(p != NULL); で十分。
- 412 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:50:42 ]
- assertと引数チェックは違うんだぜ・・・
- 413 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:30:01 ]
- 引数チェックが一番の使いどころだろ > assert()
|

|