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

このエントリーをはてなブックマークに追加
734デフォルトの名無しさん:04/11/26 01:04:21
>やってみても別に問題は無いみたいですけど。

それがあんたの判断基準か (プ
735デフォルトの名無しさん:04/11/26 01:30:55
>>660のソースについてなんですが
          char *s;
          s = argv[1];
は何をしているのでしょうか?
これでsにはargv[1]のポインタが入るの?
でも その場合なんで &argv[1]ってしなくていいんですか?
736デフォルトの名無しさん:04/11/26 01:39:10
にゅー くれらっぷー
737デフォルトの名無しさん:04/11/26 01:43:20
たとえばの話

アドレス(もしくは変数名)  値(もしくは文字列)
0xbfffaa00 (argv)        0xbfffaa08
0xbfffaa04           0xbfffaa28
0xbfffaa08           (argv[0]の内容)
0xbfffaa28           (argv[1]の内容)
s                0xbfffaa28
738735:04/11/26 01:50:12
>>737
私に言ってくれているのでしょうか??
すいませんがよくわかりません
説明していただけるとありがたいです
739737:04/11/26 01:56:07
この例だと、argv[1]の値は0xbfffaa28で、その値が
設定されているメモリのアドレスは0xbfffaa04。
その値の0xbfffaa28のアドレスには文字列が設定されている。
これがargv[1]が指している文字列。
だから、sに代入すべきなのは、argv[1]の値の0xbfffaa28
であって、&argv[1]はargv[1]のアドレスだから、0xbfffaa04に
なってしまう。ここには文字列などないので、これをsに
代入するとぐちゃぐちゃになります。ていうかコンパイル
エラーになる。
740735:04/11/26 02:01:39
>>739
ありがとうございます
頭がごちゃごちゃになってきました・・
すいませんが 今は寝て起きてから考えて見ようと思います
すいません ありがとうございました
741デフォルトの名無しさん:04/11/26 03:43:57
> 開放しなかったらどうなるんですか?

ぜったいしちゃだめ > 開放



(解放ならしてもいいが)
742デフォルトの名無しさん:04/11/26 05:02:44
うちのサーバは一般開放
743デフォルトの名無しさん:04/11/26 06:22:40
ど素人ですが、C言語でなにができるんですか?
744デフォルトの名無しさん:04/11/26 06:34:58
Rubyのインタープリタを書くこと。
745デフォルトの名無しさん:04/11/26 07:36:02
>>735
> char *s;
> s = argv[1];
>は何をしているのでしょうか?
>これでsにはargv[1]のポインタが入るの?
>でも その場合なんで &argv[1]ってしなくていいんですか?

sにはargv[1]が入る。決してargv[1]のポインタが入る訳ではない。
&argv[1]ってするとargv[1]のポインタが入ってしまうだろ?それに、そうしたくても char **s にしとかないと型不整合エラー。
746デフォルトの名無しさん:04/11/26 07:39:26
>>743
C++コンパイラの作成やJavaコンパイラの作成が出来る
747デフォルトの名無しさん:04/11/26 09:26:32
>>743
たぶん君の彼女をつくることは出来ない
748デフォルトの名無しさん:04/11/26 09:36:59
perlではコマンドの結果を
@list=`ls`
とやって受け取ることが出来ますが、Cではどうやったら出来ますか?
749デフォルトの名無しさん:04/11/26 09:39:16
fork と socket を使う
750デフォルトの名無しさん:04/11/26 09:57:23
>>748
一応ここは環境依存排除なので標準ではできないというのが答。
存在するなら、popen()を使うのがawk的でいいかと。
751748:04/11/26 11:07:52
>>749>>750
わかりました。UNIXプログミングについて勉強してみます。
ありがとうございます。
752 ◆ogaWFi0wUo :04/11/26 12:13:35
プログラム書いてると 頭痛くなるのは仕様ですか?
753デフォルトの名無しさん:04/11/26 13:39:39
>>752
あなたの脳みその仕様です
754デフォルトの名無しさん:04/11/26 14:49:01
>>752
PC から放射される電磁波が原因です。
プログラムはチラシの裏に書きましょう。
755デフォルトの名無しさん:04/11/26 15:23:18
C言語で彼女の作り方を教えてください。
756デフォルトの名無しさん:04/11/26 15:29:55
lover* make_lover() { return NULL; }
757デフォルトの名無しさん:04/11/26 16:31:33
if((kanojo=make_lover())==NULL){
fprintf(stderr, "彼女の作成に失敗しました。\n");
exit(99);
}
758デフォルトの名無しさん:04/11/26 19:25:06
>>756
make love する者
759デフォルトの名無しさん:04/11/26 23:27:51
>>758
意味変わっちゃってるね。
760 :04/11/27 14:55:19
初歩的な質問だと思いますが。
文字列の2進数と16進数のを表示するプログラム

void strdump(const char *s)

{

while(1){

int i;

printf("%c %x ",*s,(CHAR_BIT+3)/4,*s);

for(i = CHAR_BIT - 1 ; i>=0; i--)

putchar(((*s>>i) & 1U) ? '1' : '0');



putchar('\n');

if(*s++ == '\0')
break;

}
}
最初のprintf文の引数の  (CHAR_BIT + 3 )/4 , *s
とputcharの  putchar(((*s>>i) & 1U) ? '1' : '0');


が理解できないです。
出来たらどなたかご教授くだされ。
761sage:04/11/27 15:09:12
初歩的な質問だと思いますが。
文字列の2進数と16進数のを表示するプログラム

void strdump(const char *s)

{

while(1){

int i;

printf("%c %x ",*s,(CHAR_BIT+3)/4,*s);

for(i = CHAR_BIT - 1 ; i>=0; i--)

putchar(((*s>>i) & 1U) ? '1' : '0');



putchar('\n');

if(*s++ == '\0')
break;

}
}
最初のprintf文の引数の  (CHAR_BIT + 3 )/4 , *s
とputcharの  putchar(((*s>>i) & 1U) ? '1' : '0');


が理解できないです。
出来たらどなたかご教授くだされ。
762デフォルトの名無しさん:04/11/27 15:10:42
質問させていただきます
int, charの違いがいまいちわかりません
char型で20を取るのと、int型で20を取るのとでは何か変わるのでしょうか?
763デフォルトの名無しさん:04/11/27 15:11:23
質問はageとけ
764デフォルトの名無しさん:04/11/27 15:11:44
>printf("%c %x ",*s,(CHAR_BIT+3)/4,*s);

これオリジナルのまま? パラメータの数があってないんだけど


> (*s>>i) & 1U) ? '1' : '0'
愛があっておっ立ってるか、立ってたらチンコ、立ってないならマンコ
765モウモウ:04/11/27 15:11:57
>>762
何も変わりません。
766デフォルトの名無しさん:04/11/27 15:12:26
>762

20ならどっちでもおなじだ
767デフォルトの名無しさん:04/11/27 15:17:28
>>762
>>765-766の言う通りなんだけど、慣習的にintは数値を扱うため、charは文字を扱うために使われている。
768デフォルトの名無しさん:04/11/27 15:19:02
>慣習的にintは数値を扱うため

プ
だからgetchar()ではまるんだよw
769デフォルトの名無しさん:04/11/27 15:22:09
charは1バイト
intは2バイトや4バイト、環境による。
770デフォルトの名無しさん:04/11/27 15:22:14
char ってコンパイラによって signed であったり unsigned であったりするわけだけど、
移植性のあるコードを書くときはみなさんどうしていますか?
771762:04/11/27 15:23:26
20ならと言うことは
例えばcを入れた場合は変わるのでしょうか?
何度も質問してしまってすいません
772デフォルトの名無しさん:04/11/27 15:24:33
>char ってコンパイラによって signed であったり unsigned であったり

マジ?
char と unsigned char が同じなの? 信じらんねぇー
773モウモウ:04/11/27 15:25:03
>>771
char の場合、(chat が signed であれば) -128 〜 +127 の値しか入らない。
その範囲の値である限り、int でも同じってこと。
0x0C も 'c' もこの範囲にあるので int でも同じ。
774デフォルトの名無しさん:04/11/27 15:25:37
>例えばc

文字'c'のことか?それでも同じ
775デフォルトの名無しさん:04/11/27 15:26:13
>>772
LSI-Cはそれがデフォルトだな。
776モウモウ:04/11/27 15:27:24
>>775
ADS や RVCT もデフォルトだな。
777762:04/11/27 15:31:16
ありがとうございます
説明足らずですいませんでした
私が言ったのは  
char c='c';
等のことでした
この場合 cには'c'と言う文字ではなく
アスキーコードの0x63(99)が代入されるという考え方でいいのでしょうか?
778デフォルトの名無しさん:04/11/27 15:32:25
'c'という文字がアスキーコードの0x63(99)なんだが...
779モウモウ:04/11/27 15:33:35
>>777
C 言語では文字と数値は同じものだよ。
char c = 'c';
と書くのも
char c = 0x63;
と書くのもまったく同義。
780762:04/11/27 15:47:11
ありがとうございます
でも かなり混乱してきました
char c=0, d='0';
とやった場合 cには0(null?)がはいってdには0x30がはいるんですよね?
もし
int main(int argc, char **argv)
のプログラムで ./hoge.out 10 と言う実行をした場合は
10と言う数字ではなく
配列で|0x30|0x31|\0|と入るのでしょうか?
まだ 全然C言語がわかっていないものの書き方なので
わかりづらい言い方になっているかもしれませんが
すいませんがお願いします
781モウモウ:04/11/27 15:48:28
>>780
ここで聞くよりCの入門書を読むほうがいいと思うよ。
お互いにね。
782デフォルトの名無しさん:04/11/27 15:52:13
>>781
わからないんだったらレスしないで
783デフォルトの名無しさん
>>780
argv[0] -> "./hoge.out"
argv[1] -> "10"
argv[2] -> NULL

i.e.
argv[1][0] -> '1' = 0x31
argv[1][1] -> '0' = 0x30
argv[1][2] -> '\0' = 0