947の勘違いは
配列とポインタの違いの理解不足
>>951 より
char配列初期化の省略形に対する理解不足
>>950 が原因と見た。
まあ、配列とポインタがわかってない可能性も大だが。
おまいら親切だな
>>950 ‐951
すいませんでした
どうもありがとうございます
>>952 いえ、950の話はわかっていたのですが
951のようなことは知りませんでした
>まあ、配列とポインタがわかってない可能性も大だが。
char d[10];//あるいはd[]="abcd";
char* x=d;
という具合に初期化できることと
char* x="abc";
と書けることが、混乱したのかもしれません
char* x="abc";と書くことによって同じように操作(r、w)出来ると思ってました
でも、ポインタがわかっているのなら
書き込めてもよさそうなものだと思っていました
>>945 「文字列定数」という言葉が指し示すとおり、文字列定数は"変数"ではなく"定数"である。
>>945 が疑問に思っているのは、どうせ同じ "メモリ" に記憶されているのだから、
書き換えさせてくれたっていいじゃん、ということだろう。
これに対する回答はいろいろあるだろうが、一番理解しやすい理由としては、
Cの規格は、定数を "RAM" ではなく "ROM" に書き込む処理系も
考慮しているから、という回答だけで十分だろう。
例)ROM への書き込み->NG
strcpy(c1,c2);//←これはダメ.実行時エラー
例)ROM からの読み込み->OK
printf("%s",c1);
//↑これもエラーになってもいいような気がするんですが・・・
>>956 簡単なことを偉そうな口調で説明するなよ、ヴォケ
>>956 丁寧な回答ありがとうございます
その他の人も
読み込みOKで書き込みNGっていうことがあるのは今回はじめて知りました
まさに
>どうせ同じ "メモリ" に記憶されているのだから、
書き換えさせてくれたっていいじゃん、ということだろう。
こういうことを当然のように思っていました。
何のためのポインツなのかと疑問に思っていました
>>956 ANSI/ISO C に「文字列定数」などという言葉は出てこないわけだが。
リテラルと定数は違うってことだろ
963 :
デフォルトの名無しさん :03/10/19 13:27
配列の配列をmallocするにはどうすればいいですか? char* c=(char*)malloc(sizeof(char)*10); char** cc=(char*)malloc(sizeof(c)*15); こういう感じでいいですかね?
>>963 モレいつもこうやってる。
int i, result = FAILURE;
char **cc = (char **)malloc(sizeof(char *) * 10);
if (!cc) goto finally__;
for (i=0; i<10; ++i) {
cc[i] = (char *)malloc(15);
if (!cc[i]) goto finally__;
}
/*
* cc[0][0] 〜 cc[9][14] まで使用可能
*/
result = SUCCESS;
finally__:
if (cc) for (i=0; i<10; ++i) free(cc[i]);
free(cc);
return result;
}
>962 俺はむしろ 「C言語+文字列定数」の検索結果が 「C言語+文字列リテラル」の検索結果と比べて わずか100件しか多くないことに驚いたよ。 「定数」と「リテラル」の一般的な使用頻度をかんがえるとね。
なんかさ、くどいね
>1を読め、で終わりそうな話題が多いでつね
>>968 まじ? 途中でメモリ割り当てに失敗しても,きちんと解h
あ!
ゼロクリアしてないとまずいね…
会社のソース,明日早速修正しなきゃ…
> 会社のソース (((ガクガクブルブル)))
どうか、我々が
>>694 の会社の製品を使っていませんように…
>>973 大丈夫 (;´Д`) 2年も "プロのプログラマ" やってて,
まともなプログラミングの仕事はこれがはじめてだから
>>964 次からは malloc の呼び出しは1回だけで済ませるようなコードに修正しておけ。
メモリの分断も防げるし、エラー処理も簡単になるし、実行速度も上がる。
979 :
デフォルトの名無しさん :03/10/19 14:51
Cで3次元配列のメモリを確保するにはどうしたらいいですか?
そうですかそうですか。
>>964 このプログラムって
#define NULL 0
が前提で作っているんだよね?
#define NULL ((void *) 0)
な処理系で動くのかな?
>>979 まず、あなたの2次元配列を確保するソースコードを見せてください。
>>981 >このプログラムって
>#define NULL 0
>が前提で作っているんだよね?
何を勘違いされているのでしょうか?
>>984 もうこのネタ面倒くさいだけだから刺激しないでくらはい
>982 matrix=(double**)malloc(sizeof(double*)*x); for(i=0;i<=x;i++){ matrix[i]=(double*)malloc(sizeof(double)*y); }
>>977 以下の観察事項より、
>>969 と
>>976 は同一人物だと推測されます。
1.文字と記号の間にスペース文字を入れている
2.読点に「,」を使用している
3.句点を使用していない
4.およそ60文字以内で改行を行っている
>>986 matrix = (double**)malloc( sizeof(double) * x * y * z + sizeof(double*) * x * y + sizeof(double**) * x );
あとは中身を微調整
>989 あり!
>>979 あなたの思想でいくとこんな感じになるのかなぁ。
エラーチェックは追加してね
double ***array3, **array2, *array1;
int counter1, counter2;
array3=(double***)malloc(sizeof(double**)*w);
for (i=0;i<w;++i)
array2=(double**)malloc(sizeof(double*)*x);
for (i=0;i<x;++i)
array1=(double*)malloc(sizeof(double)*y);
/*return(array1);*/
>>987 5.三点リーダー × 1 を使う
6.数字は半角
これを追加な
ちなみにこれは漏れの筆跡とも一致するわけだが…
キャスト間違った (double***) な
利点はメモリ確保と解放が1度で済むこと 欠点は一見わかりにくいこと,アクセス違反しても検出されにくいこと
次スレはどこ?
>991,994 あり
last1
うんこ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。