C言語なら俺に聞け(入門編)Part 60
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/01/31(日) 15:48:19★前スレ
C言語なら俺に聞け(入門編)Part 59
http://pc12.2ch.net/test/read.cgi/tech/1263014439/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 133代目
http://pc12.2ch.net/test/read.cgi/tech/1260532772/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2010/01/31(日) 16:06:22とすると、マイナスの値になりますが、マイナスの値になると何か支障がでるのでしょうか?
下記サイトに、
>ASCIIコードと1バイトのJISコードだけが使用可能です。
>それでもJISコードを使用するときは、unsigned char型である必要があります。
>それは半角カタカナ等が(161〜223)に定義されているためです。
http://c-production.com/contents/c/sec02.html#05
と書かれています。
最上位バイトが立つ文字を扱うときは、unsigned charにしなければならないのでしょうか?
0003デフォルトの名無しさん
2010/01/31(日) 16:12:35正解は無いよ
0004デフォルトの名無しさん
2010/01/31(日) 16:13:46そもそも半角カナ使うこと自体が間違ってる..
とか言ったらこのスレッドでは叩かれちゃう?
0005デフォルトの名無しさん
2010/01/31(日) 16:26:51符号拡張されるから
0006デフォルトの名無しさん
2010/01/31(日) 16:43:05ヨーロッパ言語のアクセント付き文字だってカタカナと変わらん。
ñ á é í ó ú ü ç
œ é è à î ô û ï
0007デフォルトの名無しさん
2010/01/31(日) 17:36:08void disp_2D_array(int nrow, int ncol, double *a_p);
int main(void)
{
int nrow = 3, ncol = 3;
double a[3][3] = {{1.56, 3.24, 5.24}, {3.24, 6.23, 8.16},
{7.32, 2.86, 4.12}};
disp_2D_array(nrow, ncol, &a[0]);
return 0;
}
void disp_2D_array(int nrow, int ncol, double *a_p)
{
int i, j;
for (i = 0; i < nrow; i++) {
for (j = 0; j < ncol; j++) {
printf(" %7.2f", *a_p); a_p++;
}
printf("\n");
}
}
というプラグラムのa_p++;はなにを意味しているのですか?
0008デフォルトの名無しさん
2010/01/31(日) 17:48:400009デフォルトの名無しさん
2010/01/31(日) 17:54:30この部分、
printf(" %7.2f", a_p[i * ncol + j]);
と同じ
0010デフォルトの名無しさん
2010/01/31(日) 18:09:46半角カナはchar1個分なのにマイナスってことじゃないの?
よくわからんけど
0011デフォルトの名無しさん
2010/01/31(日) 19:39:57int main() {
if ('ア' > 0)
printf("plus.\n");
else
printf("minus.\n");
return 0;
}
を実行すると、
minus.
になった。半角カナは負数扱いらしい。
0012デフォルトの名無しさん
2010/01/31(日) 19:52:290013デフォルトの名無しさん
2010/01/31(日) 19:59:34a_p++;
がなくてもfor文があるからいいわけではないんですか?
0014デフォルトの名無しさん
2010/01/31(日) 20:05:470015デフォルトの名無しさん
2010/01/31(日) 20:08:34コンパイラは違いを吸収してくれますか?
0016デフォルトの名無しさん
2010/01/31(日) 20:28:48の区別をあいまいなまま使用しても動いてしまった。
64ビットマシンの処理系はint 32ビット、longとpointerが64ビットのデータモデル
を使っている場合が多い。書き換えが必要になる場合がある。
0017デフォルトの名無しさん
2010/01/31(日) 20:29:32試しにif内の0をunsigned intでキャストして実行してみろ
0018デフォルトの名無しさん
2010/01/31(日) 20:51:51ポインタサイズがちがうということは32BitでビルどしたDLLを64Bitで使うとかすると死ぬわけですね
�dでした
0019デフォルトの名無しさん
2010/01/31(日) 21:01:17とりあえずVisualStudioインストールして少しいじってみたけど分からない
0020デフォルトの名無しさん
2010/01/31(日) 21:04:10自動変換できる風呂グラムでもあれば出来るが
0021デフォルトの名無しさん
2010/01/31(日) 21:22:1364ビットプロセスから32bit dllはロード出来ないから安心しろ。
そこいら辺はOSがよきにはからってくれる。
0022デフォルトの名無しさん
2010/02/01(月) 13:07:44int main(){
int x=1;
int i;
while(x!=0){
printf("数値を入力してください\n止めたい場合は0を入力してください\n");
scanf("%d",&x);
if(x==2)printf("素数です\n");
else if(x==1)printf("素数ではありません\n");
else if(x%2==0)printf("素数ではありません\n");
else {
for (i=3;i<=x;i++){
if(x==i){printf("素数です\n");break;}
else if(x%i==0){printf("素数ではありません\n");break;}
}
}}
return 0;}
素数判定のプログラムですけど、先生からは無駄が多いと言われました
どこを直していけば無駄が少なくスマートなプログラムになります?
0023デフォルトの名無しさん
2010/02/01(月) 13:15:07こんなもんだな
flg=1;
for( i=2; i*i < n; i++ ) if( n%i==0) { flg=0; break; }
if(flg) printf("sosu"); else printf("not sosu");
0024デフォルトの名無しさん
2010/02/01(月) 13:17:42・forループの中で調べるのは奇数だけで十分
・forループ継続条件はi*i<=xで十分
0025デフォルトの名無しさん
2010/02/01(月) 13:24:36つ
http://codepad.org/G74gjU64
#include<stdio.h>
int primechk( int n){
int i;
for( i=2; i*i <= n; i++ ) if( n%i==0) return 0;
return 1; }
int main() {
int n;
for(n=1; n<20; n++)
if(primechk(n))printf("%dは素数です。\n",n);
else printf("%dは素数ではありません。\n",n);
}
0026デフォルトの名無しさん
2010/02/01(月) 13:28:570027デフォルトの名無しさん
2010/02/01(月) 13:29:50いやまぁどうでもいいけど
0028デフォルトの名無しさん
2010/02/01(月) 13:47:39http://codepad.org/5QB8HiAV
#include<stdio.h>
int primechk( int n){
int i;
if(n==1) return 0;
if(n==2) return 1;
if(n%2==0) return 0;
for( i=3; i*i <= n; i+=2 ) if( n%i==0) return 0;
return 1; }
int main() {
int n;
for(n=1; n<=20; n++)
if(primechk(n))printf("%dは素数です。\n",n);
else printf("%dは素数ではありません。\n",n);
}
002922
2010/02/01(月) 13:53:26変数X/2でも十分なのも指摘されて気がつきました
引数の使い方がまだ少しあやふやなので関数は作らないようにしてたんですけど
関数を作った方が大分さっぱりとしたプログラムになりそうですね
どうもありがとうございました
0030デフォルトの名無しさん
2010/02/01(月) 14:55:06これはどこで調べられるんですか。
コンパイラが勝手に定義するんだろうけど。
一覧表とかありますか。
0031デフォルトの名無しさん
2010/02/01(月) 14:56:190032デフォルトの名無しさん
2010/02/01(月) 14:59:38#include "stdafx.h"
#endif
0033デフォルトの名無しさん
2010/02/01(月) 15:11:31VC2008でエラーが出ます。BCCだと平気です。
stdafx.hなしでコンパイルできる方法ないですか。
fatal error C1020: 予期しない #endif です。
0034デフォルトの名無しさん
2010/02/01(月) 15:13:24__TURBOC__
__GNUC__
それぞれのコンパイラのマニュアルを参照するしかない
そもそも stdafx.h 自体要らないのでは?
プリコンパイルヘッダの設定を変えればいいと思う
0035デフォルトの名無しさん
2010/02/01(月) 15:14:090036デフォルトの名無しさん
2010/02/01(月) 15:14:490037デフォルトの名無しさん
2010/02/01(月) 15:17:42プリコンパイル済みヘッダーを使用しない
にしたら出来ました。サンクス
0038デフォルトの名無しさん
2010/02/01(月) 15:34:22マジか
試さずに書いて申し訳なかったが、プリコンパイルヘッダへの
アプローチはBCCの方が正しいと思う
M$は何か変
0039デフォルトの名無しさん
2010/02/01(月) 15:53:49と書こうとしたら既に書かれていた件。
0040デフォルトの名無しさん
2010/02/01(月) 15:58:43をするのが最善
(プリコンパイルドヘッダも当然使う)
0041デフォルトの名無しさん
2010/02/01(月) 18:12:04処理時間を加速する。この時ヘッダファイルが更新されることは
仮定していない。通常のファイルは更新してもおkだが
ヘッダファイルを書き換えた場合は、途中結果をクリーン
してビルドしないとおかしなことになることが多い。
VC周りのトラブルのかなりの部分を占める。
0042デフォルトの名無しさん
2010/02/01(月) 22:04:030043デフォルトの名無しさん
2010/02/01(月) 22:28:39あるキーが押されている時はAの処理で、
押されていない時はBの処理、としたいのですが、
if( Buf[ KEY_INPUT_Z ] == 1 )
{処理A}
else
{処理B}
キーを押してAの処理は実行されるのですが、
キーを押すのを止めても、処理Bが実行されません。
独自に本などでC言語を勉強したので、
結構難しい問題も解けるようになったのですが、
実技?は全く駄目です。
よろしくお願いします。
0044デフォルトの名無しさん
2010/02/01(月) 22:32:16GetHitKeyStateAll 関数が呼ばれた時点でのキーボード情報をどっかに保存するだけでしょ
0045デフォルトの名無しさん
2010/02/01(月) 22:38:47とすると、常にあるキーの状態を監視しようとすると、
while文を使えばいいのでしょうか?
0046デフォルトの名無しさん
2010/02/01(月) 22:38:49ループさせればいいじゃん
004743
2010/02/01(月) 22:40:25やってみます。
0048デフォルトの名無しさん
2010/02/01(月) 22:55:21(変数定義割愛)
for(i=0;i<10;i++)
{
a=x[i]*i; //"x"は数列だとします
}
まぁ、ざっとこのような"a"を作ったとして、
「もしすべての"a"が同じ値をとるなら」
というif文を作りたい場合、
if(???){ ←はどのように書けばいいでしょうか?
質問が雑だし初歩的ですみませんが、よろしくお願いします。
0049デフォルトの名無しさん
2010/02/01(月) 23:00:09int all_chk(int *a){
int b=a[0];
for(i=1;i<10;i++)if(b!=a[i])return 0;
return 1;
}
0050デフォルトの名無しさん
2010/02/01(月) 23:02:45これを参考に勉強します。
大変ありがとうございました。
0051推奨
2010/02/01(月) 23:03:52後から読み返して理解出来ず書き直さないですませることを
前提とした書き方
int a[i],b;
for(i=0;i<1000000;i++){
a[i]=x[i]*i;
}
b=1;
for(i=1;i<100000;i++){
b=b &( (a[i-1]==a[i])?1: 0);
}
if(b!=0){
.....全部一致の場合
}else{
....一部不一致のものがある場合
}
0052デフォルトの名無しさん
2010/02/01(月) 23:16:12for(i=0; i<10; i++) if(x[i]) break;
if(i==10)
0053デフォルトの名無しさん
2010/02/01(月) 23:43:59i==0 のとき a==0
∴x[0]は任意 かつ i!=0 のとき x[i]==0
0054デフォルトの名無しさん
2010/02/01(月) 23:45:09for(a=0,i=0;i<10;++i)a+=x[i];return !a;
i=0;do{if(!i<10)return true;}while(!x[i++]);return false;
0055デフォルトの名無しさん
2010/02/01(月) 23:47:46for(i=1;i<10; i++)
0056デフォルトの名無しさん
2010/02/02(火) 00:52:54例えば
void A[0]()
{
.............
}
void A[1]()
{
.............
}
void A[2]()
{
.............
}
呼び出すとき
A[i]();
こんな感じで
0057デフォルトの名無しさん
2010/02/02(火) 00:56:00無理
呼び出す方かどこかで関数ポインタの配列を持って
それで分岐するなら可能
0058デフォルトの名無しさん
2010/02/02(火) 01:19:04ありがとうございます
解決できました
0059デフォルトの名無しさん
2010/02/02(火) 01:20:16int a[10]の0番目の要素を見てfor文を回したいんですよ
0060デフォルトの名無しさん
2010/02/02(火) 01:21:14やっちまったな!
男は黙って↓
0061デフォルトの名無しさん
2010/02/02(火) 01:25:450062デフォルトの名無しさん
2010/02/02(火) 01:32:09for(;ここに条件式を書きなさい;){}
0063デフォルトの名無しさん
2010/02/02(火) 01:41:20int a[10]={0 , 10 ,10, 10, 10, 10, 10, 10, 10, 10};
for(a[10] ; a[10] <10 ; a[10]++)
{
}
です。
0064デフォルトの名無しさん
2010/02/02(火) 01:42:040065デフォルトの名無しさん
2010/02/02(火) 01:52:36そうでした。。。
ありがとうございます
0066デフォルトの名無しさん
2010/02/02(火) 05:35:42コンパイル時にdefineのように扱われるのかな
0067デフォルトの名無しさん
2010/02/02(火) 06:48:01str = {"2","3","4"}
っていれたあとは、str[3]〜[9]は空ですよね?
これを削除してstr[3]に変えることってできますか?
0068デフォルトの名無しさん
2010/02/02(火) 06:49:23わかりづらくてすいません。
0069デフォルトの名無しさん
2010/02/02(火) 06:54:22はいりません。
> str[3]〜[9]は空ですよね?
空の定義は?
0070デフォルトの名無しさん
2010/02/02(火) 09:25:100071デフォルトの名無しさん
2010/02/02(火) 10:43:32for(int n1 = 0; n1 < 10; ++n1){
for(int n2 = 0; n2 < 10; ++n2){
for(int n3 = 0; n3 < 10; ++n3){
/* ある処理 */
}
}
}
このように書くと,変数が10個100個と増えた場合階層が深くなりすぎて大変です。
変数の数が増えてもすぐ対応できるシンプルな記述方法はないでしょうか。
0072デフォルトの名無しさん
2010/02/02(火) 10:49:370073デフォルトの名無しさん
2010/02/02(火) 11:08:38#include <stdio.h>
int *next(int *is, int size, int max) {
int i;
for (i = 0; i < size; ) {
(*(is + i))++;
if (max < *(is + i)) {
(*(is + i)) = 0;
i++;
} else {
return is;
}
}
return 0;
}
int main() {
int i, nums[3] = {0}, *p;
for (p = nums; p; p = next(nums, 3, 9)) {
printf("%d %d %d\n", nums[0], nums[1], nums[2]);
}
return 0;
}
実装はヘボイが、狙いは見ての通り。
0からmaxまででint配列の要素を増やしていく。
あとは、その配列を使う。
0074デフォルトの名無しさん
2010/02/02(火) 11:09:23頭が固くてぱっとは見えませんが調べる方向はわかりました。
どうもありがとうございます。
0075デフォルトの名無しさん
2010/02/02(火) 11:13:45おおありがとうございます><
0076デフォルトの名無しさん
2010/02/02(火) 11:14:45/*any処理*/;
0077デフォルトの名無しさん
2010/02/02(火) 11:18:10for(int n1 = 0; n1 < 10; ++n1)
for(int n2 = 0; n2 < 10; ++n2)
for(int n3 = 0; n3 < 10; ++n3)
{
/* ある処理 */
}
とすれば深くならないぞ
for文を10個も100個も並べる面倒さは変わらないが・・・
0078デフォルトの名無しさん
2010/02/02(火) 11:21:00俺の記述がバグってただけかもしれないが、
八回までは正常に再帰してくれるけど、
九回からはおかしくなる、九回目の呼び出しがされなかった覚えが。
八回目までで勝手に引き返してきた覚えが。
0079デフォルトの名無しさん
2010/02/02(火) 11:23:16よっぽどスタックが浅いのか、あるいは局所変数がデカいのか。
0080デフォルトの名無しさん
2010/02/02(火) 11:54:57それは本当に再帰の限界だったのか?
再帰に限ったことではなくループや順次でも n 回目からおかしいといバグは出るが
それだけでループが n 回までに制限されているという結論は出せないだろ
0081デフォルトの名無しさん
2010/02/02(火) 12:23:5910個100個になるのは異常
深くならないように工夫する
>72
ふ〜ん、考えてみるか
>73
大域変数とプロシジャでも使うのか
>76
100個になったときを想像したら
0082デフォルトの名無しさん
2010/02/02(火) 12:50:57さらっと書いてあったので簡単かと思いきや
nextの動きを理解するのにめちゃ時間かかってしまったw
日常的に使われるテクニックなんでしょうか。
>>77
数個程度のオーダーなら一番読みやすいですね。
どうもありがとうございます。
再帰についてはこれから調べてみます。
0083デフォルトの名無しさん
2010/02/02(火) 12:54:10> 100個になったときを想像したら
プログラムで生成すればいい。コンパイラリミットとの戦いになるけど。w
0084デフォルトの名無しさん
2010/02/02(火) 13:02:35for(i=0; i<pow(10,n); i++) {
n0 = i % 10;
n1 = (i / 10) % 10;
n2 = (i / 100) % 10;
....
008573
2010/02/02(火) 13:25:38日常的に使われるかどうかは分かりません。
必要に迫られてひねり出した苦肉の策です。
もとは、再帰でやっていたのですが、
再帰が深くなりすぎると失敗するみたいなので、
配列を使うことした、ということです。
0086デフォルトの名無しさん
2010/02/02(火) 14:30:19int x[100];
for(x[0]=0;x[0]<3;x[0]++)
for(x[1]=0;x[1]<3;x[1]++)
for(x[2]=0;x[2]<3;x[2]++)
.....
for(x[99]=0;x[99]<3;x[99]++)
....
これが現在最速のPCですら、まともな時間で動作する
ような計算量ではない件
0087デフォルトの名無しさん
2010/02/02(火) 14:36:360088デフォルトの名無しさん
2010/02/02(火) 17:36:45#define MAX 3
int num[MAX] = {0, 1, 2
となってるときに2をしてするなら
num[3]
だと思うのですがMAXを使って2を指定するには
どうすればいいですか
0089デフォルトの名無しさん
2010/02/02(火) 17:39:220090デフォルトの名無しさん
2010/02/02(火) 17:42:03なるほどキモイね
イイ意味で
0091デフォルトの名無しさん
2010/02/02(火) 17:42:03num[MAX-1]にすれば、2を取り出すことは出来る
0092デフォルトの名無しさん
2010/02/02(火) 17:43:13> num[3]
うんにゃ 戻りが2を指す場所は num[2] だ。 (配列の添え字は 0 から始まるので)
int hoge[] = { 5, 4, 3 };
hoge[0] → 5
hoge[1] → 4
hoge[2] → 3
な
> だと思うのですがMAXを使って2を指定するには
> どうすればいいですか
num[MAX-1] とでも書く
int foo[MAX] と MAX個の器を用意した場合には 0〜MAX-1 で参照するんだぜー
0093デフォルトの名無しさん
2010/02/02(火) 17:48:51str = {"234"}
っていれたあとは、str[3]〜[9]は何もはいってないですよね?
このはいってない部分を削除することできる?
容量を小さくしたいんですが、strに入れる文字列の長さが毎回違うので。
0094デフォルトの名無しさん
2010/02/02(火) 17:50:050095デフォルトの名無しさん
2010/02/02(火) 17:50:240096デフォルトの名無しさん
2010/02/02(火) 17:52:44str = {"234"}
この代入が可能なのは C99 から?
0097デフォルトの名無しさん
2010/02/02(火) 17:53:33maximumがゼロからカウントするかどうかに関わらず容量と
009888
2010/02/02(火) 17:55:41で動きました。ありがとうございます
0099デフォルトの名無しさん
2010/02/02(火) 18:00:440100デフォルトの名無しさん
2010/02/02(火) 18:01:27yes
0101デフォルトの名無しさん
2010/02/02(火) 18:03:25>何もはいってないですよね?
いや、何だかわからない値が入っている。
0102デフォルトの名無しさん
2010/02/02(火) 18:06:59str[3] は '\0' 固定じゃね?
0103デフォルトの名無しさん
2010/02/02(火) 18:09:38しかし毎回変わるというのがグローバルっぽくないのだが、
容量を小さくしたい、というからにはグローバルなんだろうか。
0104デフォルトの名無しさん
2010/02/02(火) 18:11:19記憶クラスによる
0105デフォルトの名無しさん
2010/02/02(火) 18:12:53char str[3][10];
str[0][10]〜str[2][10]に入れる文字列の長さが違ってもサイズ無駄なく格納できますか?
0106デフォルトの名無しさん
2010/02/02(火) 18:14:09すきまができますね。
0107デフォルトの名無しさん
2010/02/02(火) 18:16:25から
>char str[3][10];
の類推の段階で、無駄なくつめることができていない
char* str[3]
ならそう記述する可能性は高まるけど…
ポインタと配列に関することは大丈夫か? と不安になる返答だね
0108デフォルトの名無しさん
2010/02/02(火) 18:18:02オレも気になる
0109デフォルトの名無しさん
2010/02/02(火) 18:52:071^Inbsp;^Inbsp;int
2^Inbsp;^Inbsp;foo(void)
3^Inbsp;^Inbsp;{
4^Inbsp;^Inbsp;^Inbsp;^Inbsp;char *foo;
5^Inbsp;^Inbsp;^Inbsp;^Inbsp;char bar[10];
6^Inbsp;^Inbsp;
7^Inbsp;^Inbsp;^Inbsp;^Inbsp;foo = (char []){"abc"};
8^Inbsp;^Inbsp;^Inbsp;^Inbsp;// 下と同じ
9^Inbsp;^Inbsp;^Inbsp;^Inbsp;// foo = (char []){'a', 'b', 'c', '\000'};
10^Inbsp;^Inbsp;
11^Inbsp;^Inbsp;^Inbsp;^Inbsp;// foo = {"abc"};
12^Inbsp;^Inbsp;^Inbsp;^Inbsp;// error : 左ブレースが異常
13^Inbsp;^Inbsp;
14^Inbsp;^Inbsp;^Inbsp;^Inbsp;foo[0] = 'q';
15^Inbsp;^Inbsp;^Inbsp;^Inbsp;// ok : 書き換え可能
16^Inbsp;^Inbsp;
17^Inbsp;^Inbsp;^Inbsp;^Inbsp;foo = (char *){"abc"};
18^Inbsp;^Inbsp;^Inbsp;^Inbsp;// foo = "abc"; と似たようなもの
19^Inbsp;^Inbsp;
20^Inbsp;^Inbsp;^Inbsp;^Inbsp;// foo = (char *){'a', 'b', 'c', '\000'};
21^Inbsp;^Inbsp;^Inbsp;^Inbsp;// warning : 初期化子が多い
22^Inbsp;^Inbsp;
23^Inbsp;^Inbsp;^Inbsp;^Inbsp;// foo[0] = 'q';
24^Inbsp;^Inbsp;^Inbsp;^Inbsp;// maybe : foo : char const *
25^Inbsp;^Inbsp;
26^Inbsp;^Inbsp;^Inbsp;^Inbsp;// bar = (char []){"abc"};
27^Inbsp;^Inbsp;^Inbsp;^Inbsp;// error : bar : char * const
28^Inbsp;^Inbsp;^Inbsp;^Inbsp;(void)bar;
29^Inbsp;^Inbsp;
30^Inbsp;^Inbsp;^Inbsp;^Inbsp;return 0;
31^Inbsp;^Inbsp;}
0110デフォルトの名無しさん
2010/02/02(火) 18:53:441 int
2 foo(void)
3 {
4 char *foo;
5 char bar[10];
6
7 foo = (char []){"abc"};
8 // 下と同じ
9 // foo = (char []){'a', 'b', 'c', '\000'};
10
11 // foo = {"abc"};
12 // error : 左ブレースが異常
13
14 foo[0] = 'q';
15 // ok : 書き換え可能
16
17 foo = (char *){"abc"};
18 // foo = "abc"; と似たようなもの
19
20 // foo = (char *){'a', 'b', 'c', '\000'};
21 // warning : 初期化子が多い
22
23 // foo[0] = 'q';
24 // maybe : foo : char const *
25
26 // bar = (char []){"abc"};
27 // error : bar : char * const
28 (void)bar;
29
30 return 0;
31 }
0111デフォルトの名無しさん
2010/02/02(火) 18:56:580112デフォルトの名無しさん
2010/02/02(火) 23:17:10ttp://codepad.org/
長いソースを貼るときはここへ!
ってテンプレートに入れようぜ。
0113デフォルトの名無しさん
2010/02/02(火) 23:38:540114デフォルトの名無しさん
2010/02/02(火) 23:50:30検証下手だなぁ
0115デフォルトの名無しさん
2010/02/03(水) 00:34:09の配列の各要素の大小関係を比べるプログラムをfor文で作りたんですけど
どうすればいいですか?
0116デフォルトの名無しさん
2010/02/03(水) 00:36:390117デフォルトの名無しさん
2010/02/03(水) 00:37:09バブルソートでググればおk
0118デフォルトの名無しさん
2010/02/03(水) 00:41:28わかりました。
宿題スレに行きます
0119デフォルトの名無しさん
2010/02/03(水) 11:56:080120デフォルトの名無しさん
2010/02/03(水) 12:31:20これ?
プログラミングはプロポーショナルフォントの方が読みやすい ?
http://slashdot.jp/developers/article.pl?sid=10/01/20/025204
0121デフォルトの名無しさん
2010/02/03(水) 14:21:11#define HOO foo という定義を含むファイルをincludeした場合
includeした側にもこのマクロが適用されると言うことでしょうか
0122デフォルトの名無しさん
2010/02/03(水) 14:23:36yes
そうでないと インクルードガードが効かなくなっちゃう
0123デフォルトの名無しさん
2010/02/03(水) 14:24:03意識しなくても標準ライブラリで#defineされたものを普通に使ってると思うけど
0124デフォルトの名無しさん
2010/02/03(水) 14:27:41ありがとうございました
0125デフォルトの名無しさん
2010/02/03(水) 17:16:34以下のままでは文字列終端のNULL処理がされていないと言われました
mojiC[100]の中身を初期化した時点でNULL処理できている気がするんですが
#include<stdio.h>
int main(void) {
/* 連結した文字列を格納するのに十分な長さの配列 */
char mojiC[100] ;
/* 連結元の文字列 */
char mojiB[] = "World" ;
char mojiA[] = "Hello" ;
/* 連結を行うプログラム */
int i, j;
for(i=0;i<100;i++){ //mojiC[100]の中身を初期化
mojiC[i]=0;
}
for(i=0;mojiA[i]!=0;i++){ //mojiC[100]にmojiA[]の中身をコピー
mojiC[i]=mojiA[i];
}
for(i=0,j=0;mojiC[i]!=0;i++,j++){
}
for(i=0;mojiB[i]!=0;i++,j++){ //mojiC[100]にmojiB[]の中身をコピー
mojiC[j]=mojiB[i];
}
printf("%s\n", mojiC) ; /* HelloWorld と表示 */
return(0) ;
}
0126デフォルトの名無しさん
2010/02/03(水) 17:19:350127デフォルトの名無しさん
2010/02/03(水) 17:22:27どんな長さでも動くようにするには、動的確保。
あと初期化する必要なし、手間がかかる。
動的確保 -> memcpyでデータ配置 -> 最後にNULL付加でよし
0128デフォルトの名無しさん
2010/02/03(水) 17:24:54>文字列終端のNULL処理
NULL じゃねえ、'\0' 或いは NUL。
てのは置いといて、
>できている気がするんですが
できてる。
無駄は多いけどな。
(2つ目のループは j = i; とすれば要らないだろ、とか)
0129デフォルトの名無しさん
2010/02/03(水) 17:26:39char c = '\0'がそれ。
あと、char mojiC[100] = {'\0'};こういうことをしておけば、
「mojiC[100]の中身を初期化」の部分は不要。
ただ、普通は配列を初期化なんぞしないで、
文字列をコピーした最後に'\0'をくっつけるのフツー。
0130デフォルトの名無しさん
2010/02/03(水) 17:27:34こんなふうだ。
mojiwa(char *p, char *a ,char *b,){
int m=strlen(a);
int n=strlen(b);
char *p = (char *)malloc(m+n);
memcpy(&p[0],a,m);
memcpy(&p[m],b,n);
p[m+n]=NULL;;
}
0131デフォルトの名無しさん
2010/02/03(水) 17:27:490132デフォルトの名無しさん
2010/02/03(水) 17:32:38>memcpyつかった方が転送効率良いよ。
それ言うなら strcat 使え、って話に…
まあ習作なんだろうから、自分でコピーしてみるのはアリかも知れん。
0133デフォルトの名無しさん
2010/02/03(水) 17:34:06ですよねー
0134デフォルトの名無しさん
2010/02/03(水) 17:36:45やべぇ、何やってんのかさっぱりわからん
0135デフォルトの名無しさん
2010/02/03(水) 17:37:00最初にj=0にしておけば、mojiCへの代入はすべて
mojiC[j++]= とやれば途中のj++の部分は全部消せる。
最後にmojiC[j++]='\0';とかいれとけ
0136デフォルトの名無しさん
2010/02/03(水) 17:43:510137デフォルトの名無しさん
2010/02/03(水) 18:14:08車輪の再発明で悦に入る行為かもな
内容は同じなライブリ関数を自作して使用するの
は悪いこととは限らないといった程度
0138やってみた
2010/02/03(水) 18:16:48memcopy(void *d1, const void *s1, size_t sz)
{
char *d2 = d1;
const char *s2 = s1;
while (sz-- > 0)
*d2++ = *s2++;
return d1;
}
0139デフォルトの名無しさん
2010/02/03(水) 19:02:080140デフォルトの名無しさん
2010/02/03(水) 19:03:450141デフォルトの名無しさん
2010/02/03(水) 19:18:46日本のイット業界なんかアルゴリズム詳しく知らなくても仕事できちゃうもん。
あはは。
0142推奨
2010/02/03(水) 19:51:46というのはあるかも知れないが
いつの時代でもコンスタントにそれが
出来るとは限らない
とりわけ露出狂時代にはね。
0143デフォルトの名無しさん
2010/02/03(水) 22:53:58だって、技術者じゃなくドカタだもん
0144デフォルトの名無しさん
2010/02/03(水) 23:07:140145デフォルトの名無しさん
2010/02/03(水) 23:08:48Wikipedia読んで、それでもわからなかったら、丸一日考えて、
それでもわからなかったら、何がわからないのか質問しなさい。
0146デフォルトの名無しさん
2010/02/04(木) 09:22:26いーっぽすすんでまえならえ〜♪
0147デフォルトの名無しさん
2010/02/04(木) 10:37:05それか明示的にエンディアン指定できるpragmaとかあればいいんだけど
0148デフォルトの名無しさん
2010/02/04(木) 11:23:22ttp://www5d.biglobe.ne.jp/~noocyte/Programming/CMacros.html#DetermineEndian
0149デフォルトの名無しさん
2010/02/04(木) 15:43:38/* 整数の2進表現を下位から表示 */
int main(void)
{
int n, b;
n = 0;
do {
b = n % 2;
printf("%d\n", b);
n /= 2;
} while (n > 0);
return 0;
}
このプログラムをn=0にしたときに同じ結果を得るにはどうしたらいいのですか?
0150デフォルトの名無しさん
2010/02/04(木) 15:46:260151デフォルトの名無しさん
2010/02/04(木) 15:48:50何と同じにするのか分からん
0152デフォルトの名無しさん
2010/02/04(木) 15:58:592進数はビット演算子を使うのが常套手段じゃないのかな?
int n;
n = 15;
do {
printf("%d\n", n & 1);
} while ((n >>= 1) > 0);
0153デフォルトの名無しさん
2010/02/04(木) 16:03:200154デフォルトの名無しさん
2010/02/04(木) 16:14:42int main() {
int n = 7, i;
for (i = 0; i < sizeof n * 8; i++) {
printf("%d\n", !!(n & (1 << i)));
}
return 0;
}
0155デフォルトの名無しさん
2010/02/04(木) 16:35:11質問者は書いてみてくれないか
0156デフォルトの名無しさん
2010/02/04(木) 22:06:21入力待ちをはさんでenter一回押して
次いくようにするにはどうすればいいですかね?
0157デフォルトの名無しさん
2010/02/04(木) 22:09:200158デフォルトの名無しさん
2010/02/04(木) 22:14:17void wait(void){
wchar_t enter[1];
fgetws(enter, 1, stdin);
while(getwchar() != L'\n');
}
0159デフォルトの名無しさん
2010/02/04(木) 22:20:24'\n' より先に EOF がくると無限ループしない?
0160156
2010/02/04(木) 22:42:16char wait;
scanf("%c",&wait);
0161デフォルトの名無しさん
2010/02/04(木) 23:17:58int a=0;
〜 プログラム 〜
/* ここで、一旦0にリセットしたい。 */
〜 プログラム 〜
0162デフォルトの名無しさん
2010/02/04(木) 23:23:40代入ならできる
0163デフォルトの名無しさん
2010/02/04(木) 23:27:57単純なことを忘れてました。
0164デフォルトの名無しさん
2010/02/04(木) 23:31:05代入って代わりに入れるんですよね
どこに代わりに入れるんですか
0165デフォルトの名無しさん
2010/02/04(木) 23:56:15161の例でならaでしょ
0166158
2010/02/05(金) 00:35:30有り難う御座います
Ctrl+ZでEOFを入力したところ無限ループにはならなかったのですが
入力した文字にEOFが含まれていると、fgetwsがもう一度入力を求めるような挙動になりました
これはどういうことなんでしょうか
0167デフォルトの名無しさん
2010/02/05(金) 14:36:24メモリを
freadやfgetsとかする方法って無いですか?
0168デフォルトの名無しさん
2010/02/05(金) 14:43:050169デフォルトの名無しさん
2010/02/05(金) 14:44:05こいつは何がやりたいんだろう
0170デフォルトの名無しさん
2010/02/05(金) 14:50:550171デフォルトの名無しさん
2010/02/05(金) 14:58:18定形郵便
長さが14〜23.5cm、幅が9〜12cm、厚さが1cmまでのもの
重さが50gまでのもの
封書の長さ、幅、厚さ、及び重さを与えて、次の表から郵便料金を計算する。
定形外郵便
上記の条件をオーバーしているもの。
郵便料金
25gまで 定形80円 定形外130円
50gまで 定形90円 定形外130円
100gまで 定形外 190円
250gまで 定形外 270円
500gまで 定形外 390円
1kgまで 定形外 700円
2kgまで 定形外 950円
3kgまで 定形外 1150円
4kgまで 定形外 1350円
なお、次の条件を満たしていない場合は、第1種の郵便物の取り扱いとならないので、その旨の表示を行う。
長さが14cm以上60cm以下である。
幅が9cm以上である
長さ+幅+厚さが90cm以上である。
重さが4kg以下である。
つまりこの条件にひとつでも当てはまれば、(この郵便物は取り扱いできません。)と表示させれば大丈夫です。
0172デフォルトの名無しさん
2010/02/05(金) 14:59:41↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 133代目
http://pc12.2ch.net/test/read.cgi/tech/1260532772/
0173デフォルトの名無しさん
2010/02/05(金) 15:00:23宿題なら専門スレにどうぞ
0174デフォルトの名無しさん
2010/02/05(金) 15:01:250175デフォルトの名無しさん
2010/02/05(金) 15:02:07今までパッケージしていなかったファイルを
パッケージ化して一部取り出してメモリに格納して処理したい
一時ファイルを作らずにやりたい
で、ファイルでやっていた処理を
メモリ版として使いたい
なるべくソース書き換えたくない
freadならなんとかなるけど
fgets,fscanfとか書き換えるのめんどい
fopenをなんとかしたらなりそうな気がするけど無理か
0176175
2010/02/05(金) 15:02:57宿題スレで聞いた方がいい?
0177デフォルトの名無しさん
2010/02/05(金) 15:04:23趣味か?
まさか業務じゃあるまい。
0178デフォルトの名無しさん
2010/02/05(金) 15:06:480179デフォルトの名無しさん
2010/02/05(金) 15:11:56FILE *tmpfile(void);
で一時ファイルを作るのがいいと思う
実際にファイルが作られるかどうかは実装依存だけど
小さなものならメモリ上でうまくやってくれそうな気はする
0180デフォルトの名無しさん
2010/02/05(金) 15:15:040181デフォルトの名無しさん
2010/02/05(金) 15:16:28fscanf等、文字列系の処理がうまくいかない気がする
0182デフォルトの名無しさん
2010/02/05(金) 15:24:350183デフォルトの名無しさん
2010/02/05(金) 15:25:28C言語の質問です。 mallocなどで確保した任意のメモリ領域をFILE構造体、またはファイルディスクリプタとして扱う方法はないでしょうか? OSに依存した方法でもかまわな.. - 人力検索はてな
http://q.hatena.ne.jp/1212571670
0184デフォルトの名無しさん
2010/02/05(金) 15:28:510185デフォルトの名無しさん
2010/02/05(金) 15:30:26fopen_b( data , size , "rt" )
ってな感じに書き換えるだけで無いかなと
directXで言うD3DXCreateTextureFromFile、D3DXCreateTextureFromFileInMemoryみたいな
コード書き換えるか一時ファイル作ります
ありがとうございました
0186デフォルトの名無しさん
2010/02/05(金) 15:32:06うわああ
それです。
ありがとうございます
ありがとうございます
0187デフォルトの名無しさん
2010/02/05(金) 16:50:40うわああ
なんどもありがとうございますといってくれて
ありがとうございます
ありがとうございます
0188デフォルトの名無しさん
2010/02/05(金) 19:08:310189デフォルトの名無しさん
2010/02/05(金) 20:24:080190デフォルトの名無しさん
2010/02/05(金) 20:54:250191デフォルトの名無しさん
2010/02/05(金) 21:05:41{
}
と書くと、無限に動き続けるのはなぜですか?
0.1を1に直すと正常に動くので、小数のせいかなとも思ったのですが、
{}の中で、0.1刻みの計算をしたいのです。
0192デフォルトの名無しさん
2010/02/05(金) 21:09:380193デフォルトの名無しさん
2010/02/05(金) 21:13:11ちゃんと動くようになりました。
0194デフォルトの名無しさん
2010/02/05(金) 21:26:060195デフォルトの名無しさん
2010/02/05(金) 22:00:04誤差率 a %
のように表示させたいのですが、半角の%だと表示されません。
全角を使うしかないのでしょうか?
0196デフォルトの名無しさん
2010/02/05(金) 22:04:45%%
0197デフォルトの名無しさん
2010/02/05(金) 22:05:470198デフォルトの名無しさん
2010/02/05(金) 22:08:370199デフォルトの名無しさん
2010/02/06(土) 00:43:250200デフォルトの名無しさん
2010/02/06(土) 01:27:470201デフォルトの名無しさん
2010/02/06(土) 06:55:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10495.txt
コマンドプロンプトでは上手く表示されるのに、datファイルを開こうとすると
「Null文字を含むファイルです。Null文字は半角スペースへ変換しました。」
となり、文字化けしてしまいます。
文字化けを防ぐにはどうすればいいですか?
0202デフォルトの名無しさん
2010/02/06(土) 07:04:04じゃなくて、
“このプログラムを使用して作成したdatファイルをテキストエディタ(TeraPad)で開こうとすると”
だろ。
このプログラムが作成しているのはテキストファイルじゃなくてバイナリファイルだから当然だ。
0203うんこ
2010/02/06(土) 15:57:07コンパイラ:Borland C++ 5.5.1 for Win32
ttp://homepage2.nifty.com/jr-kun/hidemaru_qa/make_dll.html#intro
上記のサイトを参考に秀丸エディタで利用できる「hello world!」を表示するDLLを作る方法を勉強しています
hidemaru.cというファイルに以下の内容を書きました↓
#define HIDEMARU_MACRO_DLL __declspec(dllexport)
HIDEMARU_MACRO_DLL /* __declspec(dllexport) */
LPCSTR hello(void) /* LPCSTR は const char* の typedef */
{
return "hello world!";
}
コマンドラインから「bcc32 -WD -hello_world.dll hidemaru.c」と打ったのですがエラーになってdllが作成されません
エラー内容→bcc32 -WD -hello_world.dll hidemaru.c
どのように修正したらdllが作れるのかどなたかご教示お願いします
0204デフォルトの名無しさん
2010/02/06(土) 16:23:190205デフォルトの名無しさん
2010/02/06(土) 16:24:21http://kineko.dyndns.org/~touhou/up/source/up3665.zip
0206デフォルトの名無しさん
2010/02/06(土) 18:45:45#include <windows.h>
0207デフォルトの名無しさん
2010/02/06(土) 20:18:23{
char *str;
void *buf;
buf = (void*) malloc( size );
if ( buf == NULL ) {
str = strerror( errno );
fprintf( stderr, "malloc failed (%s): %s\n size: %d\n", name, str, size );
exit( EXIT_FAILURE );
}
return( buf );
}
のとこで
malloc failed (left): Not enough space
size: 7064
ってでたんだけど容量不足?
0208デフォルトの名無しさん
2010/02/06(土) 20:35:44おそらく容量不足なんだろうね
もしくはメモリ管理してる部分を破壊したか
0209203
2010/02/06(土) 20:44:44エラー貼り付け忘れましたすみませんでした。
大変分かりやすいソースコードをアップしてくださり頂きありがとうございました。
頂きましたソースコードを元に勉強してみます
0210デフォルトの名無しさん
2010/02/06(土) 21:50:40>C/C++ 言語の経験者にとっては、お馴染みの作業かもしれませんが
>Java から C# 言語に移行してきた人であれば、ポインタの威力を肌で感じることでしょう
voidのポインタを調べていたら、こんな記事を発見
これでは偉そうな事を言っているけど、Javaとか.netのobjectと同じなんですよね?
無理やりObjectクラスを作っているような気がする
0211デフォルトの名無しさん
2010/02/06(土) 21:56:50だけど、sizeが大きすぎるのが問題?小さすぎるのが問題??
0212デフォルトの名無しさん
2010/02/06(土) 22:37:212 それ以前にメモリアロケータが管理用に使用している領域を破壊した。
オレの勘では2
0213デフォルトの名無しさん
2010/02/06(土) 22:48:461だとfree()つかってれば開放してれば問題ない??
2は解決策ありますか?
0214デフォルトの名無しさん
2010/02/06(土) 22:52:060215デフォルトの名無しさん
2010/02/07(日) 02:22:5395とかNTの時代には結構あったけど
0216デフォルトの名無しさん
2010/02/07(日) 03:11:26Object型ってメモリ・マップドI/Oに利用出来るの?
0217デフォルトの名無しさん
2010/02/07(日) 03:27:08リアルタイム系OSの場合は規定時間以内に処理が出来なかった
場合はtime_outフラグを設定してエラー値を返すように
拡張されている標準関数も多いです。
mallocもその例外ではなく、指定時間以内にallocに成功しなかった
(システムがディスクスワップやI/Oで忙しい時とか)場合は
NULLが返ってくるでしょう。これは勿論メモりが不足している
という意味ではありません。暫く待ってからリトライして
くれという意味になります。
0218デフォルトの名無しさん
2010/02/07(日) 09:40:38質問スレッドであって知識をひけらかすスレッドじゃない。
元質問者のレベルを推測して発言しようね。
0219デフォルトの名無しさん
2010/02/07(日) 10:21:32標準ライブラリと同じ名前で動作が違う関数なんて使いにくそう。
0220デフォルトの名無しさん
2010/02/07(日) 11:22:03使う側から見れば便利だけど、カーネルの中のつくりは大変そうだ。
タイムアウトになったら、そこまでのカーネルの中の処理は全部
キャンセルなんでしょ?
ロックの粒度が荒くなって、ヘタするとこの仕様自体が処理遅延の
要因になりかねないな
0221デフォルトの名無しさん
2010/02/07(日) 11:32:24「じゃ諦めます」てなアプリがどれくらい含まれてるかも考慮する必要があるしね
0222デフォルトの名無しさん
2010/02/07(日) 11:45:05最悪実行時間が計れない
必要なページはあらかじめ全部読み込んでおかないと
0223デフォルトの名無しさん
2010/02/07(日) 12:14:45いまgccで試してみたら2GBで失敗した。ちなみにWinXPで物理メモリは3.25GB。
0224デフォルトの名無しさん
2010/02/07(日) 12:23:49最初の質問をrefer
0225デフォルトの名無しさん
2010/02/07(日) 12:31:410226デフォルトの名無しさん
2010/02/07(日) 14:02:29OS起動時に/3GBオプション設定してる?
0227デフォルトの名無しさん
2010/02/07(日) 14:12:23mallocで2GB以上割り当てようとしたらエラーになるだろ
0228デフォルトの名無しさん
2010/02/07(日) 14:28:15逆。プロセスのロジックは若干増える。
システムに協調的にしなければならない
から。システムコールする度にそれに
かかった時間もプロセスのどっかに書
かれて戻るからそれを見て処理手順
をプロセスレベルで変更できる。
0229デフォルトの名無しさん
2010/02/07(日) 18:10:16name[0]="山田" name[1]="鈴木" name[3]="佐々木"
のようにしたいのですが
初心者なので変な質問かもしれませんが、代案があれば教えていただきたいです。
0230デフォルトの名無しさん
2010/02/07(日) 18:13:06nameがcharの配列の配列であることを前提として、strcpy。
0231デフォルトの名無しさん
2010/02/07(日) 18:20:30初心者はC++STLが一番。
name[0]="山田";と出来るぞ
0232デフォルトの名無しさん
2010/02/07(日) 18:22:53char name[4][10]={"渡辺","佐藤","山田","井上"};
0233デフォルトの名無しさん
2010/02/07(日) 18:27:110234デフォルトの名無しさん
2010/02/07(日) 18:28:260235デフォルトの名無しさん
2010/02/07(日) 18:29:59char *name[]={"渡辺", "鈴木", "佐々木"};
でいいのでは
0236229
2010/02/07(日) 18:34:22こんなにすぐに回答していただいて、びっくりしました(^^)
0237デフォルトの名無しさん
2010/02/07(日) 19:43:19gcc -o b.exe daytimetcpcli.c でコンパイルすると下記のエラーが出てしまいます。
ソースは提供されているソースをコンパイルしたものですが、どのようにすれば
コンパイルが成功するのでしょうか?よろしくお願いいたします
In file included from daytimetcpcli.c:1:
unp.h:7:66: error: ../config.h: No such file or directory
unp.h:200:30: error: ../lib/addrinfo.h: No such file or directory
In file included from daytimetcpcli.c:1:
unp.h:214: error: redefinition of ‘struct timespec’
unp.h:294: error: conflicting types for ‘gai_strerror’
/usr/include/netdb.h:263: error: previous declaration of ‘gai_strerror’ was here
unp.h:298: error: conflicting types for ‘getnameinfo’
/usr/include/netdb.h:272: error: previous declaration of ‘getnameinfo’ was here
unp.h:302: error: conflicting types for ‘gethostname’
/usr/include/unistd.h:451: error: previous declaration of ‘gethostname’ was here
unp.h:318: error: conflicting types for ‘inet_ntop’
/usr/include/arpa/inet.h:99: error: previous declaration of ‘inet_ntop’ was here
0238デフォルトの名無しさん
2010/02/07(日) 19:51:04>ちゃんと書いてありますがな。ドキュメントはちゃんと読みましょう。
> % ./configure
> % cd lib
> % make
> % cd ../intro
> % make daytimetcpcli
>でうまくいきました。
0239デフォルトの名無しさん
2010/02/07(日) 21:08:26スタイルキャストが必要
とか言って、エラーが出てきてしまいます・・・。
この場合はどうしたら良いんでしょうか?
0240デフォルトの名無しさん
2010/02/07(日) 21:19:160241デフォルトの名無しさん
2010/02/07(日) 22:36:360242デフォルトの名無しさん
2010/02/07(日) 23:27:29同じ fpos_t値 は常に同じところを指すのでしょうか? おしえてください。
0243デフォルトの名無しさん
2010/02/07(日) 23:31:13すみません。その操作はいったいなにをしているのでしょうか?
0244デフォルトの名無しさん
2010/02/07(日) 23:42:350245デフォルトの名無しさん
2010/02/08(月) 01:17:10いいえ
0246デフォルトの名無しさん
2010/02/08(月) 07:26:05わかんないなら、あきらめれ
0247デフォルトの名無しさん
2010/02/08(月) 08:14:20ここみて、わかんないなら、ほんとうにあきらめれ
ttp://www7b.biglobe.ne.jp/~tsu/mac/unpv12e.html
0248デフォルトの名無しさん
2010/02/08(月) 12:41:530249デフォルトの名無しさん
2010/02/08(月) 13:44:43http://www.kumei.ne.jp/c_lang/sdk/sdk_10.htm
if(id == IDYES)
{
if(KillTimer(hWnd, ID_MYTIMER) == TRUE)
{
}
DestroyWindow(hWnd);
}
どちらか片方をコメントにすると閉じるのですが、なにがまずいんでしょか
0250デフォルトの名無しさん
2010/02/08(月) 14:25:050251249
2010/02/08(月) 14:35:350252デフォルトの名無しさん
2010/02/08(月) 14:38:58思うのだが、zero埋めってどうやればベストなのかな?
zeroのバッファを用意してwriteしまくる、だと遅いのかな。
truncate(2) の方がいい?
# いや head とか dd 使えばいいだろ、とか言わないで ><
0253デフォルトの名無しさん
2010/02/08(月) 14:42:240254デフォルトの名無しさん
2010/02/08(月) 14:44:27あ、それいいね。じゃあそうするわ。
ありがとう。
0255デフォルトの名無しさん
2010/02/08(月) 16:53:05僕は悲しみをためる
それを癒すのは貴女だけ
朝に、昼に、夕に、夜に
僕は貴女を称えよう
奇跡の降り積もる日を待ち望み
余すことなくこの身の全ては
貴女に捧げられる供物である
どんな暗闇が僕を遮ろうとも
やがて貴女に辿り着くだろう
深き愛情の奇跡の証に
羊のように従順に尽くす僕の魂
僕は貴女に恋をしてしまいました。
いかなる誘惑も貴女への愛情を
揺るがすことはないでしょう
私は貴女のことを愛しています。
御返事お待ちしています。
0256デフォルトの名無しさん
2010/02/08(月) 18:23:04すいません寝てました・・・。
ソースを貼り付けたいのですが、
32行じゃ収まりきれません。
どこかソースを上げるサイトとかあったはずなのですが、
どこか教えていただきたいです。
0257デフォルトの名無しさん
2010/02/08(月) 18:39:110258デフォルトの名無しさん
2010/02/08(月) 19:17:13寝てからうpします。ごめんなさい
0259デフォルトの名無しさん
2010/02/08(月) 19:19:540260デフォルトの名無しさん
2010/02/08(月) 19:24:440261デフォルトの名無しさん
2010/02/08(月) 19:41:42SIZE size=SIZE(0,0);
と書いたエラーになりました。
size.cx=0;
size.cy=0;
と2行で書くのではなく、1回で初期化を記述するのはどう書けばいいですか。
0262デフォルトの名無しさん
2010/02/08(月) 19:43:03SIZE size={0,0};
0263デフォルトの名無しさん
2010/02/08(月) 20:05:020264デフォルトの名無しさん
2010/02/08(月) 20:19:52お帰りください
0265デフォルトの名無しさん
2010/02/08(月) 20:52:07ソース上げました
http://codepad.org/Y31Tv06I
あれから色々手を加えてみましたが、
まだエラーが直りません
このプログラムはハノイの塔のプログラムです
http://www.pref.fukushima.jp/pc-concours/2009/03/03_reidai02q.html
解いている問題はこれです。
このプログラムのどこがいけないでしょうか?
0266デフォルトの名無しさん
2010/02/08(月) 20:59:122行目と20行目の引数が違う。
3と53、4と71、5と86も違う。
ぜんぜん違う。
なんで
int,int);
って宣言しておいて、
int lend,int hanoi[300]){
にしちゃってるの?
0267デフォルトの名無しさん
2010/02/08(月) 21:13:29どういう意味ですか?
つまりどこが悪いと仰ってますか?
0268デフォルトの名無しさん
2010/02/08(月) 21:18:020269デフォルトの名無しさん
2010/02/08(月) 21:19:08ソースの中での指摘をお願いします
0270デフォルトの名無しさん
2010/02/08(月) 21:20:170271デフォルトの名無しさん
2010/02/08(月) 21:23:14あまり書き慣れないので・・・。
すいません
0272デフォルトの名無しさん
2010/02/08(月) 21:28:410273デフォルトの名無しさん
2010/02/08(月) 21:43:59(1) プロトタイプ宣言(2〜5行め)と、実際の定義(20行め、53行め,…)の引数の型が一致していない
定義の方が正しいのなら、
int move(int,int,int,int,int,int,int,int,int,int,int,int *);
とでもする。
(2)38行めなどでkui2()などを呼び出す際、最後のパラメータとしてhanoi全体を渡したいのなら
kui2(d,e,f,n,m,l,z,lena,lenb,lenc,lend,hanoi);
とする。
(3)kui3()のelseの閉じ括弧'}'がない
以上を直すと、一応コンパイルは通るけど暴走する。
0274デフォルトの名無しさん
2010/02/08(月) 21:57:37個人的には hanoi[300] よりも hanoi[3][100] にして欲しい
0275デフォルトの名無しさん
2010/02/08(月) 22:04:58初心者のソースが汚いのは当然のことだから恥じることはない。
ただ一般的に「自分だけが理解できるソース」には価値が無いということを覚えればいいよ。
0276デフォルトの名無しさん
2010/02/08(月) 22:17:04引数を多くしすぎると、後で後悔するよ
0277デフォルトの名無しさん
2010/02/08(月) 22:23:06自分しか読まないコードはそれでいい
「初心者」は仕様そのものさえ憶えればいい
それさえできていれば組織ごとに違うスタイルには対応できるし
アルゴリズムやイディオムは無数にあってライフワークになる
あんまり初期から頭を固くすることこそ避けたほうがいい
0278デフォルトの名無しさん
2010/02/08(月) 22:33:55開いた瞬間吹き出した
0279デフォルトの名無しさん
2010/02/08(月) 22:38:530280デフォルトの名無しさん
2010/02/08(月) 22:39:350281デフォルトの名無しさん
2010/02/08(月) 22:41:28/usr/lib/gcc/spu/4.1.1/../../../../spu/lib/crt1.o: In function `_start':
(.text+0x28): relocation truncated to fit: SPU_ADDR18 against symbol `_end' defined in *ABS* section in spe-main
/tmp/ccCjxW2K.o: In function `get_smith_waterman_score':
sample.c:(.text+0x1b8): relocation truncated to fit: SPU_ADDR18 against symbol `score' defined in COMMON section in /tmp/ccCjxW2K.o
/tmp/ccCjxW2K.o: In function `set_query_array':
sample.c:(.text+0x5bc): relocation truncated to fit: SPU_REL16 against symbol `params' defined in COMMON section in /tmp/ccCjxW2K.o
/tmp/ccCjxW2K.o: In function `set_database_array':
sample.c:(.text+0x7b4): relocation truncated to fit: SPU_REL16 against symbol `params' defined in COMMON section in /tmp/ccCjxW2K.o
/tmp/ccCjxW2K.o: In function `main':
sample.c:(.text+0x91c): relocation truncated to fit: SPU_ADDR18 against symbol `params' defined in COMMON section in /tmp/ccCjxW2K.o
sample.c:(.text+0xa88): relocation truncated to fit: SPU_ADDR18 against symbol `score' defined in COMMON section in /tmp/ccCjxW2K.o
sample.c:(.text+0xb5c): relocation truncated to fit: SPU_REL16 against symbol `params' defined in COMMON section in /tmp/ccCjxW2K.o
/usr/lib/gcc/spu/4.1.1/../../../../spu/lib/libgloss.a(sbrk.o): In function `sbrk':
/home/sur/jordics/sdk3.1/src/redhat/BUILD/spu-newlib-1.16.0/obj-spu/spu/libgloss/spu/../../../../src/libgloss/spu/sbrk.c:53: additional relocation overflows omitted from the output
collect2: ld returned 1 exit status
って意味のわからんエラーがでたのだが、なんだこれは??
0282デフォルトの名無しさん
2010/02/08(月) 22:44:040283デフォルトの名無しさん
2010/02/08(月) 22:48:42リンカのスクリプトがおかしいんじゃないか
0284デフォルトの名無しさん
2010/02/08(月) 22:51:26そうすることにします。
とりあえずポインタの勉強をまったく勉強してなかったので
サブルーチンと一緒にポインタの勉強もするようにします
>>273
ありがとうございました!
一応通りますけど無限ループ状態ですね・・・。
配列自身を渡すにはポインタが必要なんですか?
>>274
二次元配列っていう方法もありましたね!
最初に配列を3つ使って考えてましたが、
その方法もいいですね。
>>275
ありがとうございます
これは練習なので自分だけが読むプログラムですが、
こういう場で質問した時にも解り易いプログラムを書けるようにします
>>276
最大でも、何個ぐらいの引数にした方がいいですか?
>>277
ありがとうございます
学ぶより真似よ、ですか。
頑張ります
0285デフォルトの名無しさん
2010/02/08(月) 23:11:11引数が5個以上ってのは、あんまり見ないけど(C++/Javaの場合)
作ってから1〜2週間すると、引数に何を渡せばいのか自分でもわからなくなるよ
int kui1()、int kui2()・・・って関数に名前を付けるのもいいけど、
普通はローマ字じゃなくて英単語を組み合わせるべき(例外を除く)
関数や変数の名前に統一感が無いと思ったら、「c言語 命名規則」とかでググってね
0286デフォルトの名無しさん
2010/02/08(月) 23:17:05すいません。もうちょっとわかりやすくお願いします。
0287デフォルトの名無しさん
2010/02/08(月) 23:22:500288デフォルトの名無しさん
2010/02/08(月) 23:26:360289デフォルトの名無しさん
2010/02/08(月) 23:27:20http://pc12.2ch.net/test/read.cgi/tech/1249915266/
ここで、質問しなおしたら
0290デフォルトの名無しさん
2010/02/08(月) 23:44:09それは特別な分野じゃまいか?
普通のプログラミングで11個は現実的じゃないと思うんだけど
0291デフォルトの名無しさん
2010/02/09(火) 00:00:55村人A「C言語の村へようこそ」
0292デフォルトの名無しさん
2010/02/09(火) 00:57:150293デフォルトの名無しさん
2010/02/09(火) 01:06:59学が無いな。Cからも使えるんだぜ。
0294デフォルトの名無しさん
2010/02/09(火) 01:58:37そこで精神分裂を起こすのが日本人の克服すべき弱点だ
信じた道は並み居る論敵を蹴散らして我が道を歩み頂で血化粧のβエンドルフィンに酔え
引数34個がどうした! 何か悪いのか、えーおいチビ、ぶっ殺すぞてめえ!! これができないからナメられるんだよ
0295デフォルトの名無しさん
2010/02/09(火) 03:18:51その方がオーバーヘッドも小さくなるしソースも読みやすくなるし
それができなきゃ設計ミスだ
0296デフォルトの名無しさん
2010/02/09(火) 03:36:25構造体?わかんねーからx1,y1,z1...でいいか
戻り値で構造体を受け取るにもよくわかんねーから引数にポインタでいっか
void getgrav3(float *x,float *y,float *z,float x1,float y1,float z1,float x2,float y2,float z2,float x3,float y3,float z3);
0297デフォルトの名無しさん
2010/02/09(火) 03:43:170298デフォルトの名無しさん
2010/02/09(火) 11:06:200299デフォルトの名無しさん
2010/02/09(火) 12:45:460300デフォルトの名無しさん
2010/02/09(火) 13:10:39パフォーマンス上の理由でそうすることはあるよ。
0301デフォルトの名無しさん
2010/02/09(火) 13:26:570302デフォルトの名無しさん
2010/02/09(火) 13:36:360303デフォルトの名無しさん
2010/02/09(火) 13:57:12入門編で初心者にする話じゃないな
0304デフォルトの名無しさん
2010/02/09(火) 14:07:31念仏のように、使うなっていうのは良くない。
生産性・効率次第。
グループで変数が統一して理解していて、マルチスレッドで
アクセス済んでなければ、関数の引数や戻り値が減らせて
良いこともある。
0305デフォルトの名無しさん
2010/02/09(火) 14:09:42クラスを外せばグローバル。
クラス内のグローバル。
共通して使う変数はクラス化するのが良いとは思うが
0306デフォルトの名無しさん
2010/02/09(火) 14:18:44>>265に対する助言として、それが適切だと思うの?
0307デフォルトの名無しさん
2010/02/09(火) 18:17:51下のfile1.c , file2.c , file3.c を結合して実行したところメモリを壊してるようなエラーが出てしまうのですが原因はなんでしょうか?
「file1.c」
extern int file2(FILE*)
extern int file3(FILE*)
int main(void)
{
___FILE *fp;
___file2(fp);
___file3(fp);
___return 0;
}
「file2.c」
int file2(FILE* fp)
{
___fp=fopen("test.txt","w");
___fprintf(fp,"テスト1");
___return 0;
}
「file3.c」
int file3(FILE* fp)
{
___fprintf(fp,"テスト2");
___fclose(fp);
___return 0;
}
0308デフォルトの名無しさん
2010/02/09(火) 18:22:040309デフォルトの名無しさん
2010/02/09(火) 18:25:14fp=file2(fp);
0310デフォルトの名無しさん
2010/02/09(火) 18:57:34> 下のfile1.c , file2.c , file3.c を結合して実行したところメモリを
> 壊してるようなエラーが出てしまうのですが原因はなんでしょうか?
main()で定義されたfpが、file2()によって更新されないから。
正しくは、
int main(void)
{
___FILE *fp;
___file2(&fp);
___file3(&fp);
___return 0;
}
int file2(FILE** fp)
{
___*fp=fopen("test.txt","w");
___fprintf(*fp,"テスト1");
___return 0;
}
など。
0311デフォルトの名無しさん
2010/02/09(火) 19:18:14ありがとうございます動きました!
>>309
試したんですが実行エラーでした。。
0312デフォルトの名無しさん
2010/02/09(火) 22:49:00char buffer[16] = "";
のように、常にNULLや空文字列で初期化するのって意味ありますか?
0313デフォルトの名無しさん
2010/02/09(火) 22:54:530314デフォルトの名無しさん
2010/02/10(水) 00:11:51NULLで初期化は realloc をループで使うときに有効
0315デフォルトの名無しさん
2010/02/10(水) 16:46:330316デフォルトの名無しさん
2010/02/10(水) 16:55:50nullポインタを使った書き込みは例外が出るけど、ランダムに初期化された場合はそうでない場合がある。
0317デフォルトの名無しさん
2010/02/10(水) 17:00:47一回freeしたものをあとでfreeしてると、
意外なタイミングでおかしくなるので見つけにくいバグになる。
0318デフォルトの名無しさん
2010/02/10(水) 17:22:000319デフォルトの名無しさん
2010/02/10(水) 22:53:360320デフォルトの名無しさん
2010/02/10(水) 23:10:080321デフォルトの名無しさん
2010/02/10(水) 23:10:520322デフォルトの名無しさん
2010/02/11(木) 00:21:41君のことか
0323デフォルトの名無しさん
2010/02/11(木) 00:22:300324デフォルトの名無しさん
2010/02/11(木) 00:30:190325デフォルトの名無しさん
2010/02/11(木) 19:24:400326デフォルトの名無しさん
2010/02/11(木) 19:54:12多分キミがアホなんだと思う。
ポインタのスコープ抜けるときに
if (p) free(p);
と言うつもりなのだろう。
0327デフォルトの名無しさん
2010/02/11(木) 20:09:320328デフォルトの名無しさん
2010/02/11(木) 20:10:340329デフォルトの名無しさん
2010/02/11(木) 20:12:14free(p);
p = NULL
}
って安全なの?
0330デフォルトの名無しさん
2010/02/11(木) 20:15:210331デフォルトの名無しさん
2010/02/11(木) 20:15:31そういう習慣がないではないことは理解できますが、一方で *p する前にはかならず null チェックしないと意味がないし、それもしんどい作業だなあ。
0332デフォルトの名無しさん
2010/02/11(木) 20:16:12普通はマクロdeleteを使う
delete p;
0333デフォルトの名無しさん
2010/02/11(木) 20:16:450334デフォルトの名無しさん
2010/02/11(木) 20:17:54そのdeleteの定義を見せてみろ。
0335デフォルトの名無しさん
2010/02/11(木) 20:38:17意味が無いっていうか、マイナスだよね。
本当の初期化を忘れたときに、警告がでなくなる。
0336デフォルトの名無しさん
2010/02/11(木) 20:42:36使う直前で、宣言&初期化。
C89みたいに、ブロックの先頭でしか宣言できない言語なら、
使う直前で初期化。
(って書くと、文法上の初期化と代入がどうこうって、あさっての
方向に話題を持っていくやつが現れるのが、いつの流れだけど)
0337デフォルトの名無しさん
2010/02/11(木) 21:14:51明後日も何も質問の>>312がその「文法上の初期化」についてでは・・・
さておき、離れて使う場合でも宣言時の初期化で良いと思うよ。
むしろそれで把握しづらくなるほど長い関数を作る方が問題かと。
まぁこの辺は文化の差なんじゃないの?
0338デフォルトの名無しさん
2010/02/11(木) 21:19:54それじゃ、コンパイラに指摘してもらえない。
その論理なら、関数を短くすればすべてのバグがなくなる。
0339デフォルトの名無しさん
2010/02/11(木) 21:20:00必要な分だけでないとデバッグ時に
初期値のチェックからはじめなきゃならなくて面倒
0340デフォルトの名無しさん
2010/02/11(木) 21:21:47p = malloc(1);
とか、ふつーに見限られるコードだしな
0341デフォルトの名無しさん
2010/02/11(木) 21:23:290342デフォルトの名無しさん
2010/02/11(木) 21:25:03「常にNULLや空の値で初期化」って、機械的にそうするってコーディングスタイルの
ことでしょ?
(違うならいいけど)
そういう文化があるってのは知ってるけど、相対文化論じゃないし優劣なしって
ことはないよ。
小さい関数しか書かないから、どこで初期化しても同じって話しなら、
for (i = 0; i < N; i++)
とかしないで、
int i = 0;
:
for (; i < N; i++)
とか書いてもOKみたいな話になっちゃうでしょ。
0343デフォルトの名無しさん
2010/02/11(木) 21:26:41あんまりふつーじゃないと思うよ。
0344デフォルトの名無しさん
2010/02/11(木) 21:27:49for については意味付けを考えて欲しいな
0345デフォルトの名無しさん
2010/02/11(木) 21:37:02意味わかめ
0346デフォルトの名無しさん
2010/02/11(木) 21:38:30必要がないと思うのですけれども。
0347デフォルトの名無しさん
2010/02/11(木) 21:42:33???
それ文句か?
0348デフォルトの名無しさん
2010/02/11(木) 21:42:44有名なプロダクツでそういうスタイルが採用されているとか、
著名な人とか定番みたいになってる書籍で、そういうスタイルが
薦められてるとか、ないんじゃないの?
0349デフォルトの名無しさん
2010/02/11(木) 21:53:18まあ有名なムやマに凶悪さでも有名なのはあるが
たとえその本人であっても突っ込んで帰ってきた返事がクソなら
ブランドに係わらずその議論に対する評価はクソだが
0350デフォルトの名無しさん
2010/02/11(木) 22:52:17すまん。言葉が足らんかった。
無意味な初期化はしてはいけないと考えてるよ。
害にしかならない。
forは、自分ではそんな書き方はしないけど、
積極的に直させる程の事もないと思う。
for文の存在意義の半分を捨ててる以外は、
問題あるように見えない。
0351デフォルトの名無しさん
2010/02/12(金) 14:14:310352デフォルトの名無しさん
2010/02/12(金) 14:24:270353デフォルトの名無しさん
2010/02/12(金) 14:48:440354デフォルトの名無しさん
2010/02/12(金) 14:53:460355デフォルトの名無しさん
2010/02/12(金) 15:19:510356デフォルトの名無しさん
2010/02/12(金) 15:59:38実装があれば...
0357デフォルトの名無しさん
2010/02/12(金) 16:12:420358デフォルトの名無しさん
2010/02/12(金) 16:13:080359デフォルトの名無しさん
2010/02/12(金) 16:14:06>>350によると無意味な初期化なので禁止。
0360デフォルトの名無しさん
2010/02/12(金) 16:15:14されるだろ
ポインタ型でなければ
0361デフォルトの名無しさん
2010/02/12(金) 16:16:190362デフォルトの名無しさん
2010/02/12(金) 16:29:23規格票読んでこい
0363デフォルトの名無しさん
2010/02/12(金) 17:54:15static な変数は 0 に初期化されますね。
0364デフォルトの名無しさん
2010/02/12(金) 17:59:49でも気持ち悪いから初期化するよな
0365デフォルトの名無しさん
2010/02/12(金) 18:02:28それは単に無知なだけ
0366デフォルトの名無しさん
2010/02/12(金) 18:03:58ポインタ型も NULL (= 0) に初期化されます。
0367デフォルトの名無しさん
2010/02/12(金) 18:05:260369デフォルトの名無しさん
2010/02/12(金) 20:29:18すまん。規格をしっかり見ていないので知りたいのだが、↓はどちらが正しい?
0で初期化? NULLで初期化?
0370デフォルトの名無しさん
2010/02/12(金) 20:55:40どちらかが正しいですよ。
0371デフォルトの名無しさん
2010/02/12(金) 20:58:24スタイルにもよるけど、関数の途中で失敗した場合にgotoで関数の出口に飛んでfreeしたい場合に、
err:
free(p0);
free(p1);
....
return -1;
のように複数のポインタ変数を一括してfreeで記述できるのでわかりやすい。
freeする順序に気をつかったり、err0, err1みたいにくだらないラベルも増えない。
0372デフォルトの名無しさん
2010/02/12(金) 21:04:26「静的記憶域期間を持つオブジェクトを明示的に初期化しない場合
そのオブジェクトの型がポインタ型の場合、空ポインタに初期化する。」
0373デフォルトの名無しさん
2010/02/12(金) 21:10:590(整数値0を表すビットパターン)かもしれないし、0でないかもしれない
大抵の環境では0だけどね、しかしながら、0でない環境もあるので>>369どっちも間違え
ISO/IEC 9899:1999 (E) C99でごめんね
6.7.8 Initialization
10 If an object that has automatic storage duration is not initialized explicitly, its value is
indeterminate. If an object that has static storage duration is not initialized explicitly,
then:
― if it has pointer type, it is initialized to a null pointer;
ついでにnull pointer
6.3.2.3 Pointers
3 An integer constant expression with the value 0, or such an expression cast to type
void *, is called a null pointer constant .55) If a null pointer constant is converted to a
pointer type, the resulting pointer, called a null pointer , is guaranteed to compare unequal
to a pointer to any object or function.
4 Conversion of a null pointer to another pointer type yields a null pointer of that type.
Any two null pointers shall compare equal.
55) The macro NULL is de?ned in <stddef.h> (and other headers) as a null pointer constant; see 7.17.
どんな値なのかはわからないけど、少なくともオブジェクト(変数)や関数のポインタとは一致しない値を表す特別なポインタ
プログラム上は0か(void *)0で表現できる、またはNULL
0374デフォルトの名無しさん
2010/02/12(金) 21:12:27あっそ
0375デフォルトの名無しさん
2010/02/12(金) 21:17:180376デフォルトの名無しさん
2010/02/12(金) 21:20:33ありがとう。
早い話が「空気読んで初期化」してくれるということでOKか
つまり、構造体を ={0}で初期化するのと一緒の挙動かな
0377デフォルトの名無しさん
2010/02/12(金) 21:22:560378デフォルトの名無しさん
2010/02/12(金) 21:24:04いや、それは又別のセマンティクスがあってだな
「空気を読んで初期化」か、なかなか面白い表現だな
今度使わせていただきます
0379デフォルトの名無しさん
2010/02/12(金) 21:37:130380デフォルトの名無しさん
2010/02/12(金) 21:42:250と決まっているなら0でいい。そうじゃないからNULLという文字列に置き換えている。
0381デフォルトの名無しさん
2010/02/12(金) 22:03:18なんのためにわざわざNULLというキーワードを使っているのか?
0382デフォルトの名無しさん
2010/02/12(金) 22:05:33キーワード?
0383デフォルトの名無しさん
2010/02/12(金) 22:23:31はぁ?別に0でいいよ、でも64bitとかだと0Lかな
void *にキャストしていてもいいけど
0384デフォルトの名無しさん
2010/02/12(金) 22:37:41http://www.kouno.jp/home/c_faq/c5.html#0
0385デフォルトの名無しさん
2010/02/12(金) 22:38:59はぁ?
0386デフォルトの名無しさん
2010/02/12(金) 22:48:55今さら感があるなぁ
まぁ、当たり前のことを当たり前のようにかかれているだけだし特にこれといって読むに値する内容でもない
0387デフォルトの名無しさん
2010/02/12(金) 23:17:510388デフォルトの名無しさん
2010/02/12(金) 23:25:14勉強になりました。
0389デフォルトの名無しさん
2010/02/12(金) 23:55:55(ポインタ)=NULL
って書いたほうがいいと思うけど
0390デフォルトの名無しさん
2010/02/13(土) 00:06:440391デフォルトの名無しさん
2010/02/13(土) 00:21:36「to_aru_name」という名前の関数内のエラーメッセージを表示するときに、
to_aru_name (void *arg)
{
const char *func = "to_aru_name"
...
fprintf(stderr, "%s(): hoge failed: %s", func, strerror(errno));
...
}
と書いて、実際のエラーメッセージを「to_aru_name(): hoge failed: File exists」
のように表示させてるんですが、関数毎に「const char *func = "to_aru_name"」の部分を
準備する必要があり手間がかかります。この部分を自動化したい…
funcに関数名を自動的に代入or設定する良い方法はないでしょうか?
便利なマクロとか、もしかしてあったりするかな…
0392デフォルトの名無しさん
2010/02/13(土) 00:29:340393デフォルトの名無しさん
2010/02/13(土) 00:29:43つまらん事言ってないで>>391に答えてやりなさい
0394391
2010/02/13(土) 00:42:49ありがとおおおお
printf("func: %s\n", __FUNCTION__);
で確認できた。ちゃんと""付きで展開されるのね…
0395デフォルトの名無しさん
2010/02/13(土) 00:53:37ファイル名だけで良いのにVCもGCCも入ってしまうのですが…
0396デフォルトの名無しさん
2010/02/13(土) 01:19:08俺はお礼を拒否する主義だ
0397デフォルトの名無しさん
2010/02/13(土) 01:21:47テメー、答えたのはオレだ。
0398デフォルトの名無しさん
2010/02/13(土) 01:29:140399デフォルトの名無しさん
2010/02/13(土) 01:31:010400デフォルトの名無しさん
2010/02/13(土) 01:31:15オレはオレを拒否する主義だ
0401デフォルトの名無しさん
2010/02/13(土) 01:37:15変なのはS式だけで
あとは君の思うがままに操れる
素晴らしい言語だ。
0402デフォルトの名無しさん
2010/02/13(土) 03:10:05と書いていると、コンパイルするときにgccが
「warning: null argument where non-null required (argument 1)」
みたいに、NULLであってはいけない引数がNULLですよと警告してくれるけど、
自分でつくった関数でも同じ警告が出るようにできるかな?
int
my_func(const char *str)
{
...
if (str == NULL)
return -1;
...
}
上のように引数がNULLの場合をチェックしているのだけど、
実行時だけじゃなくてコンパイルするときにも「NULLはダメだ!」と警告されるようにできないものでしょうか?
この関数をライブラリにして使うときに、引数がNULLだとコンパイル時に警告させるようにしたい…
0403デフォルトの名無しさん
2010/02/13(土) 03:12:450404デフォルトの名無しさん
2010/02/13(土) 08:49:355.25 Declaring Attributes of Functions
`nonnull (ARG-INDEX, ...)'
The `nonnull' attribute specifies that some function parameters
should be non-null pointers. For instance, the declaration:
extern void *
my_memcpy (void *dest, const void *src, size_t len)
__attribute__((nonnull (1, 2)));
0405デフォルトの名無しさん
2010/02/13(土) 09:34:380406デフォルトの名無しさん
2010/02/13(土) 09:39:33あんまり意味なさげだけどVC2005辺りだと
リリースビルドの時はフルパスじゃなくなった気が・・・
0407デフォルトの名無しさん
2010/02/13(土) 12:46:36教材も売ってまーすwwwwww
http://www.fiberbit.net/user/mo880d4/kyouzai.html
0408デフォルトの名無しさん
2010/02/13(土) 12:48:46http://rating6.auctions.yahoo.co.jp/jp/show/rating?userID=yovrin&filter=-1
0409デフォルトの名無しさん
2010/02/13(土) 12:56:21C/C++からC#は派生したが、まったく別の言語
っていう話を聞いたんだが。
C#で打つと、.NETが必要になるから移ろうかと思っていたんだが。
0410デフォルトの名無しさん
2010/02/13(土) 12:59:49斬新な表現だな。
0411デフォルトの名無しさん
2010/02/13(土) 13:00:53C++はアプリ開発には向いてないがな。生産効率は悪い。
C#で10行で済むことが100行-1000行になり得る。
標準部品の品揃えが悪い。
0412デフォルトの名無しさん
2010/02/13(土) 13:05:07チッうるせーな 反省してまーす
0413デフォルトの名無しさん
2010/02/13(土) 13:07:37僕なら
http://www.amazon.co.jp/dp/0393979504
をお薦めする
0414デフォルトの名無しさん
2010/02/13(土) 13:07:49あまり先入観を持たずに別言語だと思ってやれば、いいんじゃないの?
C#みたいにライブラリやIDEの充実がない分面倒。
そこを差し引けば、そんなに悪くはないと思う(歴史が長い分良くないとこも多い)。
0415デフォルトの名無しさん
2010/02/13(土) 13:32:07「.NETが必要になるから」移りたいというのはちょっと理解できない。目的から必要性を考えたほうが良いかも。
文法レベルの移行はそれほど大変ではないはずだが、C++の機能をたくさん使いたいなら大変時間がかかると思う。
そもそもC++を使う必要あるのか?単にカッコいい(人によっては他人が読みつらい)コードを書きたいなら話は別だが。
0416デフォルトの名無しさん
2010/02/13(土) 14:08:34私は今、ある計算をするプログラムを組んでいるのですが、double変数を使用しても、変数がオーバーフローする可能性が高い計算を行っています。
オーバーフローすることは一向に構わないのですが、そのあとでオーバーフローしたかどうかの判定をしたいのです。
Cではどうやればオーバーフローしたかどうかの判定ができるのでしょうか?
尚、使用可能なヘッダーファイルはstdio.hのみでお願いします。
0417デフォルトの名無しさん
2010/02/13(土) 14:13:100418デフォルトの名無しさん
2010/02/13(土) 14:13:16桁落ち、情報落ち、最大最小値越えなど検出する方法はないだろ。
デバッグモードで付いてれば付いてる。
0419デフォルトの名無しさん
2010/02/13(土) 14:14:560420デフォルトの名無しさん
2010/02/13(土) 14:28:310421デフャHルトの名無しbウん
2010/02/13(土) 14:29:080422デフォルトの名無しさん
2010/02/13(土) 14:29:19NaNみたいな。
0423デフォルトの名無しさん
2010/02/13(土) 14:44:490424デフォルトの名無しさん
2010/02/13(土) 14:46:25ンラインアセンブラでステータスワードを設定してやる必要がある。
設定の仕方はCPUのマニュアルに書いてある。
0425デフォルトの名無しさん
2010/02/13(土) 15:46:44int main(void){
int i,
n = N * 32;
char *s;
s = (char *)malloc(n);
for(i = 0; i < N; ++i){
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
memcpy(s, &i, 4);s += 4;
}
printf("%s", s);
free(s);
return 0;
}
これ実行すると問題発生するんだけどどうして?
0426デフォルトの名無しさん
2010/02/13(土) 15:51:340427デフォルトの名無しさん
2010/02/13(土) 16:01:21sは固定しておいてfree(s);とすべきなのに s+=4; を8回行って
sの値が変化している
その後 free(s); を行った結果は未定義である(鼻から悪魔)
0428デフォルトの名無しさん
2010/02/13(土) 16:18:00表示されない。
0429デフォルトの名無しさん
2010/02/13(土) 16:21:570430デフォルトの名無しさん
2010/02/13(土) 16:26:39int main(void){
char *s, *t;
int i;
int m = '1'|'0'<<8|'2'<<16|'4'<<24;
int n = N * 4 * 8;
t = s = (char *)malloc(n);
for(i = 0; i < N; ++i){
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
memcpy(s, &m, 4);s += 4;
}
printf("%s", t);
free(t);
return 0;
}
0431デフォルトの名無しさん
2010/02/13(土) 16:30:030432402
2010/02/13(土) 17:45:59ありがとう、再現できました!
ttp://ja.pastebin.ca/1795118
GCCのマニュアルに書いてあるんですね…
5.25 Declaring Attributes of Functions (Using GCC)
ttp://www.crya.unam.mx/computo/manuales/gcc/Function-Attributes.html
読んでみたらコンパイル時のprintfのフォーマットチェックとかも載ってて
ずっと疑問だったけど合わせて解決した。ありがとうございました
0433402
2010/02/13(土) 21:39:22実行時にも変数がNULLか判定させようとすると、判定に失敗してしまいます…
コンパイルオプションで強めの最適化(-O2)をしたときにだけ失敗します。
一体どうなっているんだろう?
ttp://ja.pastebin.ca/1795229
上記のソース(test.c)を
$ gcc -Wall -O2 test.c -o test
とコンパイルして実行すると、my_funcにNULLを渡していても-1を返さずエラーを検知できません。
mainが正常終了してしまいます。
一方、コンパイルする際に最適化オプションを"-O"にすると検知できました。
$ gcc -Wall -O test.c -o test
とコンパイルして実行すると、my_funcにNULLを渡すと-1を返します。
最適化オプションなしでも同じように検知できました。
コンパイルオプションでなぜ挙動が変わるんだろう… "-O2"の何がいけないのだろうか?
実用的には、弱い最適化オプション(-O)でコンパイルすれば済むんですが気になっています。
もう少し詳しい原因が分かる方いらっしゃれば教えて欲しい…
gcc-4.3.2とglibc-2.7を使っています。
0434デフォルトの名無しさん
2010/02/13(土) 21:57:30この最適化がattribute((nonnull))を見てNULLチェックを削除したのでは
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
> The compiler may also choose to make optimizations based on the knowledge
> that certain function arguments will not be null.
とも書いてあるし
0435402 (433)
2010/02/13(土) 23:10:20なるほどそうなのかも…
ありがとう。参考になります。
いろいろ試してみました。
-O2を使っていても、>>433のソースの24行目のfprintfがなければ、
NULLチェックをしてくれたり挙動がまちまち…
というのは、
ttp://ja.pastebin.ca/1795281
このソースなら、
$ gcc -Wall -O2 test.c -o test
t.c: In function 'main':
t.c:10: warning: null argument where non-null required (argument 1)
$ ./test
my_func failed
-O2付きでもちゃんとNULLチェックしてくれる!どゆことー
0436デフォルトの名無しさん
2010/02/13(土) 23:39:11でD:\下のファイルの情報取得を
した後
if(fd.dwFileAttributes==
のあとをどうすれば隠しフォルダが
条件に当てはまりますか?
0437デフォルトの名無しさん
2010/02/14(日) 00:03:39まぁあれだよ
最適化の効きなんてコンパイラの気分次第
そこまで気にし出すとアセンブラのソース吐かせて見るしか
0438デフォルトの名無しさん
2010/02/14(日) 00:11:18「隠し」 かつ 「フォルダ」 なら
if ((fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
でいけるかと
0439デフォルトの名無しさん
2010/02/14(日) 00:12:05どうしても警告が消えません。。
そもそもrealloc関数を使用してsplintでの警告は消えないなんてことないのか
と思いはじめてきたので質問します!
どうなんでしょうか先生。。。
0440デフォルトの名無しさん
2010/02/14(日) 00:15:56D\: のSystem Volume informatonです
0441デフォルトの名無しさん
2010/02/14(日) 00:16:16エスパーでもなきゃソースコード見ずに「3行目が間違ってるぞ!」とか指摘できるわけない
0442デフォルトの名無しさん
2010/02/14(日) 00:16:20で?
0443デフォルトの名無しさん
2010/02/14(日) 00:18:32で?
0444デフォルトの名無しさん
2010/02/14(日) 00:18:45名前がわかってるならその名前で判別すりゃいいんじゃねーの
0445デフォルトの名無しさん
2010/02/14(日) 00:20:570446デフォルトの名無しさん
2010/02/14(日) 00:25:440447デフォルトの名無しさん
2010/02/14(日) 00:29:430448デフォルトの名無しさん
2010/02/14(日) 00:48:27何とかできました
アドバイスありがとうございます
0449デフォルトの名無しさん
2010/02/14(日) 21:34:15#include <string.h>
int main(void) //最初に実行される関数
{
char name[17] = "ジッキンゲン";
char rank[] = "男爵";
strcat(name,rank); //変数nameの文字列に変数rankの
//文字列を合体
puts(name); //変数nameの文字列と改行を出力
return 0;
}
これって何が違うんですか??
0450デフォルトの名無しさん
2010/02/14(日) 21:35:27何と比べて?
0451デフォルトの名無しさん
2010/02/14(日) 21:43:29は?というと?
0452デフォルトの名無しさん
2010/02/14(日) 21:51:24「異なる」は比べてみて同じでないことを表すにとどまるが、「違う」は「約束が違う」「答えが違う」
「気が違う」など、あるべきこと・状態から外れることをも言う。
どっちの意味だろ。動かない、って意味なのかな。
0453デフォルトの名無しさん
2010/02/14(日) 22:12:090454デフォルトの名無しさん
2010/02/14(日) 22:14:31え、どうして?
「これって何が違うんですか?」
→何かが違うから(エラーがでて)動かない
という意味にもとれると思うのですが。
0455デフォルトの名無しさん
2010/02/14(日) 22:18:37あなたの思考回路が違っているのか
全角空白を問題としているのか
分かりません
0456デフォルトの名無しさん
2010/02/14(日) 22:19:14やっぱり国語の入門からやり直してこい。
聞く時は、「これって何が間違ってるんですか?」にしとけば良かったな。
0457デフォルトの名無しさん
2010/02/14(日) 22:21:46そういえば「違う」にもいろいろな意味があるよなー、と思って
辞書を引いてみただけだが。
うぜーなマジで。
0458デフォルトの名無しさん
2010/02/14(日) 22:23:33自分の想定している動作はコレコレなんですけど、
実行してみると何々と表示されてしまいます。
or
〜というコンパイルエラーが出力されてしまいます。
これは何が間違っているんでしょうか?
0459デフォルトの名無しさん
2010/02/14(日) 22:28:38思考回路(笑)
0460デフォルトの名無しさん
2010/02/14(日) 22:30:44失せろゴミ
0461デフォルトの名無しさん
2010/02/14(日) 22:31:17お前もゴミじゃねーの?
0462デフォルトの名無しさん
2010/02/14(日) 22:32:550463デフォルトの名無しさん
2010/02/14(日) 22:33:390464デフォルトの名無しさん
2010/02/14(日) 22:35:110465デフォルトの名無しさん
2010/02/14(日) 22:49:26符号無しの4バイトの型のデータがあったとします。
これは2バイトの上位ワードと下位ワードにわけられます。
今ここで下位ワードを取り出したいとします。
とあるサイトでその方法は↓のようにかかれていました。
low = a & $FFFF;
ここで $ とは何を意味しているのでしょうか? 0xのことかな?と思ったのですが、ぐぐってもでてきません。
FFFFにしているのはビットのマスクをしていることなのだと理解はしています。
が、なぜ2バイトのみにマスクをかけているのでしょうか?理解できません。
普通マスクは0xFと0x0二つがあってはじめて意味をなすと思うのですが?
もし、a & $FFFFだと、aのビットに何か変化はあるのでしょうか?
また、この方法で、aの上位ワード、下位ワードどちらを代入するか指定せずに代入するだけで、
これは4バイトのaの中の上位ワードと下位ワードのうち、2バイトのlowに代入されるときは下位ワードから先に代入されるからなのでしょうか?
回答お願いします。
0466デフォルトの名無しさん
2010/02/14(日) 22:55:43何の言語だろう
0467デフォルトの名無しさん
2010/02/14(日) 23:01:06別に
(4バイトの何らかの型) a;
WORD low, high;
low = a; //下位ワード
high = (a >> 16); //上位ワード;
でいいのでは?と思ったのですが、
なぜ
(4バイトの何らかの型) a;
WORD low, high;
low = a & $FFFF; // ← low = a & 0xFFFF;の誤植??あとANDしても結果は変わらないと思うのになぜマスクしている?
high = (a >> 16) & $FFFF; // ← high = a & 0xFFFF;の誤植??あと、ANDしても結果は変わらないと思うのになぜマスクしている?
にしているのでしょうか?ということです。
0468デフォルトの名無しさん
2010/02/14(日) 23:04:41ありがとうございます。
では、$は単に0xの誤植っぽいですね。
ところで、なぜマスクしているのでしょうか?
しかも4バイトのデータであるaを2バイトの0xFFFFでマスクしているのですが、
なぜそれが下位ワード2バイト分の場所にわりあてられているのでしょうか?
aをマスクする場合、4バイトであるので、下位ワードだけを残したければ
a & 0xFFFF0000 (リトルエンディアン) だと思うのですが、
もしかして、こういったビットの代入は 左から代入されていくのでしょうか?
そして、入りきらなければ右側は捨てられるのでしょうか?
また、マスクの場合も左から行うということなのでしょうか?
0469デフォルトの名無しさん
2010/02/14(日) 23:05:56a & 0xFFFF0000 (リトルエンディアン)
↓
a & 0x0000FFFF
リトルエンディアン関係ないです
0470デフォルトの名無しさん
2010/02/14(日) 23:07:00HSPって変数に型なんかないんじゃないか
0471デフォルトの名無しさん
2010/02/14(日) 23:08:450473デフォルトの名無しさん
2010/02/14(日) 23:26:46WORD a = 0x12345678 & 0xFFFF;
DWORD b = 0x12345678 & 0xFFFF;
DWORD c = 0x12345678 & 0xFFFF0000;
WORD d = 0x12345678;
a = 0x5678;
b = 0x00005678;
c = 0x12340000;
d = ??
0474デフォルトの名無しさん
2010/02/14(日) 23:34:16規格票の6.4.4.1。
読んでみ。
0475デフォルトの名無しさん
2010/02/14(日) 23:49:30ゴミ(笑)
0476デフォルトの名無しさん
2010/02/15(月) 01:05:22さもないと、日下部さん召還するぞww
0477デフォルトの名無しさん
2010/02/15(月) 01:19:22やめてくれ!悪魔より恐ろしい
0478デフォルトの名無しさん
2010/02/15(月) 01:26:510479デフォルトの名無しさん
2010/02/15(月) 02:21:47失せろゴミ
0480デフォルトの名無しさん
2010/02/15(月) 12:37:03としたとき、str[0]のみ\0になるのですか?
それとも、str[0]〜str[64]全部\0ですか?
0481デフォルトの名無しさん
2010/02/15(月) 12:42:340482デフォルトの名無しさん
2010/02/15(月) 12:45:350483デフォルトの名無しさん
2010/02/15(月) 12:49:24根拠は
0484デフォルトの名無しさん
2010/02/15(月) 12:54:39信じるなよw
0485デフォルトの名無しさん
2010/02/15(月) 13:01:09プログラミング言語C第2版
273ページ
0486デフォルトの名無しさん
2010/02/15(月) 13:03:41アセンブラで出してみると動作がわかる
0487デフォルトの名無しさん
2010/02/15(月) 13:18:34「不定」とか書いてある根拠なし(有るわけないけど)に根拠要求して速攻返り討ち。
惨め過ぎる。
0488デフォルトの名無しさん
2010/02/15(月) 14:25:330489デフォルトの名無しさん
2010/02/15(月) 15:46:21char str[64] = "abc";
この文と
char str[64] = { 'a', 'b', 'c' };
char str[64] = { 'a', 'b', 'c', '\0' };
こいつらは等価なの?違うの?
0490デフォルトの名無しさん
2010/02/15(月) 15:59:510491デフォルトの名無しさん
2010/02/15(月) 16:07:400492デフォルトの名無しさん
2010/02/15(月) 18:08:13auto な配列でも 0 に初期化されるんですね。しらなかった。
0493デフォルトの名無しさん
2010/02/15(月) 18:23:540494デフォルトの名無しさん
2010/02/15(月) 18:28:08残りに0が入るが、残りの数が違うでしょ。
でも結局4番目に0が入るのは変わらない。
0495デフォルトの名無しさん
2010/02/15(月) 18:31:56いやいや、それが手元の gcc, bcc32, cl, で試すと 0 に初期化されたんですよ。K&R2 の該当ページでは
いまいちよくわからなかったんですが。
0496デフォルトの名無しさん
2010/02/15(月) 18:38:27するべき
0497デフォルトの名無しさん
2010/02/15(月) 18:43:450498デフォルトの名無しさん
2010/02/15(月) 20:02:57#define Floor(x) (int(x)-1+int((x)-int(x)+1))
0499デフォルトの名無しさん
2010/02/15(月) 20:07:24標準の関数(math.h) に floor(), ceil() があるのでそちらを。
0500デフォルトの名無しさん
2010/02/15(月) 20:08:46規格で決まっている以上、余計なことをする必要はないのでは?
あと、double や * のときには、困ったことになりますね。
書いて馬脚をあらわす感じがします。
0501デフォルトの名無しさん
2010/02/15(月) 20:12:22関数呼び出しより速いかなー?と思ったのですが、
やっぱり変なことはしない方がいいですかね。
ありがとうございました。
0502デフォルトの名無しさん
2010/02/15(月) 21:27:570503デフォルトの名無しさん
2010/02/15(月) 21:29:54ちょっといいすぎたので、軌道修正するとすれば、理解のための試行錯誤に価値がないわけではありません。
0504デフォルトの名無しさん
2010/02/15(月) 21:54:18#define FLOOR(x) ((int)(x) > (x) ? (int)(x) - 1 : (int)(x))
あたりがわかりやすいかと。
0505デフォルトの名無しさん
2010/02/15(月) 22:30:15質問してないで試してみろよ。
0506デフォルトの名無しさん
2010/02/16(火) 01:19:050507デフォルトの名無しさん
2010/02/16(火) 01:19:580508デフォルトの名無しさん
2010/02/16(火) 01:38:180509デフォルトの名無しさん
2010/02/16(火) 01:39:490510デフォルトの名無しさん
2010/02/16(火) 01:42:42int(-0.1)=0
floor(-0.1)=-1
0511デフォルトの名無しさん
2010/02/16(火) 07:33:04ただの除算だってCPUやアーキによっては関数コールになるし
0512デフォルトの名無しさん
2010/02/16(火) 08:49:54自作マクロと標準関数のどっちが早いか
とか、他人に調べさせるなよ。
0513デフォルトの名無しさん
2010/02/16(火) 09:20:03'c'の後に0が入るが、残りの数が違うでしょ。
残りの数って? 64-3=61 でないの?
0514デフォルトの名無しさん
2010/02/16(火) 10:48:23上は'a','b','c'と入れて残り61個に0を入れる
下は'a','b','c',0と入れて残り60個に0を入れる
0515デフォルトの名無しさん
2010/02/16(火) 14:45:55| ○ | r‐‐、
_,;ト - イ、 ∧l☆│∧
(⌒` ⌒ヽ /,、,,ト.-イ/,、 l つまり同じってことだ!
│ ヽー―'^ー-' ( ⌒γ⌒~~ /|
│ 〉 |│ |`ー^ー― r' |
│ /───| | |/ | l ト、 |
| irー-、 ー ,} | / i
| / `X´ ヽ / 入 |
0516デフォルトの名無しさん
2010/02/16(火) 14:57:36とりあえず初心者は猫でもわかる〜〜で勉強しとけばおk?
0517デフォルトの名無しさん
2010/02/16(火) 15:00:35オライリーのC実践プログラミング 第3版
0518デフォルトの名無しさん
2010/02/16(火) 15:07:140519デフォルトの名無しさん
2010/02/16(火) 20:16:25猫も悪くはない
要は何ができそうか、可能性を感じられるきっかけであることで
厳密な正確性は当初後回しでもいい
可能性を感じてから「ふーん」で終わるか「やってやる」とくるかが最初の適性試験
0520デフォルトの名無しさん
2010/02/16(火) 20:21:23参考書などを購入したのがいいですか?
趣味の範囲でプログラミングを始めたいと思ってます。
ちなみに高校生で大学の先取りも兼ねています。
0521デフォルトの名無しさん
2010/02/16(火) 20:23:30実際に動かしながらでないとなかなか身につかないよ
英語と一緒
0522デフォルトの名無しさん
2010/02/16(火) 20:44:250523デフォルトの名無しさん
2010/02/16(火) 21:00:01無料のコンパイラは腐るほどあるが・・・
おまえさん、そうではなく特定のコンパイラに毒されることを怖れてるんだろ?
あ・き・ら・め・ろ!
極論すると C という特定の言語に毒されることにも問題がなくはないんだぞ
で、何ができる? 違うだろ、何かするんだよ
what から入れ、how がたまたま C だったら、またおいで
0524デフォルトの名無しさん
2010/02/16(火) 21:08:190525デフォルトの名無しさん
2010/02/16(火) 21:09:06空気が読めない、打たれ強い人間だけが最後まで残ります。
0526デフォルトの名無しさん
2010/02/16(火) 21:16:45他あたります
0527デフォルトの名無しさん
2010/02/16(火) 21:22:50語りたい盛りのCユーザー(入門者)が「俺に聞け」って言ってるだけ
0528デフォルトの名無しさん
2010/02/16(火) 21:30:12×痛めつる
○痛めつける
0529デフォルトの名無しさん
2010/02/16(火) 21:35:510530デフォルトの名無しさん
2010/02/16(火) 21:39:57#define b c
#define c d
…
…
a;
b;
c;
って書いたら、どういう風にマクロ展開される?
b;
c;
d;
になる?それとも、
d;
d;
d;
になる?
0532デフォルトの名無しさん
2010/02/16(火) 22:31:51そんなの1分もあれば試せるだろ
0533デフォルトの名無しさん
2010/02/16(火) 22:32:28jibundetameseyo
0534デフォルトの名無しさん
2010/02/16(火) 22:37:02「ご自分でお試しになって頂けませんかカス」と言う方が推奨されるらしいぞ。
http://tsushima.2ch.net/test/read.cgi/newsplus/1266160521/
0535デフォルトの名無しさん
2010/02/16(火) 22:37:03マニュアルを読みましょう
0536デフォルトの名無しさん
2010/02/16(火) 22:49:140537デフォルトの名無しさん
2010/02/16(火) 23:05:05つ http;//codepad.org
0538デフォルトの名無しさん
2010/02/16(火) 23:05:570539デフォルトの名無しさん
2010/02/16(火) 23:13:16gcc なら
gcc -E test.c
などとすれば試せる。ちなみにこのやりかたは google で「gcc プリプロセッサ」というキーワードで検索した。
0540デフォルトの名無しさん
2010/02/16(火) 23:25:420541デフォルトの名無しさん
2010/02/17(水) 00:15:59ここで発言している間に確認できるだろ。
よっぽどの馬鹿かわざとだな
0542デフォルトの名無しさん
2010/02/17(水) 00:17:42つづく
0543デフォルトの名無しさん
2010/02/17(水) 00:26:330544デフォルトの名無しさん
2010/02/17(水) 00:41:26ねぇ、日下部さん、今は2ch?
0545デフォルトの名無しさん
2010/02/17(水) 00:55:240546日下部陽二
2010/02/17(水) 12:27:17よく言い聞かせておきます。
0547デフォルトの名無しさん
2010/02/17(水) 12:29:180548デフォルトの名無しさん
2010/02/17(水) 17:23:380549デフォルトの名無しさん
2010/02/18(木) 16:51:000550デフォルトの名無しさん
2010/02/18(木) 16:52:27彼の世界では、「言語C」だけが存在していて、「C言語」なるもは存在しないのです。
0551デフォルトの名無しさん
2010/02/18(木) 16:58:350552デフォルトの名無しさん
2010/02/18(木) 17:07:410553デフォルトの名無しさん
2010/02/18(木) 17:14:570554デフォルトの名無しさん
2010/02/18(木) 17:16:360555デフォルトの名無しさん
2010/02/18(木) 17:37:40まだ言ってたら藁だな
0556デフォルトの名無しさん
2010/02/18(木) 19:28:200557デフォルトの名無しさん
2010/02/19(金) 00:22:110558デフォルトの名無しさん
2010/02/19(金) 01:53:32#include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){
ULARGE_INTEGER FreeBytesAvailableToCaller;
FreeBytesAvailableToCaller.QuadPart = 1;
TCHAR tnob[256] = _T("a1");
return 0;
}
なぜかこれをコンパイルすると、
error C2275: 'TCHAR' : illegal use of this type as an expression
というエラーになります。tchar.hをインクルードしているのに、TCHARが使えないなんてありえないと思うのですが。
しかし、
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){
ULARGE_INTEGER FreeBytesAvailableToCaller;
TCHAR tnob[256] = _T("a1");
return 0;
}
こうすると、なぜか上記のエラーはなくなります。
いったいなぜなんでしょうか?ULARGE_INTEGERのQuadPartはULONGLONG型であり、普通に1を代入できるはずなのですが。
そもそも、ここがおかしいのと、TCHARが使えないことに関係はないと思うのですが。
解決策わかるかたおられますか?
0559デフォルトの名無しさん
2010/02/19(金) 01:57:04ファイル名を 〜.c から 〜.cpp に変える。
0560デフォルトの名無しさん
2010/02/19(金) 01:59:05あれ??エラーなくなりました。ありがとうございます。
しかしなぜなんですか???????
0561デフォルトの名無しさん
2010/02/19(金) 01:59:43VS2008 はよくわからんが、C99 未対応コンパイラはブロックの先頭でしか
変数宣言できないぞ。
0562デフォルトの名無しさん
2010/02/19(金) 02:00:340563デフォルトの名無しさん
2010/02/19(金) 08:00:17しかられたヤシ
0564デフォルトの名無しさん
2010/02/19(金) 13:07:16int main(void)
{
int array[10];
int i;
for(i = 1;i <= 10;i++) { /* for文の始め */
printf("%d 個目の数値を入力してください。:",i); /* 数値の入力部分 */
scanf("%d",&array[i]);
}
for(i = 10;i >= 1;i--) { /* 10個の数値を逆に表示 */
printf("%d\n",array[i]);
}
return 0;
}
http://homepage3.nifty.com/mmgames/c_guide/13-q.html#S7
このURLにある練習問題の[3]
「入力された10個の数値を最後から表示するプログラムを作成せよ。」
という問題を解いてみたのですが、コンパイルするとエラーおきます。
なぜなのでしょうか?
0565デフォルトの名無しさん
2010/02/19(金) 13:15:58配列の要素は要素番号0から始まる。
0566デフォルトの名無しさん
2010/02/19(金) 13:27:49エラーが出なくなりました。ありがとうございます。
エラーの原因ですが、array[10]としてたせいで、
array[]でできる変数がarray[0]〜array[9]までしかできず、
array[10]を表示しようとしてエラーが起きたと考えていいのでしょうか?
0567デフォルトの名無しさん
2010/02/19(金) 17:37:140568デフォルトの名無しさん
2010/02/19(金) 18:38:340569デフォルトの名無しさん
2010/02/19(金) 19:25:54scanfは出てこないの?いきなりfgetsとか使ってたりするんか
0570デフォルトの名無しさん
2010/02/19(金) 21:11:43scanfを回避するにあたっての困難性をきれいに解決した例をまだ見ない
0571デフォルトの名無しさん
2010/02/19(金) 21:31:00危険なパターンさえ回避しておればいいのではないかと。
0572デフォルトの名無しさん
2010/02/19(金) 23:00:02↓
sscanf()
0573デフォルトの名無しさん
2010/02/19(金) 23:15:48scanf() で安全な場合もあるのですが。
0574デフォルトの名無しさん
2010/02/19(金) 23:18:160575デフォルトの名無しさん
2010/02/19(金) 23:41:34例示以外のレスは無意味
0576デフォルトの名無しさん
2010/02/19(金) 23:47:010577デフォルトの名無しさん
2010/02/20(土) 00:30:37ほんとうに習い始めの数行くらいのコードでしか使えない。
それ以上のちょっと複雑な処理になると、ほとんどの初心者がはまる。
トラブルの回避方法とかscanf()の細かい挙動なんて学習しても
時間のムダだから、最初から使わないほうがいい。
0578デフォルトの名無しさん
2010/02/20(土) 01:40:58というAAが思い浮かんだ
0579デフォルトの名無しさん
2010/02/20(土) 03:13:010580デフォルトの名無しさん
2010/02/20(土) 04:23:160581デフォルトの名無しさん
2010/02/20(土) 04:25:29ポインタがどこを指しているのか分かりません><
0582デフォルトの名無しさん
2010/02/20(土) 13:38:25正解です
0583デフォルトの名無しさん
2010/02/20(土) 14:43:1264bit整数にキャストしてその値をprintfすればどこを指しているか白日の下にさらされるであろう。
0584デフォルトの名無しさん
2010/02/20(土) 14:53:16*(p+1)とすべきなのでしょうか?
int a[10] = { 0 };
int *p = a;
printf("%d", p[1]);
0585デフォルトの名無しさん
2010/02/20(土) 14:55:54いいえ
いいえ
0586デフォルトの名無しさん
2010/02/20(土) 21:57:16printf("%d", (long long)580);
こうでいい?
0587デフォルトの名無しさん
2010/02/20(土) 22:02:21%dだとだめだろ。
0588デフォルトの名無しさん
2010/02/20(土) 22:17:240589デフォルトの名無しさん
2010/02/20(土) 22:21:28long longだから、%pでもない。
0590デフォルトの名無しさん
2010/02/21(日) 01:52:50unix環境です
0591デフォルトの名無しさん
2010/02/21(日) 08:53:00iconvやnkfを使う
0592デフォルトの名無しさん
2010/02/21(日) 11:46:33サンクス、うまく行きました、感謝です
でもこれiconvしたあとでURLエンコードもいるんですね
0593デフォルトの名無しさん
2010/02/21(日) 12:11:23単純な三角形の面積やら
二次方程式の解やら
数列の和やら
美籍やらを求めるアルゴリズムと、解説とサンプルコードを書いた
数値解析入門系のサイトをおしえてくりゃれ
0594デフォルトの名無しさん
2010/02/21(日) 12:14:240595デフォルトの名無しさん
2010/02/21(日) 12:17:50その程度のことは自分で考えろw
0596デフォルトの名無しさん
2010/02/21(日) 12:22:09中学校いけ
0597デフォルトの名無しさん
2010/02/21(日) 13:12:200598デフォルトの名無しさん
2010/02/21(日) 13:14:480599デフォルトの名無しさん
2010/02/21(日) 16:50:410600デフォルトの名無しさん
2010/02/21(日) 17:51:220601デフォルトの名無しさん
2010/02/21(日) 18:01:29小学校じゃねぇか下手すると
0602デフォルトの名無しさん
2010/02/21(日) 18:21:02hoge[0]=hogehoge&0xff000000;
hoge[1]=hogehoge&0x00ff0000;
…
以外でお願いします。
0603デフォルトの名無しさん
2010/02/21(日) 18:27:450604デフォルトの名無しさん
2010/02/21(日) 18:29:25もしくは、共用体を使う
0605デフォルトの名無しさん
2010/02/21(日) 18:35:230606デフォルトの名無しさん
2010/02/21(日) 18:36:02キャストしたのがL-valueになるのか
いつの時代の話だよ
0607デフォルトの名無しさん
2010/02/21(日) 18:39:320608デフォルトの名無しさん
2010/02/21(日) 18:42:00そうですか。scanf("%d", &n) くらいは便利なんですがね。
0609デフォルトの名無しさん
2010/02/21(日) 18:42:310610デフォルトの名無しさん
2010/02/21(日) 18:44:250611デフォルトの名無しさん
2010/02/21(日) 18:48:110612デフォルトの名無しさん
2010/02/21(日) 18:50:540613デフォルトの名無しさん
2010/02/21(日) 18:51:10共有体を使えば?
0614デフォルトの名無しさん
2010/02/21(日) 18:51:180615デフォルトの名無しさん
2010/02/21(日) 18:52:44> hoge[1]=hogehoge&0x00ff0000;
これを忌避する理由を述べよ。条件後出しは断る。
0616デフォルトの名無しさん
2010/02/21(日) 18:54:14エンディアンというものがあるということを教えるのは
良いことかも
0617デフォルトの名無しさん
2010/02/21(日) 19:12:45お前らそういうなら
微分・積分のアルゴリズムを書いてみろよ
ほら、はやく。どーせかけないんだろ?
わかってもいねぇ奴が人を腐して偉そうにしてんじゃねぇよ
ほら、書けるもんならかいてみろwwwwwwwwwwカスwww
0618デフォルトの名無しさん
2010/02/21(日) 19:24:35かわいそう・・・
0619デフォルトの名無しさん
2010/02/21(日) 19:26:29微分積分のアルゴリズムってなんだよw
0620デフォルトの名無しさん
2010/02/21(日) 19:28:340621デフォルトの名無しさん
2010/02/21(日) 19:30:140622デフォルトの名無しさん
2010/02/21(日) 19:33:090623デフォルトの名無しさん
2010/02/21(日) 19:36:16…俺なら、何がどうあってもそれは避けるよ。0固定とかいやだし。
0624デフォルトの名無しさん
2010/02/21(日) 19:38:49もう何も言うまい。それがアルゴリズムそのものだろ…
0625デフォルトの名無しさん
2010/02/21(日) 19:41:41美籍なんか、紙で書いたら2乗だのを前にだすだけじゃねぇか
それがなんでガウスなんとか見たいな、わけわかんねーのになるんだよ
求めてるんはそんなんじゃねぇんだよ
シンプルで分かりやすいもんを求めてんだよ
あ?お前らみんなガウスなんとか理解してんのか?おい
0626デフォルトの名無しさん
2010/02/21(日) 19:42:490627デフォルトの名無しさん
2010/02/21(日) 19:45:35ねえ、まず学年を教えてくれない?ちょっとあり得ない事言ってるんだけど
0628デフォルトの名無しさん
2010/02/21(日) 19:47:10うっせーよ
答えも出せないんだろ?お前は。いらねーよカス
0629デフォルトの名無しさん
2010/02/21(日) 19:48:25微分の定義習ってないの?
0630デフォルトの名無しさん
2010/02/21(日) 19:53:05>あ?お前らみんなガウスなんとか理解してんのか?おい
自分が世間的にどの程度のレベルなのかを理解することは大事ですよ。
これは数学云々だけの話じゃなくて、たとえば
>単純な三角形の面積やら
底辺と高さから求めるのか、或いは3点の座標から求めるのか、
そういうことすら想定してないでしょう?
0631デフォルトの名無しさん
2010/02/21(日) 19:54:090632デフォルトの名無しさん
2010/02/21(日) 19:55:46>> hoge[0]=hogehoge&0xff000000;
>> hoge[1]=hogehoge&0x00ff0000;
> これを忌避する理由を述べよ。条件後出しは断る。
オーバーフローするから
0633デフォルトの名無しさん
2010/02/21(日) 20:16:50何で?
0634デフォルトの名無しさん
2010/02/21(日) 20:19:020635デフォルトの名無しさん
2010/02/21(日) 20:27:100636デフォルトの名無しさん
2010/02/21(日) 20:41:08char[4]にしたいなら、memcpy()とかunionじゃないほうがいいよな。
0637デフォルトの名無しさん
2010/02/21(日) 20:42:28sprintf(hoge, "%d", hogehoge);
0638デフォルトの名無しさん
2010/02/21(日) 22:12:16>char hoge[4]
が見えんと申すか。
0639デフォルトの名無しさん
2010/02/21(日) 22:38:40つ mathematica
0640デフォルトの名無しさん
2010/02/21(日) 22:39:28そうそう、解析に解けない楕円積分とかを数値積分することに計算機の意味がある。
0641デフォルトの名無しさん
2010/02/21(日) 22:44:06どういうこと?
char c = 1000;ってやるとなんかまずいと思ってる?
あと、unionでどうにかしようと思ってる人は間違いだ
0642デフォルトの名無しさん
2010/02/21(日) 22:51:550643デフォルトの名無しさん
2010/02/21(日) 22:52:530644デフォルトの名無しさん
2010/02/21(日) 22:55:48その心は?
hoge[0] = n & 0xff0000; とかやっても、値が入らないんじゃないかって
ふつーに思うんだけど。
CHAR_MAXが255とは限らないって話?
0645デフォルトの名無しさん
2010/02/21(日) 23:05:28つまり、union は同時には使わない変数の記憶域節約にのみ使えと?
0646デフォルトの名無しさん
2010/02/22(月) 00:05:43>>623と同じことをいってるだけかしら
>>645
他の型で取り出せる保証はないからね
0647デフォルトの名無しさん
2010/02/22(月) 00:18:48機種依存を百も承知のコード(ドライバとかね)を、
そうであることに十分に意識して注意深く記述というのはよくある話で、
アセンブラやニーモニックコードを持たない機械語とのやりとりにあたっては
「保証」はある範囲で存在すればよいことなので一般論にはあてはまらない
0648デフォルトの名無しさん
2010/02/22(月) 00:24:010649デフォルトの名無しさん
2010/02/22(月) 00:27:45なんだ思わせぶりにひっぱてるだけか。
0650デフォルトの名無しさん
2010/02/22(月) 01:13:300651デフォルトの名無しさん
2010/02/22(月) 09:33:40uint32_t hogehoge;
uint8_t hoge[4];
hoge[0]=hogehoge%256;
hoge[1]=(hogehoge/256)%256;
hoge[2]=(hogehoge/256/256)%256;
hoge[3]=hogehoge/256/256/256;
0652デフォルトの名無しさん
2010/02/22(月) 09:43:45単純に共用体使ってバイトごとのデータをとるのは
よくあるコードだ、てだけじゃないの?
他の分野じゃ知らんが、通信系じゃ普通のことだよ。
0653デフォルトの名無しさん
2010/02/22(月) 09:45:26{
uint32_t DWORD;
uint8_t BYTE[4];
} hoge;
uint32_t hogehoge;
hoge.DWORD=hogehoge;
0654デフォルトの名無しさん
2010/02/22(月) 10:11:38>>641もunion使ってるプロトコルスタックを使って、
偉そうにunion使うなと書いている。
0655デフォルトの名無しさん
2010/02/22(月) 10:23:26処理系でどう定義されてるかを認識した上で使うなら問題ないってこと?
0656デフォルトの名無しさん
2010/02/22(月) 10:32:410657デフォルトの名無しさん
2010/02/22(月) 10:46:25冗長?
int n = 1;
if( *(char*)&n ) {
hoge[0] = ((char*)&hogehoge)[3];
hoge[1] = ((char*)&hogehoge)[2];
hoge[2] = ((char*)&hogehoge)[1];
hoge[3] = ((char*)&hogehoge)[0];
} else {
memcpy(hoge, &hogehoge, 4);
}
0658デフォルトの名無しさん
2010/02/22(月) 11:40:46とすると
abc
def
となってくれるのですが
smpl.txtに
abc\ndef
と書いて読み込み→表示としても
abc\ndef
となってしまいます
ファイルから読み込んで改行するにはどうすればいいですか?
配列一つでなんとかしたいです
0659デフォルトの名無しさん
2010/02/22(月) 11:53:14http://codepad.org/mT6IaGkV
0660デフォルトの名無しさん
2010/02/22(月) 11:55:04fread 使ったら?
0661デフォルトの名無しさん
2010/02/22(月) 11:56:230662デフォルトの名無しさん
2010/02/22(月) 12:02:01うまくいきました
0663デフォルトの名無しさん
2010/02/22(月) 12:06:170664デフォルトの名無しさん
2010/02/22(月) 14:29:02甘いっつか、intの値をcharの配列に入れる時点で
処理系に依存せざるを得ないからなぁ・・・
0665デフォルトの名無しさん
2010/02/22(月) 14:33:01エンディアンさえ正しく認識してれば問題ないと
0666デフォルトの名無しさん
2010/02/22(月) 15:07:24#include <stdio.h>
#include <stdlib.h>
int main(void){
return printf(fgets(malloc(256),256,fopen("sample.txt","r")));
}
0667デフォルトの名無しさん
2010/02/22(月) 15:11:26echo 100%dry-fruits > sample.txt
0668デフォルトの名無しさん
2010/02/22(月) 15:22:08\nを改行だと解釈するのはprintfじゃないよ。cコンパイラ。
0669デフォルトの名無しさん
2010/02/22(月) 17:40:290670デフォルトの名無しさん
2010/02/22(月) 17:43:33はどのような扱いを受ける?無視?それともエラー?
警告?
0671デフォルトの名無しさん
2010/02/22(月) 17:44:040672デフォルトの名無しさん
2010/02/22(月) 18:03:19は、実行中はただの\
0673デフォルトの名無しさん
2010/02/22(月) 18:05:59文字列と文字列リテラルの区別がつくようになれよ
0674デフォルトの名無しさん
2010/02/22(月) 18:23:48単独の¥を¥として扱ってくれるコンパイラも少ない
¥¥としないと¥としては扱ってくれない
0675デフォルトの名無しさん
2010/02/22(月) 18:29:590676デフォルトの名無しさん
2010/02/22(月) 18:33:440677デフォルトの名無しさん
2010/02/22(月) 18:36:29プログラム記述中に登場する \ と(リテラル)、
メモリ上でのイメージでの \ (0x5c)
を区別しろって。
dll なんかのバイナリコード中の 0x5c を変換されたらカワナン
0678デフォルトの名無しさん
2010/02/22(月) 18:37:04このスレ向きかもな
0679デフォルトの名無しさん
2010/02/22(月) 18:50:470680デフォルトの名無しさん
2010/02/22(月) 18:53:55http://msdn.microsoft.com/ja-jp/library/wc7014hz(VS.80).aspx
0681デフォルトの名無しさん
2010/02/22(月) 19:16:41"abc¥¥cde"
を見るとこれは"で始まっている"で終わっているから
文字列リテラルと呼んでる奴だな
と判断し文字列リテラル中の連続する¥¥は
単独の¥であるがごとく解釈する
連続しない¥が現れた場合¥nなどのように
後ろの文字によっては別の文字に置き換えて
解釈する場合もあるが殆どの場合は警告を出して
スキップする。
"表¥計算"とかが警告だされるどころかそれまで
出ていた警告が逆に消える理由は表という
テキストエディターでは漢字に見える文字列は
コンパイラは実は2つ(以上の)の文字列でしか
なく偶々その後ろの文字が¥に一致していたから
0682デフォルトの名無しさん
2010/02/22(月) 19:19:12○コンパイラにとっては実は2...
0683デフォルトの名無しさん
2010/02/22(月) 19:41:580684デフォルトの名無しさん
2010/02/22(月) 19:42:450685デフォルトの名無しさん
2010/02/22(月) 19:49:03バックスラッシュを円記号に変換する2ちゃんねるブラウザ()が
あるらしいですよ?
0686デフォルトの名無しさん
2010/02/22(月) 19:50:29あ、そなの?それは失礼しました
0687デフォルトの名無しさん
2010/02/22(月) 20:43:170688デフォルトの名無しさん
2010/02/22(月) 21:26:12失礼と言う程でもないですよ
0689デフォルトの名無しさん
2010/02/22(月) 23:50:12perlの''とかC#の@""とかが恋しく思うときがある
0690デフォルトの名無しさん
2010/02/23(火) 00:37:30MSでも
0691デフォルトの名無しさん
2010/02/23(火) 01:25:19\\ は見づらいし
0692デフォルトの名無しさん
2010/02/23(火) 03:54:32・メモ帳から200個の数字を読み取ってその平均値を出して、またメモ帳に書き込む
というプログラムを作れるようになるにはだいたい何日くらいかかりますかね?
0693デフォルトの名無しさん
2010/02/23(火) 04:03:000694デフォルトの名無しさん
2010/02/23(火) 04:24:17リアルメモ帳上の20個の3桁の整数値の平均を出せるように
なるまで個人差、環境差、状況差もあるが産まれてから10年
程度じゃまずムリと考えたほうが良さげ
200個10桁ともなれば30年経っても無償でやれる人は
殆ど居ない
200個100桁ともなると例え有償でも手計算でノーミスで
やれる人自体皆無になる。
(Windowsアプリ「メモ帳」のメモリ内容を書き換えるなんて
操作取得までの時間なんてきかないほうがよい)
C言語でテキストファイルから200個の数字を読み取り平均値を
付け加える処理の記述が自然にラクに出来るようになるまでの
時間もきかないほうがいいが,Windows環境というのであればWSH
処理系を選んだほうがやや速いのではないかと
0695デフォルトの名無しさん
2010/02/23(火) 10:54:18Ctrl+Aなげて全選択してCtrl+C投げてコピって
数字だけ拾い出して平均値出して、それをまたメモ帳にSetWindowTextすればいいんでね
以上のことを調査で1日作業で1日予備で1日で3日
>>694
なにこれ?
手計算ってなに?手計算でやるプログラムってどう誤読するとそうなるんw
生まれてからって何? 692の言っているのは初心者からであって、誕生からではなくね?
0696デフォルトの名無しさん
2010/02/23(火) 11:18:490697デフォルトの名無しさん
2010/02/23(火) 11:48:450698デフォルトの名無しさん
2010/02/23(火) 14:03:140699デフォルトの名無しさん
2010/02/23(火) 14:17:24作れるようになるんじゃね
0700デフォルトの名無しさん
2010/02/23(火) 14:34:51基礎から順番に習っていってそれができるまでに要する期間となると、結構かかるかもね
0701デフォルトの名無しさん
2010/02/23(火) 14:56:40想像する「初心者」がまったく違うと思われ
0702デフォルトの名無しさん
2010/02/23(火) 17:06:40言語はできる + OS周辺は初心者
言語は初心者 + OS周辺は経験あり
0703デフォルトの名無しさん
2010/02/23(火) 17:09:360704デフォルトの名無しさん
2010/02/23(火) 17:24:360705デフォルトの名無しさん
2010/02/23(火) 17:35:400706デフォルトの名無しさん
2010/02/23(火) 19:59:14メモ帳にカンマ区切りで数字のみ並んでいてかつ、メモ帳が1個しか起動してないなら
そしてメモ帳に書いてある事は消えるけど
つか保存して読み込んだほうがよくね? そうすればよくある初心者むきのプログラムだし
int i=0;
int count=1;
HWND np,npe;
np=FindWindow("Notepad",NULL);
npe=FindWindowEx(np,0,"Edit",NULL);
SendMessage(npe, WM_GETTEXT, sizeof(str), (LPARAM)str);
p = strtok(str,",");
i += atoi(p);
while(p = strtok( NULL,",")){
i += atoi(p);count++;
}
i /=count;
sprintf(str,"%d",i);
SendMessage(npe, WM_SETTEXT, 0, (LPARAM)str);
0707デフォルトの名無しさん
2010/02/24(水) 00:07:470708707
2010/02/24(水) 00:10:340709デフォルトの名無しさん
2010/02/24(水) 00:18:56何せCの文法やライブラリすら完全に固まっ
てるというわけでもないんだからよ
0710デフォルトの名無しさん
2010/02/24(水) 00:35:10>>692のやりたいことが固まってないだけだw
0711デフォルトの名無しさん
2010/02/24(水) 02:01:46それ以外に方法はありますか?
お願いします。
0712デフォルトの名無しさん
2010/02/24(水) 02:06:03まぁ「中央値 アルゴリズム」でぐぐれば山ほど説明がでてくる気に入ったの試してみたら
0713デフォルトの名無しさん
2010/02/24(水) 02:07:12http://pc12.2ch.net/test/read.cgi/tech/1266844916/18
タイミングよくこんな話がでてるよ
0714デフォルトの名無しさん
2010/02/24(水) 02:10:04話ですので、一般論は差し控えたいものですなw
コンテクストを教えて頂かなければ答えられません。
0715デフォルトの名無しさん
2010/02/24(水) 02:11:160716デフォルトの名無しさん
2010/02/24(水) 02:17:540717デフォルトの名無しさん
2010/02/24(水) 02:37:49SendMessageでファイル保存ダイアログ開かせて適当なファイル名をWM_CHARで送ってボタンのハンドルにlbtndown送って保存させて、
それを開いて読み込んでって感じに706を改良すれば委員じゃね?
0718デフォルトの名無しさん
2010/02/24(水) 02:52:11ケースもありまつ(次のアクセスまで有効かつ次のアクセス時
に必須)(列挙において常に順序が変わります)
そして本物のデータの一個一個がかなり巨大なので
全部を配列にコピーして記憶も無理です
0719デフォルトの名無しさん
2010/02/24(水) 07:50:40ありがとう。いろいろ調べてみます。が、難しそうですね。
0720デフォルトの名無しさん
2010/02/24(水) 15:42:22うん、難しいよ
0721デフォルトの名無しさん
2010/02/24(水) 15:47:14だけでよくてつまり簡単のではないかと ....
>>715のようなひねくれたケースに限っては
中間値を求めること自体に意味があるケース
は殆ど無いのではないかと思われます。
0722デフォルトの名無しさん
2010/02/24(水) 21:15:45VC++で書いたんですが、文字数が合う時と合わない時があります
最初は必ず1,0になるみたいです
どこがいけないのでしょうか
0723デフォルトの名無しさん
2010/02/24(水) 21:41:52他は見てないけど
96行目が怪しい
if(position[0] = '\0'){
0724707
2010/02/24(水) 21:43:39もっとC言語の入門的な既に保存済みのhoge.txtをfopenで開いて処理したいだけと想定しました。
>>692が答えてくれないと正解は分かりませんけど。
0725デフォルトの名無しさん
2010/02/24(水) 22:00:22位置も種類も当たった文字数が0の時、種類のみ当たった文字数を
カウントする部分なんですが、試しに消したら余計におかしくなりました・・・
0726デフォルトの名無しさん
2010/02/24(水) 22:51:13つまり>>692はPCの初心者も兼ねるよ派ですね
0727デフォルトの名無しさん
2010/02/24(水) 22:58:25=って何?==のこと?
0728デフォルトの名無しさん
2010/02/24(水) 23:13:10あ、すみません「==」の間違いでした
直しましたがやっぱり文字数が合わない時があります
0729デフォルトの名無しさん
2010/02/24(水) 23:37:48この-1ってなんですか?
0730デフォルトの名無しさん
2010/02/24(水) 23:59:06最初文字列の読み込みの仕方がよくわからなかったので、とりあえず大学のプリントを
真似しようと思って読み込み部分はコピペしてます
元はfgetsで読んだ文字列に対して、各文字コードが1小さい文字列を配列に作るプログラム
(の一部)みたいです
-1消しても変わりませんね・・・
>>722は大学の課題です
0731デフォルトの名無しさん
2010/02/25(木) 01:46:19一回ごとにmemsetで0詰めるとかすればいいと思う
0732デフォルトの名無しさん
2010/02/25(木) 01:53:36int i,f,len,n,n1,n2;
memset(secret,'\0',sizeof(secret)); memset(secret2,'\0',sizeof(secret2));
printf("秘密の単語は? ");
fgets(secret2, BUFLEN, stdin);
secret2[strlen(secret2)-1]='\0';
len = strlen(secret2);
printf("秘密の単語は %d 文字です。\n", len); n=0;
while(1){
strcpy(secret,secret2);//secretはいじるのでおおもとかっらコピって使う
printf("類推した単語は? ");
memset(conjecture,'\0',sizeof(conjecture));
fgets(conjecture, BUFLEN, stdin);
conjecture[strlen(conjecture)-1]='\0';
if(!strcmp(conjecture,secret))break;
n1 = 0; n2 = 0;
for(i=0;i<len;i++){ //位置も値も同じ
if(secret[i]==conjecture[i]){
n1++; secret[i]=conjecture[i]=NULL;//カウントアップして見つけた所つぶす
}
}
for(i=0;i<len;i++){ //位置違い
for(f=0;f<len;f++){
if(secret[i] && conjecture[f]){//つぶしたところはやらない
if(secret[i]==conjecture[f]){
n2++; secret[i]=conjecture[f]=NULL;//カウントアップして見つけた所つぶす
}}}}
printf("位置も種類も当たった文字数は %d 、種類のみ当たった文字数は %d です。\n",n1 ,n2); n++;
}
printf("%d 回で当てました!\n", n);return 0;
}
0733デフォルトの名無しさん
2010/02/25(木) 01:56:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10551.txt
このように書き換えたらちゃんと動きました
positionとkindの初期化位置、NULL文字を入れる位置などがおかしかったっぽいです(多分
ご回答くださった方々どうもありがとうございました
0734デフォルトの名無しさん
2010/02/25(木) 02:02:59とりあえず完成したからよしとしよう・・・
0735デフォルトの名無しさん
2010/02/25(木) 14:14:06do
{
flag=0;
for(j=i+1;j<9;j++);
{
if(msort[i]>msort[j])
{
work=msort[j];
msort[j]=msort[i];
msort[i]=work;
flag=1;
}
}
for(k=0;k<10;k++)
{
printf("%4d", msort[k]);
}
printf(" \n ");
i++;
}while(flag==1);
下方のprintf関数はスルーでおk
配列に入ってる10個の数値から、最小値を見つけて見つけたら入れ替えを
繰り返して昇順にソートするプログラムです。
何かおかしいところあったら教えてください。
0736デフォルトの名無しさん
2010/02/25(木) 14:18:32つスレタイ
0737デフォルトの名無しさん
2010/02/25(木) 15:10:34セグメンテーションフォールトで落ちるようになってしまいました。
確保しようとするサイズも16バイトと小さいです。
どのような原因が考えられるでしょうか?
(gdb) bt
#0 0x00002b186539ad03 in mallopt () from /lib/libc.so.6
#1 0x00002b1865399ff7 in malloc () from /lib/libc.so.6
0738デフォルトの名無しさん
2010/02/25(木) 15:33:330739デフォルトの名無しさん
2010/02/25(木) 15:36:080740デフォルトの名無しさん
2010/02/25(木) 20:58:37do〜whileをやめて
for ( int i = 0; i < size; i++ )
{
for ( int j = i + 1; j < size; j++ )
{
並び替え
}
}
じゃダメかしら
0741デフォルトの名無しさん
2010/02/26(金) 03:33:03>for(j=i+1;j<9;j++);
あと、入れ替えが起きなかった場合に途中でソートが終了してしまう。
0742デフォルトの名無しさん
2010/02/26(金) 11:07:42do〜whileは flag立てる為に使いたい
>>741
>for(j=i+1;j<9;j++);
for文にセミコロン入ってるwww
初歩的ミスでした。。。
セミコロン消して実行したら、問題解決しました!
>>740>>750
ありがとう!
0743デフォルトの名無しさん
2010/02/26(金) 11:18:17たとえば先頭にたまたま一番小さい値が入ってた場合、
ソートは全くなされない。
0744デフォルトの名無しさん
2010/02/26(金) 12:42:06フラグを立てて整列されたかを判断。
そのたびに、一回目、二回目・・・と出力するプログラムを作ってました。
0745デフォルトの名無しさん
2010/02/26(金) 12:45:22http://www.kouno.jp/home/c_faq/c5.html#9
> ... 特にASCIIのナル文字(NUL)が必要な場合は、絶対にNULLを使っ てはならない。 ...
0746デフォルトの名無しさん
2010/02/26(金) 12:50:19額面どおり読んじゃだめだよ
0747デフォルトの名無しさん
2010/02/26(金) 12:56:32http://www.c-faq.com/null/nullor0.html
> ... In particular, do not use NULL when the ASCII null character (NUL) is desired. ...
0748デフォルトの名無しさん
2010/02/26(金) 12:58:320749デフォルトの名無しさん
2010/02/26(金) 13:00:02だから何? char x = NULL とかしていいとでも言うの?
0750デフォルトの名無しさん
2010/02/26(金) 13:03:380751デフォルトの名無しさん
2010/02/26(金) 13:11:42mainの外で
double a[N][N];
とすると、(時間はかかるけど)領域確保できるのですが、、
mainの内で同じ式を書くと
Segmentation fault
になってしまいます。
なぜですか?
0752デフォルトの名無しさん
2010/02/26(金) 13:13:300753デフォルトの名無しさん
2010/02/26(金) 13:19:23「グローバル変数にした場合、プロセスファイルに
その情報が書き込まれ、領域確保はシステム状態
を熟知しているOSがより洗練された方法でプロセス
実行前に行い失敗する限りプロセスを開始しないから
失敗しようがない。
ローカル変数にした場合能力が本質的に低く
単純だが速度が速い方法でプロセス自体が領域を
確保を行うから失敗する。」
↑これ古い考え方だから多分不正解
0754デフォルトの名無しさん
2010/02/26(金) 13:23:47環境によるけど、たぶんスタックが足りないから。
0755デフォルトの名無しさん
2010/02/26(金) 13:30:02たしかにmainの内でも、
static double a[N][N];
にしたら確保できました。
ありがとうございました。
0756デフォルトの名無しさん
2010/02/26(金) 15:04:43バカだなあ、と思われても構わないならいいけど。
0757デフォルトの名無しさん
2010/02/26(金) 15:49:13どういう点でばかだなぁと思われると思っているかによって評価が変わるレスだな
0758デフォルトの名無しさん
2010/02/26(金) 17:38:39手元のコンパイラ(bcc)ですと、以下のようになっているのですが、C++とCでは
NULLの型が違うということ?
# if defined(__cplusplus) || defined(_Windows)
# define NULL 0
# else
# define NULL ((void *)0)
# endif
0759デフォルトの名無しさん
2010/02/26(金) 18:02:27void *と他のポインタはコンパチではないので、比較、代入できない。
関数プロトタイプは省略出来ない。
従って0を使う。
Cでは
void *は他のポインタとコンパチ、比較、代入できる。
関数プロトタイプはオプション
従って(void *)0を使う。
0760デフォルトの名無しさん
2010/02/26(金) 18:13:13情報どうもです。少し難しくて微妙に理解できないので、もう少し
勉強してからまた来ます><;
C++は型チェックが厳密と聞いていたのですが、ポインタにスカラー値を
直接代入できるとか、曖昧な点もあるのですね。メモメモ・・・
0761デフォルトの名無しさん
2010/02/26(金) 18:15:28関数プロトタイプと 0 の関係についてぜひ教えてください。
0762デフォルトの名無しさん
2010/02/26(金) 18:17:19定数0と等しいポインタはどこも指していない(ヌルポインタ)。
定数0が代入されたポインタはどこも指していない(ヌルポインタ)。
0763デフォルトの名無しさん
2010/02/26(金) 18:17:36つ http://www.kouno.jp/home/c_faq/c5.html#0
すなわち、char *p = NULL; ではポインタにスカラを代入するわけではない。
0764デフォルトの名無しさん
2010/02/26(金) 18:20:12sizeof(int) != sizeof(void *)の時に破綻する。
0765デフォルトの名無しさん
2010/02/26(金) 18:29:50ヌルポインタの実装上の表現が 0 と同一とは限らない点に注意。
0766デフォルトの名無しさん
2010/02/26(金) 18:43:06new/deleteで異常終了する(Visual C++)
http://pc12.2ch.net/test/read.cgi/tech/1262777752/
0767デフォルトの名無しさん
2010/02/26(金) 19:01:35もう話終わってるよ
0768デフォルトの名無しさん
2010/02/26(金) 19:22:29オレにアンカー張るな。
0769デフォルトの名無しさん
2010/02/26(金) 21:20:38モジュール分けしてファイルを分けた時に、
例えば main.c calc.c output.cと分けたとして、
calc.cでしか使わない構造体とかの定義ってcalc.hに書きますか?
それともcalc.cの先頭につらつらと書きますか?
0770デフォルトの名無しさん
2010/02/26(金) 21:28:49ヘッダファイルにするのは、記述内容を複数のコンパイル単位で読み込むため、と限定して考えるのであれば、
> それともcalc.cの先頭につらつらと書きますか?
の方を私はとります。
0771デフォルトの名無しさん
2010/02/26(金) 21:34:44if (count ==100){
Printf ("売り切れ\n");
}
else{
count ++;
}
本から抜粋なんだけど何を基準に
int Count;とint Count=0;を使い分けてるの?
0772デフォルトの名無しさん
2010/02/26(金) 21:45:100773デフォルトの名無しさん
2010/02/26(金) 21:57:45プログラミングの本なのにカレーの作り方とか載ってるからね…
0774デフォルトの名無しさん
2010/02/26(金) 23:01:39C++ でも void* との比較はできる。
(void*)0 は C では特別ルールで 0 と同様にヌルポインタ定数として働くが、
C++ にはこの特別ルールは無いというだけ。 void* から他のポインタに
暗黙変換が効くこととは直接関係ない。また、 C で NULL が 0 と定義されて
いてもなんら問題は無い。
0775デフォルトの名無しさん
2010/02/26(金) 23:08:28null pointerの内部表現が0ではない、かつ、intに収まる環境だったとして
char *p = 0;
int int_p = p;
とした場合、
int_p == 0 は偽になり、int_p == (void *)0 は真になるのではないかと思ったがいかがか
0776デフォルトの名無しさん
2010/02/26(金) 23:25:24ポインタ型から整数型に変換した場合の結果について、標準ではほとんど
何も定められていない。定められているのは、 void* から (u)intptr_t に変換して
それをさらに void* に変換した場合は元の値に戻る、ということだけ。
従って2つの比較の結果について標準の範囲で言えることは何も無い。同じく
標準の範囲ではそれらの比較結果にヌルポインタの内部表現は関係ない。
まぁわざわざこれらの変換の際にビットパターンをいじらなければ標準で
定められた動作は達成できるんで、たいていの環境では思ったとおりの結果に
なっちゃうだろうね。
0777デフォルトの名無しさん
2010/02/27(土) 00:00:35intとポインタで内部表現やビット幅が違う場合とかで、
NULLの定義が0だと問題になることがあるんだ。
>>774で言うような特別ルールは無かったと思うよ。
0778デフォルトの名無しさん
2010/02/27(土) 00:06:050779デフォルトの名無しさん
2010/02/27(土) 00:14:02だが
0==NULL
じゃなかったかな
0780デフォルトの名無しさん
2010/02/27(土) 00:16:28> NULLの定義が0だと問題になることがあるんだ。
ねーよ。
> >>774で言うような特別ルールは無かったと思うよ。
あるんだってば。
ISO C 6.3.2.3 p3 より。
> An integer constant expression with the value 0, or such an expression
> cast to type void *, is called a null pointer constant.
C++ には "or such an expression cast to type void *" のような部分が無い。
0781デフォルトの名無しさん
2010/02/27(土) 00:17:36とりあえず黙って C FAQ 読んでくれ。
http://www.kouno.jp/home/c_faq/c5.html
0782デフォルトの名無しさん
2010/02/27(土) 00:31:588086の場合は、特殊だからね。
0783デフォルトの名無しさん
2010/02/27(土) 00:43:420784デフォルトの名無しさん
2010/02/27(土) 00:44:56わざわざ内部表現に依存するようなコードを書かなければ特殊でもなんでもない。
内部表現に依存するようなコードはすべて未定義や実装依存や不定な動作になるんで、
基本的に書くべきではない。
せっかく C 使ってるのにそんな環境ベッタリなコードが必要になることなんてあるの?
0785デフォルトの名無しさん
2010/02/27(土) 00:48:100786デフォルトの名無しさん
2010/02/27(土) 00:51:540787デフォルトの名無しさん
2010/02/27(土) 00:57:03> せっかく C 使ってるのにそんな環境ベッタリなコードが必要になることなんてあるの?
Cで書く時は、環境べったりなコードだらけのことが多いだろ。
0788デフォルトの名無しさん
2010/02/27(土) 00:57:42どんだけ昔の話をしてたんだ?
0789デフォルトの名無しさん
2010/02/27(土) 00:59:29で、どんな時にヌルポインタの内部表現に依存するようなコードが必要になるの?
0790デフォルトの名無しさん
2010/02/27(土) 01:02:4732bitのWindowsなら、8086で書いたプログラムも動くだろ。
0791デフォルトの名無しさん
2010/02/27(土) 01:11:450792デフォルトの名無しさん
2010/02/27(土) 01:12:25メモリのオフセット0にアクセスするとき。
組み込みです・・・
組み込みです・・・・・・
まぁ本題には関係ない気もする。
0793デフォルトの名無しさん
2010/02/27(土) 01:16:15http://www.lsi-j.co.jp/product/c86/
> ■ ANSI標準規格に準拠したコンパイラ
もしかしたら古いバージョンでは規格に準拠していなかったのかもしれないけど。
0794デフォルトの名無しさん
2010/02/27(土) 01:21:45どこまで仕様にそってればANSIと名乗れるんだろうか
0795デフォルトの名無しさん
2010/02/27(土) 01:22:238086だと、ANSI Cに準拠したコンパイラでも、ANSI C準拠のオプションをつけてコンパイルすることはあまりないよ。
0796デフォルトの名無しさん
2010/02/27(土) 05:10:31試食版には「ANSI C準拠のオプション」とかいうやつは見当たらなかったんだけど、
製品版にしか無いものなの?
0797デフォルトの名無しさん
2010/02/27(土) 07:22:26一行目はその通り。
Cで#define NULL 0ではダメな理由は解説済み。
>>764に反論しろ。
>>759は↓このように訂正
------------------------------------------------------
c++では
void *と他のポインタはコンパチではないので代入できない。
関数プロトタイプは省略出来ない。
従って0を使う。
Cでは
void *は他のポインタとコンパチなので代入できる。
関数プロトタイプはオプション
従って(void *)0を使う。
------------------------------------------------------
0798デフォルトの名無しさん
2010/02/27(土) 08:28:558086のCコンパイラはnearとfarが予約語になっている。LSI-Cはあったか定かでないが、Turbo Cにはこういう拡張を使わないオプションがある。8086でそれなりの大きさのプログラムを作るときは、これを使わないというわけにはいかない。
0799デフォルトの名無しさん
2010/02/27(土) 09:00:34それだと、Cでは(void *)0を使うべきって見えてしまう。
CもC++もNULLポインタは 0でいい
特殊な場合にプログラマがポインタであることをキャストで
示さないといけないけど、あくまでそういう場合もあるってだけ
0800デフォルトの名無しさん
2010/02/27(土) 09:12:45> それだと、Cでは(void *)0を使うべきって見えてしまう。
そう言っている。それで不都合は無い。
一方そうしなかった場合の不都合は既に述べた。
0801デフォルトの名無しさん
2010/02/27(土) 10:00:480802デフォルトの名無しさん
2010/02/27(土) 10:06:28#define NULL ((void *)0)
されている。
0803デフォルトの名無しさん
2010/02/27(土) 11:11:59見ると、#define NULL ((void *)0) は「ポインターの内部表現がどんなデータ型
でも同じマシンに限られる」って制限が付いてるから。ポインタの内部表現が
データ型によって異なる環境が存在することを考えると、広義(一般論)としては
((void *)0) より 0の方が適当な気がするが、チガウ?
0804デフォルトの名無しさん
2010/02/27(土) 11:13:110805デフォルトの名無しさん
2010/02/27(土) 13:11:02その方が読みやすくていいやんけ
0806デフォルトの名無しさん
2010/02/27(土) 14:34:060807デフォルトの名無しさん
2010/02/27(土) 14:35:060808デフォルトの名無しさん
2010/02/27(土) 14:43:40「どうでもいい」がC FAQの立場だろ
0809デフォルトの名無しさん
2010/02/27(土) 14:49:05sizeof(void (*)()) != sizeof(void *)
のことは挙がってきていませんね。問題だとはおもうのですけどね。
0810デフォルトの名無しさん
2010/02/27(土) 14:52:58ある型のヌルポインタは別の型にキャストしてもヌルポインタであることが保証されているはず
0811デフォルトの名無しさん
2010/02/27(土) 14:54:41どういう問題がありますかね
0812デフォルトの名無しさん
2010/02/27(土) 14:57:44それが、現実場面で問題になる場面が思い浮かばない。
0813デフォルトの名無しさん
2010/02/27(土) 16:33:36「NULLポインタは 0 でなく (void *)0 にしろ、そうすればキャストが要らなくなる」
って言う人がいるけど、コードとデータでポインタサイズが違う場合は
やっぱりキャストが必要だよね?これ問題じゃね?
程度の差はあれNULLポインタを 0 で書くのとたいして変わらないんじゃね?
ってことですかね
0814デフォルトの名無しさん
2010/02/27(土) 16:47:020815809
2010/02/27(土) 16:50:29実のところ、コンパイラは賢いから普通に書いていて問題になることはないでしょうね。
ちゃんとプロトタイプ宣言して可変長引数に注意しておれば。
0816デフォルトの名無しさん
2010/02/27(土) 16:50:390817デフォルトの名無しさん
2010/02/27(土) 18:11:20(void*)0 でもプロトタイプが無い場合に sizeof(void*) != sizeof(T*) であれば破綻する。
実際に 8086 で関数ポインタを受け取る場合が該当するようだね。(>>809)
つまりプロトタイプが無い場合には 0 でも (void*)0 でもキャストが必要。
正しい対策は C FAQ にあるとおり。
> 「0」や「NULL」を関数の引数に使うときは、呼ばれる側の 関数が想定しているポインター型にキャストしろ。
void* ではなく「呼ばれる側の関数が想定しているポインター型」にキャストしないといけない。
この対策は NULL が 0 でも (void*)0 でも変わりなく、 >>764 は「Cで#define NULL 0が
ダメな理由」とはならない。
0818デフォルトの名無しさん
2010/02/27(土) 20:13:32#define NULL 0
sizeof(int) != sizeof(void *)
の時に必ず破綻する
#define NULL ((void *) 0)
sizeof(int) != sizeof(void *)かつ、sizeof(void *) != sizeof(type *)
になるtype *を引数に持つ関数の時に破綻する。
お前が必死に屁理屈こねても標準インクルードは変わらない。
0819デフォルトの名無しさん
2010/02/27(土) 20:35:09屁理屈でもないし、誰も標準インクルードを変えろなんて言ってない。
C FAQ でずーっと昔に答えの出ているところにいまさら >>797 にあるような迷信を
偉そうに吹いてまわられては迷惑なので正しい情報を提供しているだけのこと。
> #define NULL ((void *) 0)
> sizeof(int) != sizeof(void *)かつ、sizeof(void *) != sizeof(type *)
> になるtype *を引数に持つ関数の時に破綻する。
sizeof(int) == sizeof(void *) でも破綻するよ。
0820デフォルトの名無しさん
2010/02/27(土) 20:44:03関数プロトタイプはオプションといつまでも昔の仕様を言い続けるのもやめてくれ
0821デフォルトの名無しさん
2010/02/27(土) 21:44:15オプションてのがどういう意味なのかイマイチ分かんないけど、
今の規格でもプロトタイプ宣言は有っても良いし、無くても良い。
0822デフォルトの名無しさん
2010/02/27(土) 22:32:52迷信でも何でもない。Cにおいては
#define NULL 0は
#define NULL ((void *)0)
に劣るから((void *)0)が採用されている。
お前は((void *)0)が0より劣る事を示せない。(無いんだから示せるわけが無い)
>>820
昔の仕様じゃなくて現在の仕様でも、オプションなんだが。
文句があるなら標準化機構に提案して、サクッてくれ。w
0823デフォルトの名無しさん
2010/02/27(土) 22:37:05お前らの現在って20世紀なんだな
C99でとっくに違反だ
0824デフォルトの名無しさん
2010/02/27(土) 22:53:13#define NULL 0 が #define NULL ((void *)0) に劣るなんていうのは、
プロトタイプの無い関数の引数や可変長引数にキャスト無しで NULL を
渡せると信じている無学なプログラマにとって、且つ、ポインターの
内部表現がどんなデータ型でも同じマシンに限って、の話でしかない。
だれも((void *)0)が0より劣る事を示そうなどと考えていないし、示す必要も
ないが、こういう誤解を広める元になっているという点で劣っていると言える
かもしれない。
0825デフォルトの名無しさん
2010/02/27(土) 23:02:25C99 で関数の宣言は必須になったかもしれないけど、プロトタイプは必須になってないよ。
0826デフォルトの名無しさん
2010/02/27(土) 23:31:17残念ながらC99でも違反じゃないんだ。出直しといで。
>>824
劣って無いのだから示せるわけが無い。残念だったな。
0827デフォルトの名無しさん
2010/02/27(土) 23:40:48繰り返すが、だれも((void *)0)が0より劣る事を示そうなどと考えていないし、
示す必要もない。従って残念でもなんでもない。
#define NULL 0 でも #define NULL ((void *)0) でも、正しい知識を持ち、
無駄に移植性を失うようなコードを書かないプログラマにとってはどちらも同じ。
どちらが劣るということは無い。
0828デフォルトの名無しさん
2010/02/27(土) 23:57:32無駄。無駄。無駄。無駄。
#define NULL ((void *)0)
これが現実であり、全て。
0829デフォルトの名無しさん
2010/02/28(日) 00:01:27お前の使ってるコンパイラでそれが現実であり全てであることに
ケチをつけるつもりは無いんだけど、他のコンパイラでも同じであるかの
ような根拠の無い主張を繰り返すのはやめてくれ。
初心者が見て「じゃあ可変長引数に渡すときのキャストは要らないんだ」
なんて思われては困る。
0830デフォルトの名無しさん
2010/02/28(日) 00:07:23お前も((void *)0)が0に勝ってる点を言えてないが。
代表的なのCでそうなってるからそっちの方が優れているに違いない、
という論旨?
0831デフォルトの名無しさん
2010/02/28(日) 00:07:27ANSI以前の昔はあったらしいけど、>>828 はどういう環境なんだろう
今手元にはcygwinしかないけど、#define NULL 0 になってるし、
Solarisも同様だったはず
0832デフォルトの名無しさん
2010/02/28(日) 00:09:02# if defined(__cplusplus) || defined(_Windows)
# define NULL 0
# else
# define NULL ((void *)0)
# endif
#endif
0833デフォルトの名無しさん
2010/02/28(日) 00:17:07Cygwin なら GCC だよね?ずっと前から __null になってるはずだけど?
http://gcc.gnu.org/viewcvs/trunk/gcc/ginclude/stddef.h?view=markup#l392
0834デフォルトの名無しさん
2010/02/28(日) 00:17:180835デフォルトの名無しさん
2010/02/28(日) 00:23:28C では (void*)0 のほうが好ましいのは確かで、整数 0 を意図している箇所と
区別できることにより >>732-734 のようなコードに対して簡単に警告を出すことが
できる。
先日からがんばってる人が言っているような、型が不明な引数に正しいキャスト
無しでも渡すことができるようにするため、などという理由では無い。
0836デフォルトの名無しさん
2010/02/28(日) 00:26:28(( ( )
♪ / ) )) なーんだ♪なーんだ♪なーんだ♪
(( ( ( 〈
(_)^ヽ__)
♪ ∧_∧
(´・ω・`) ))
(( ( つ ヽ、 NULL♪NULL♪NULL♪
〉 とノ )))
(__ノ^(_)
0837デフォルトの名無しさん
2010/02/28(日) 00:38:15Windows Cプログラミングだと (void*)0 でなくて 0 なのは何で?
0838デフォルトの名無しさん
2010/02/28(日) 01:36:540839デフォルトの名無しさん
2010/02/28(日) 01:46:330840デフォルトの名無しさん
2010/02/28(日) 01:47:40とっくに言っている。優れているから採用されている。
>>835
他の理由があっても否定する理由にはならない。
0841デフォルトの名無しさん
2010/02/28(日) 01:57:10まず1点だけ確認させてください。
NULL を ((void*)0) と定義したところで、可変長引数やプロトタイプの無い関数の
引数にキャスト無しで渡した場合に問題が発生する可能性は無くなりませんよね?
0842デフォルトの名無しさん
2010/02/28(日) 02:01:19問題が発生する場合には、0でも発生する。
0843デフォルトの名無しさん
2010/02/28(日) 02:04:06キャストが必要ならキャストすればいいじゃん
0844デフォルトの名無しさん
2010/02/28(日) 02:10:00「問題が発生しなくなる場合もある」ということですが、可変長引数やプロトタイプの無い
関数の引数にキャスト無しの NULL を渡しても良い場合、というのがあるのでしょうか?
あるとすれば、それはどんなときですか?
0845デフォルトの名無しさん
2010/02/28(日) 02:15:59条件はこのスレで出ている。お前の負け。
0846デフォルトの名無しさん
2010/02/28(日) 02:18:360847デフォルトの名無しさん
2010/02/28(日) 02:22:58/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ お前の負け。
| |r┬-| |
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / // だっておwwwwwwwwwwwwwwwwwww
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / / バ
| | l||l 从人 l||l l||l 从人 l||l バ ン
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
0848デフォルトの名無しさん
2010/02/28(日) 02:25:57答えられないのに偉そうに
規格書のセクション書いてくれ(キリッ
0849デフォルトの名無しさん
2010/02/28(日) 04:08:220850デフォルトの名無しさん
2010/02/28(日) 07:47:45バカには見えないようだ。
0851デフォルトの名無しさん
2010/02/28(日) 09:15:000852デフォルトの名無しさん
2010/02/28(日) 09:16:27ポインタが無いとダメな例を。
0853デフォルトの名無しさん
2010/02/28(日) 09:29:470854デフォルトの名無しさん
2010/02/28(日) 10:51:410855デフォルトの名無しさん
2010/02/28(日) 13:32:23組み込みとかデバドラとかソケット通信とか
0856デフォルトの名無しさん
2010/02/28(日) 16:04:04main()
{
printf("Hello, C world!\n");
}
0857デフォルトの名無しさん
2010/02/28(日) 21:21:29データ構造を考えなくてはならないところでは、ポインタは必須ですね。
単純な線形リストにしても、ポインタなしでは考えられません。
>>853 のいうとおり、ポインタの必要ない言語はいくらでもありますので、それをお勧めします。
0858デフォルトの名無しさん
2010/02/28(日) 21:25:38タイトルだけで中身見てないからどんなこと書いてるのか知らんけど。
0859デフォルトの名無しさん
2010/02/28(日) 23:51:120860デフォルトの名無しさん
2010/02/28(日) 23:58:31ポインタを使うよりかえって難しくなるだけだぞ
なんでそうまでしてポインタを避ける必要があるのか考えてみなって
結論より考えること自体が大事なことだ
0861デフォルトの名無しさん
2010/03/01(月) 00:01:190862デフォルトの名無しさん
2010/03/01(月) 00:10:53添字をチェックする配列ならアプリが落ちるだけで済む。
0863デフォルトの名無しさん
2010/03/01(月) 00:13:07どういう意味?
0864デフォルトの名無しさん
2010/03/01(月) 00:13:56ちょっとスレ違いだが BASIC の配列はポインタを知らなくても一応使うには使えるね
0865デフォルトの名無しさん
2010/03/01(月) 00:19:220866デフォルトの名無しさん
2010/03/01(月) 00:38:330867デフォルトの名無しさん
2010/03/01(月) 00:49:17他の言語では、たいてい配列の添字のチェックが入るので、実行時エラーですむ。
0868デフォルトの名無しさん
2010/03/01(月) 01:30:12なんでこんな言語が未だに学校で支持されてるんだろうな
0869デフォルトの名無しさん
2010/03/01(月) 01:31:340870デフォルトの名無しさん
2010/03/01(月) 02:02:290871デフォルトの名無しさん
2010/03/01(月) 02:13:31メモリが無理なとき
馬鹿でかいサイズでもそのデータのポインタなら受け渡せる
0872デフォルトの名無しさん
2010/03/01(月) 02:28:26最近はC/C++も人気なくなってマシになったが、15年くらい前なんて
ポインタ○△×なんて本がC言語セクションにずらららららーーーっと並んでた。
0873デフォルトの名無しさん
2010/03/01(月) 07:55:16char *endOfString;
endOfString = string + strlen(string);
}
と書いてgcc -Wall -ansiでコンパイルしたら
warning: assignment discards qualifiers from pointer target type
という警告が来た
char *型とconst char *型って直接演算できなかったっけ?
0874デフォルトの名無しさん
2010/03/01(月) 08:45:16逆の代入は可能、同じconst char*ならいいのでendOfStringをconst char* にするべきか。
0875デフォルトの名無しさん
2010/03/01(月) 08:58:44endOdString = (char *)filename + strlen(filename);
ならおkだよね
でもなぜ
> const char*なポインタをchar*なポインタには代入できない
0876デフォルトの名無しさん
2010/03/01(月) 09:24:190877874
2010/03/01(月) 09:47:280878デフォルトの名無しさん
2010/03/01(月) 12:25:24const char *filenameはfilenameの指す先を変更できないけど、filename自体の値は書き換えられるから
0879デフォルトの名無しさん
2010/03/01(月) 22:22:50最初にポインタなし言語を覚えた人=ポインタ怖い・めんどくさい
0880デフォルトの名無しさん
2010/03/01(月) 22:28:470881鬼神の名無し
2010/03/02(火) 20:58:060882デフォルトの名無しさん
2010/03/02(火) 22:28:37宿題スレで突っ込まれながらコードを書くのが吉。
0883デフォルトの名無しさん
2010/03/02(火) 22:29:29http://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E
0884デフォルトの名無しさん
2010/03/03(水) 01:52:30言語Cって言わないと、「そんなものは無い!」とかいってキチガイが飛んでくるぞwwww
0885デフォルトの名無しさん
2010/03/03(水) 03:08:44とりあえず最新のC++/CLIでもいじってみ
0886デフォルトの名無しさん
2010/03/03(水) 03:12:50その微妙な釣りはやめて
0887デフォルトの名無しさん
2010/03/03(水) 08:17:34インストールと設定だけで大変そうなんだが
0888デフォルトの名無しさん
2010/03/03(水) 08:21:32C言語にしようと思うんだが、JAVAも面白そうだし
0889デフォルトの名無しさん
2010/03/03(水) 09:21:12それが一番楽かもよ
個人的にはCが一番やりがいがあるとは思うけど
0890デフォルトの名無しさん
2010/03/03(水) 09:28:38ポインタにはまらなければ。
0891デフォルトの名無しさん
2010/03/03(水) 13:16:37単に資格取りたいなら889が言う様に表計算でもJAVAでもいいんじゃね
0892デフォルトの名無しさん
2010/03/03(水) 13:54:16土方を目指すならJava
0893デフォルトの名無しさん
2010/03/03(水) 14:05:49取得しているものなのでしょうか。
0894デフォルトの名無しさん
2010/03/03(水) 14:45:50根っこがPerlとかだともっとつらい 人によってはPerlに閉じこもっちゃうくらい
根っこ作りをCでやっておくと、かなり自由に枝を伸ばせると思う
C++やJAVAの機能でも「ああ、こうやって実現してるんだろうな」、とか「こう使うと便利だろうな」
とかってメカニズムに対する勘が働くし
>スタンダードな資格は取得しているもの
資格が給料に意味を持つ会社と、まったく気にしない会社があるよ
資格持ってるやつを馬鹿にする社風のところもある(意外と技術力高いところに多い)
どっちにしろ資格で仕事のできるできないは判断できないから、あくまで重要なのは本人の能力
クライアントが資格持ってるSEを入れろというなら資格持ってる新入社員を契約書上のリーダーにするなんて事もある
実際は何もできなくても
0895デフォルトの名無しさん
2010/03/03(水) 14:52:120896デフォルトの名無しさん
2010/03/03(水) 14:59:53英語力がどーたら、TOEICが…とか言っているのはSE(システムエンジニア)だし。
0897デフォルトの名無しさん
2010/03/03(水) 15:06:000898デフォルトの名無しさん
2010/03/03(水) 15:12:50いくらTOIECの点高くても、コミュ能力の低いプログラマ(結構多い)はやっぱ英語でも口下手だったりするよな
相手が女だったりするとさらに酷くなってみたりして
なんでお前となりの席のアメリカ人とメッセンジャーでやり取りなんだよwwみたいなやついたもの
0899デフォルトの名無しさん
2010/03/03(水) 15:31:01プログラミング技術はあっても何を作る、何をするってアイデアが無いのと同じ
0900デフォルトの名無しさん
2010/03/03(水) 15:33:03英語の記事や本読めるだけで良い場合、いつまでたっても関係ない
0901デフォルトの名無しさん
2010/03/03(水) 16:03:37同じプログラマや技術者に対するコミュ能力は高いんだがな。
誰だって、自分の属する文化内ではコミュ能力は高いのさ。
そして、異文化交流が下手なのはプログラマだけではあるまい。
0902デフォルトの名無しさん
2010/03/03(水) 16:08:22誰とも口きかないし、しゃべても何いってるかわからん
女と話すときょどるやつの率は、他業種に比べて格段に多いと思う
0903デフォルトの名無しさん
2010/03/03(水) 16:09:430904デフォルトの名無しさん
2010/03/03(水) 16:12:240905デフォルトの名無しさん
2010/03/03(水) 16:15:200906デフォルトの名無しさん
2010/03/03(水) 16:16:470907デフォルトの名無しさん
2010/03/03(水) 16:17:480908デフォルトの名無しさん
2010/03/03(水) 16:23:160909デフォルトの名無しさん
2010/03/03(水) 16:26:12すれ汚しだけど
いまだに銀縁の四角いめがねで、壁紙がおにゃんこクラブの名前知らないやつで
飲み会で会話に混じらずいつも80年代のアイドルとかゲームの曲を聞いてるwwww
ナウシカとか魔女の宅配便の悪口を言うと「あわっ!、わわっ!」って感じで激怒する
キーボードはキートップに何も書いていないHHK使っていて
ふざけて同僚が「あいうえお」とか「自爆スイッチ」とか「押すと死ぬよ」とか「ウンコでるよスイッチ」とか書いたら
1ヶ月会社来なくなって、上司にえれーおこられた(先輩は同僚の20倍は仕事はできるので)
どういう仕組みかよくわからんけど
手首をポンとやるとナイフが飛び出すやつを会社の女の子にみつかってから女子は誰もそいつと口きかなくなった
0910デフォルトの名無しさん
2010/03/03(水) 16:28:500911デフォルトの名無しさん
2010/03/03(水) 16:30:430912デフォルトの名無しさん
2010/03/03(水) 16:32:33本当はもっともっとエピソードあるんだけど
もちろん彼が極端な例だということも、そもそもスレ違いだということもわかってるよ
でもつい
0913デフォルトの名無しさん
2010/03/03(水) 16:33:21話したくも無い気持ちはよく分かる
0914デフォルトの名無しさん
2010/03/03(水) 16:33:21小学生かよw
0915デフォルトの名無しさん
2010/03/03(水) 16:34:29どこの幼稚園?その会社の商品を使いたくないんだけど
内情を2chにも書き込んじゃうくらいだから情弱集団なんだろう
0916デフォルトの名無しさん
2010/03/03(水) 16:39:580917デフォルトの名無しさん
2010/03/03(水) 16:40:550918デフォルトの名無しさん
2010/03/03(水) 16:43:18単に笑ってもらえるかと思ったのに
>会社の商品を使いたくないんだけど
残念だったね、インフラにかかわる仕事なんで離島で自給自足でもない限り、ほぼ確実に君は使ってるよ
>内情を2chにも書き込んじゃうくらいだから情弱集団なんだろう
内情ってほどのことはないだろ、でもいつも明るい笑いが絶えない職場だよ(^^)v
>プログラマ同士なら、ソースを通して理解し合えるはず
もちろんプログラマとしての彼の技術は尊敬に値する。まったくかなわない
0919デフォルトの名無しさん
2010/03/03(水) 16:45:14>同僚が「あいうえお」とか「自爆スイッチ」とか「押すと死ぬよ」とか「ウンコでるよスイッチ」とか書いたら
こんな奴らと気持ち悪く笑いながらやってんだろうな。笑われるのはお前の方だろ
0920デフォルトの名無しさん
2010/03/03(水) 16:45:240921デフォルトの名無しさん
2010/03/03(水) 16:46:010922デフォルトの名無しさん
2010/03/03(水) 16:47:292chでは
残念ながらお前は絶対使ってるって返すのがデフォなの?w
0923デフォルトの名無しさん
2010/03/03(水) 16:49:54すごい入れ食い
0924デフォルトの名無しさん
2010/03/03(水) 16:51:46おれそんな悪い事したかぁ?
ここは、「ああ、そういうおかしいやつうちにもいるよ」って流れかと確信してたのに(/o;)
ははーん、さてはみんなの心の中にも小さい先輩がいるんだなぁ
0925デフォルトの名無しさん
2010/03/03(水) 16:55:460926デフォルトの名無しさん
2010/03/03(水) 16:59:46あなたの職場には最低でも二人以上の人もどきがいて
当人は自分のことを大人だと思っていることはよく分かった
0927デフォルトの名無しさん
2010/03/03(水) 17:23:31>小さい先輩
種島ぽぷらか。
0928デフォルトの名無しさん
2010/03/03(水) 19:05:27putcharって int putchar(int c)ですが引数にchar型変数を入れて
char ch = 'a';
putchar(ch);
こういうのはダメなんでしょうか。Visal C++ではエラーも何も出ないんですが・・・
0929デフォルトの名無しさん
2010/03/03(水) 19:13:56charからintへの型上げ(汎整数拡張)が行われているから
C++だと関数のオーバーロードのためにエラーになるようになっている
0930デフォルトの名無しさん
2010/03/03(水) 19:14:590931デフォルトの名無しさん
2010/03/03(水) 19:15:09あ、ちなみにそれ環境依存動作だから注意な
charがsigned charの環境だと0x80〜0xffはマイナスの値になっちまうので
出力がおかしくなる事がある
0x00〜0x7fのみ保証されている
0932デフォルトの名無しさん
2010/03/03(水) 19:21:050934デフォルトの名無しさん
2010/03/03(水) 20:07:08つまり、
char ch = 'a';
printf("%c", ch);
も環境依存ってことになりますか?
0935デフォルトの名無しさん
2010/03/03(水) 20:59:10これってstdioがバッファリングされている、という前提だと思うんだけど
もしバッファリングされていなければ、標準入力には戻せないよね?
0936デフォルトの名無しさん
2010/03/03(水) 21:03:120937デフォルトの名無しさん
2010/03/04(木) 00:24:44先輩に同情がどうとかじゃなくてお前とお前の同僚の頭の悪さに驚いている
0938デフォルトの名無しさん
2010/03/04(木) 07:50:33どうせ先輩のエピソードリストのうちのどれか(もしくは複数)がお前に一致したんだろ?
はいはい、おまえらの心の柔かい所を私は傷つけてしまいました、ごめんなさい
反省してま〜〜す。
0939デフォルトの名無しさん
2010/03/04(木) 07:56:170940デフォルトの名無しさん
2010/03/04(木) 10:13:55反省してまーす
0941デフォルトの名無しさん
2010/03/04(木) 10:17:36どんだけ流行に遅れてんだよw
0942デフォルトの名無しさん
2010/03/04(木) 10:17:45'a'は0x80未満だから何の問題も出ない。
まあいずれ符号拡張というのを経験するだろう
0943デフォルトの名無しさん
2010/03/04(木) 14:40:17特定の値のみソートの対象にしない
(特定値はずっと同じ配列要素数の所に置いておきたい
にはどうしたらいいですか?
0944デフォルトの名無しさん
2010/03/04(木) 14:47:150945デフォルトの名無しさん
2010/03/04(木) 15:06:54ちっうっせーな
0946938
2010/03/04(木) 15:09:40何が面白くて焚付けてんの?おまえ バカ?
0947デフォルトの名無しさん
2010/03/04(木) 15:11:07何が面白くて焚付けてんの?おまえ バカ?
0948デフォルトの名無しさん
2010/03/04(木) 15:15:380949デフォルトの名無しさん
2010/03/04(木) 15:17:320950デフォルトの名無しさん
2010/03/04(木) 21:05:180951デフォルトの名無しさん
2010/03/04(木) 22:36:260952デフォルトの名無しさん
2010/03/05(金) 00:25:18ちょいちょい判定する
か、特定の値の要素番号を別で保持、特定の値を抜いた状態でソートして後から戻す
0953デフォルトの名無しさん
2010/03/05(金) 02:01:12#include<stdio.h>
#include<stdlib.h>
#define DATA_NUM_MAX 100
#define SPECIAL_VALUE 99 // 特定の値
#define SWAP(type, a, b) {type c;c=a;a=b;b=c;}
void display(int data[], int data_num){
int i;
for(i=0;i<data_num;i++) printf(" %3d", data[i]);
printf("\n");
}
void sort(int data[], int data_num){
int i, j, k;
for(i=0;i<data_num;i++){
for(j=0;j+1<data_num-i;j++){
if(data[j]==SPECIAL_VALUE) continue;
for(k=j+1;k<data_num-i;k++) if(data[k]!=SPECIAL_VALUE) break;
if(k>=data_num-i) break;
if(data[j]<data[k]) SWAP(int, data[j], data[k]);
}
}
}
int main(void){
int data[DATA_NUM_MAX], data_num=DATA_NUM_MAX, i;
for(i=0;i<data_num;i++) data[i]=rand()%101;
display(data, data_num);
sort(data, data_num);
display(data, data_num);
return 0;
}
0954デフォルトの名無しさん
2010/03/05(金) 18:27:24説明してください汗汗
0955デフォルトの名無しさん
2010/03/05(金) 19:03:18にもかかわらず、WindowsMediaPlayerで音楽を再生しながら起動すると60fps
これの原因わかる方いらっしゃいますか?(汗
ソース晒そうにもさらす部分もわからないorz
0956デフォルトの名無しさん
2010/03/05(金) 19:16:09WMPを起動するとタイマーの分解能が上がる。
0957デフォルトの名無しさん
2010/03/05(金) 19:18:490958デフォルトの名無しさん
2010/03/05(金) 19:19:010959955
2010/03/05(金) 19:30:12これで先へ進める!
0960デフォルトの名無しさん
2010/03/05(金) 19:35:10言い方のちがいではない。
0961デフォルトの名無しさん
2010/03/05(金) 19:36:37必然性の度合いは違うけど
0962デフォルトの名無しさん
2010/03/05(金) 19:49:36言語によって関数とかメソッドとか手続きとかが何を意味するかは微妙に違ってる
C言語においては関数とメソッドはイコールと思っていいんじゃないかな
C++ではメソッドはクラスのメンバ関数を指してる
パスカルだとちがうんでなかったっけ だからオブジェクト指向言語での言い方の違いではないと思う
0963デフォルトの名無しさん
2010/03/05(金) 20:20:21ありがとう。
0964デフォルトの名無しさん
2010/03/05(金) 20:31:35COMでメソッドって使うけど、これは言語から離れてる。
0965デフォルトの名無しさん
2010/03/05(金) 20:56:240966デフォルトの名無しさん
2010/03/05(金) 21:21:38メンバ関数っていうんじゃなかった、公式には?
0967デフォルトの名無しさん
2010/03/05(金) 21:37:110968デフォルトの名無しさん
2010/03/05(金) 21:54:16int main(void)
{
int i;
int* p;
p = &i;
free(p);
return 0;
}
用済みになった変数はfreeで返すべき、というのが私の見解です。
0969デフォルトの名無しさん
2010/03/05(金) 21:55:48他所様のものを勝手に弄っちゃダメでしょ
まったく躾がなってないね
親の顔が見てみたいもんだ
0970デフォルトの名無しさん
2010/03/05(金) 22:10:02malloc() で確保したわけでもないのに free() するのですか?ヒープが壊れやしませんか
0971デフォルトの名無しさん
2010/03/05(金) 22:16:25free()の定義を見ずにそれを言うのはどうかと
>968の言っているfree()は>970の考えているmalloc()と対にして呼ぶような関数では無いのかもしれないよ
僕は>968のようなことを考える人もいるんだなぁ(こいつ分かってないかも)、と思っただけ
0972968
2010/03/05(金) 22:17:39#include <stdio.h>
int main(void)
{
{int i;
int* p;
p = &i;
}
return 0;
}
こうすればいいのか
0973デフォルトの名無しさん
2010/03/05(金) 22:32:35K&R2 には malloc() の返り値でなければならない、と書いてあります。
malloc() の実装によっては、malloc() の返り値以外を free() に与えると、どうなってもしらないよ状態でしょう。
0974デフォルトの名無しさん
2010/03/05(金) 22:37:57僕が想像したfree()
free(void *q) { (void)q; /* something */ return 0; }
0975デフォルトの名無しさん
2010/03/05(金) 22:40:58pを解放し忘れてるぞ。
0976デフォルトの名無しさん
2010/03/05(金) 22:53:17void free(void *p) なんですけどね。返り値はない。
0977デフォルトの名無しさん
2010/03/05(金) 22:54:420978デフォルトの名無しさん
2010/03/05(金) 23:02:22>974は>968に合うように作ったfree()の一例ね
なぜ、>974が>968のfree()の一例になるのかは>971を読んでね
0979デフォルトの名無しさん
2010/03/05(金) 23:02:530980デフォルトの名無しさん
2010/03/05(金) 23:04:51だから、malloc() / free() はついになっていなければならないし、free() は返り値を持たないと、K&R2 に書いてあるのですが。
K&R2 をご存知ないのですか?
0981デフォルトの名無しさん
2010/03/05(金) 23:04:59return (a);
関数の返り値でこの二種類の違いについて教えてください
お願いします
0982デフォルトの名無しさん
2010/03/05(金) 23:06:170983デフォルトの名無しさん
2010/03/05(金) 23:06:31そして >>975 のいうとおり、自動変数をfree() するならするで徹底してfree() できていないという矛盾。
0984デフォルトの名無しさん
2010/03/05(金) 23:07:37まぬけかそうでないかの違い
0985デフォルトの名無しさん
2010/03/05(金) 23:10:43実行時にわかるのでしょうか。autoだけに。
0986デフォルトの名無しさん
2010/03/05(金) 23:14:390987デフォルトの名無しさん
2010/03/05(金) 23:17:26ソースみりゃわかるじゃん。
0988デフォルトの名無しさん
2010/03/05(金) 23:18:41実行時にわかるよ。てかコードに書いてある筈
君もやってみれば?
0989デフォルトの名無しさん
2010/03/05(金) 23:19:40関数の呼び出し時では引数の個数だけ push すればいいし、関数内の自動変数の種類と個数はコンパイル時に数えることができるでしょう。
0990デフォルトの名無しさん
2010/03/05(金) 23:20:04コードに書いてあるというのは、テキスト領域に書いてあるということですか。
0991デフォルトの名無しさん
2010/03/05(金) 23:20:06K&Rが全てだと思っている痛い子とはもう話したくない
free()がvoid free(void *)だと思っているし、もう笑うしかないわ
0992デフォルトの名無しさん
2010/03/05(金) 23:20:55どっちでも動作は一緒です。
0993デフォルトの名無しさん
2010/03/05(金) 23:22:08すみませんが典拠をお願いいたします。free() は void free(void *) しかないと思うのですが?
0994デフォルトの名無しさん
2010/03/05(金) 23:22:14そのあたりはコンパイラに依存。
コードに即値として埋め込まれてる場合もあるし
初期データ領域から引っ張ってきて更にちょこちょこ
計算して出せやという命令に
なってる場合もあるし...
0995デフォルトの名無しさん
2010/03/05(金) 23:22:270996デフォルトの名無しさん
2010/03/05(金) 23:22:48ソースに書いてある。
0997デフォルトの名無しさん
2010/03/05(金) 23:23:09釣り馬鹿は失せろ
0998デフォルトの名無しさん
2010/03/05(金) 23:24:030999981
2010/03/05(金) 23:24:561000デフォルトの名無しさん
2010/03/05(金) 23:25:0010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。