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]ってしなくていいんですか?
にゅー くれらっぷー
たとえばの話
アドレス(もしくは変数名) 値(もしくは文字列)
0xbfffaa00 (argv) 0xbfffaa08
0xbfffaa04 0xbfffaa28
0xbfffaa08 (argv[0]の内容)
0xbfffaa28 (argv[1]の内容)
s 0xbfffaa28
>>737 私に言ってくれているのでしょうか??
すいませんがよくわかりません
説明していただけるとありがたいです
この例だと、argv[1]の値は0xbfffaa28で、その値が
設定されているメモリのアドレスは0xbfffaa04。
その値の0xbfffaa28のアドレスには文字列が設定されている。
これがargv[1]が指している文字列。
だから、sに代入すべきなのは、argv[1]の値の0xbfffaa28
であって、&argv[1]はargv[1]のアドレスだから、0xbfffaa04に
なってしまう。ここには文字列などないので、これをsに
代入するとぐちゃぐちゃになります。ていうかコンパイル
エラーになる。
>>739 ありがとうございます
頭がごちゃごちゃになってきました・・
すいませんが 今は寝て起きてから考えて見ようと思います
すいません ありがとうございました
741 :
デフォルトの名無しさん:04/11/26 03:43:57
> 開放しなかったらどうなるんですか?
ぜったいしちゃだめ > 開放
(解放ならしてもいいが)
742 :
デフォルトの名無しさん:04/11/26 05:02:44
うちのサーバは一般開放
ど素人ですが、C言語でなにができるんですか?
744 :
デフォルトの名無しさん:04/11/26 06:34:58
Rubyのインタープリタを書くこと。
>>735 > char *s;
> s = argv[1];
>は何をしているのでしょうか?
>これでsにはargv[1]のポインタが入るの?
>でも その場合なんで &argv[1]ってしなくていいんですか?
sにはargv[1]が入る。決してargv[1]のポインタが入る訳ではない。
&argv[1]ってするとargv[1]のポインタが入ってしまうだろ?それに、そうしたくても char **s にしとかないと型不整合エラー。
>>743 C++コンパイラの作成やJavaコンパイラの作成が出来る
748 :
デフォルトの名無しさん:04/11/26 09:36:59
perlではコマンドの結果を
@list=`ls`
とやって受け取ることが出来ますが、Cではどうやったら出来ますか?
fork と socket を使う
>>748 一応ここは環境依存排除なので標準ではできないというのが答。
存在するなら、popen()を使うのがawk的でいいかと。
>>749>>750 わかりました。UNIXプログミングについて勉強してみます。
ありがとうございます。
プログラム書いてると 頭痛くなるのは仕様ですか?
>>752 PC から放射される電磁波が原因です。
プログラムはチラシの裏に書きましょう。
C言語で彼女の作り方を教えてください。
lover* make_lover() { return NULL; }
if((kanojo=make_lover())==NULL){
fprintf(stderr, "彼女の作成に失敗しました。\n");
exit(99);
}
758 :
デフォルトの名無しさん:04/11/26 19:25:06
初歩的な質問だと思いますが。
文字列の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');
が理解できないです。
出来たらどなたかご教授くだされ。
初歩的な質問だと思いますが。
文字列の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');
が理解できないです。
出来たらどなたかご教授くだされ。
質問させていただきます
int, charの違いがいまいちわかりません
char型で20を取るのと、int型で20を取るのとでは何か変わるのでしょうか?
763 :
デフォルトの名無しさん:04/11/27 15:11:23
質問はageとけ
>printf("%c %x ",*s,(CHAR_BIT+3)/4,*s);
これオリジナルのまま? パラメータの数があってないんだけど
> (*s>>i) & 1U) ? '1' : '0'
愛があっておっ立ってるか、立ってたらチンコ、立ってないならマンコ
>762
20ならどっちでもおなじだ
>慣習的にintは数値を扱うため
プ
だからgetchar()ではまるんだよw
charは1バイト
intは2バイトや4バイト、環境による。
770 :
デフォルトの名無しさん:04/11/27 15:22:14
char ってコンパイラによって signed であったり unsigned であったりするわけだけど、
移植性のあるコードを書くときはみなさんどうしていますか?
20ならと言うことは
例えばcを入れた場合は変わるのでしょうか?
何度も質問してしまってすいません
>char ってコンパイラによって signed であったり unsigned であったり
マジ?
char と unsigned char が同じなの? 信じらんねぇー
>>771 char の場合、(chat が signed であれば) -128 〜 +127 の値しか入らない。
その範囲の値である限り、int でも同じってこと。
0x0C も 'c' もこの範囲にあるので int でも同じ。
>例えばc
文字'c'のことか?それでも同じ
>>775 ADS や RVCT もデフォルトだな。
ありがとうございます
説明足らずですいませんでした
私が言ったのは
char c='c';
等のことでした
この場合 cには'c'と言う文字ではなく
アスキーコードの0x63(99)が代入されるという考え方でいいのでしょうか?
'c'という文字がアスキーコードの0x63(99)なんだが...
>>777 C 言語では文字と数値は同じものだよ。
char c = 'c';
と書くのも
char c = 0x63;
と書くのもまったく同義。
ありがとうございます
でも かなり混乱してきました
char c=0, d='0';
とやった場合 cには0(null?)がはいってdには0x30がはいるんですよね?
もし
int main(int argc, char **argv)
のプログラムで ./hoge.out 10 と言う実行をした場合は
10と言う数字ではなく
配列で|0x30|0x31|\0|と入るのでしょうか?
まだ 全然C言語がわかっていないものの書き方なので
わかりづらい言い方になっているかもしれませんが
すいませんがお願いします
>>780 ここで聞くよりCの入門書を読むほうがいいと思うよ。
お互いにね。
>>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