C言語なら、俺に聞け! <13>
■ このスレッドは過去ログ倉庫に格納されています
0001ハイソサエティーハッカー日下部陽一
NGNGいろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったらオレに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419
K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419
・前スレ C言語なら、オレに聞け! <12>
http://pc.2ch.net/test/read.cgi/tech/1012348974/l50
0153デフォルトの名無しさん
NGNG必要性というか、間違っていないか判断したいだけです。
単に一つの変数に代入したくらいでは間違いませんが。
0154デフォルトの名無しさん
NGNG動的に確保した領域を指すポインターには特定の前置詞で始まる
名前をつけとけ。
終わり
0155デフォルトの名無しさん
NGNGないんですね。わかりました。
0156デフォルトの名無しさん
NGNG機種依存の方法でよければ、アドレス見ればわかると思う。
0157デフォルトの名無しさん
NGNGそうなんですか?デバッグ中に使うだけなので機種依存でも大丈夫です。
Win+VC6.0pro,Linux+gccです。
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG仕事じゃないので・・・
0160デフォルトの名無しさん
NGNG・・・・・・・
もしかして「デバッガ」って人間のことだと思ってない?
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGポインタを調べるのに人間を呼ぶか?
0164デフォルトの名無しさん
NGNGまた、そういうのが見れるサイトを知ってたら紹介してください。
0165デフォルトの名無しさん
NGNG自分は「チャー」って呼んでるんだけど。「int」は「イント」。
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNGFF7
>>165
ちゃー
他人に話すときはキャラクタ
0168デフォルトの名無しさん
NGNGチャーだとなんだか格好がつかない気がしてたんだ。ありがと。
0169デフォルトの名無しさん
NGNGhoge
0170デフォルトの名無しさん
NGNGチャーに決まってんだろ。
竹中尚人
0171デフォルトの名無しさん
NGNGしーえいちえーあーる
0172デフォルトの名無しさん
NGNGしゃー
0173デフォルトの名無しさん
NGNGちゃんとカタカナでシャアって書けよ
0174デフォルトの名無しさん
NGNGいや
絶対いや
0175修行僧
NGNG0176初心者
NGNGブロック内だけでしょうか、ファイル全体でしょうか。
struct _1{
int i;
struct _2{ //これとか
char *p;
};
};
0177デフォルトの名無しさん
NGNGきますよ。
0178176の初心者
NGNGstruct STRCT{
struct STRCT_IN{
int i;
};
};
// としたとき
int main()
{
/* 関数の中でSTRCT_INを型としてオブジェクトを作る手段はあるのか?
またできたとしてもそれは許されるのか? */
return 0;
}
を聞きたかったのです、よろしくお願いします。
0179144
NGNG0180デフォルトの名無しさん
NGNG普通に
struct STRCT_IN obj;
で作れないか?
C++なら
STRCT::STRCT_IN obj;
とか。
0181デフォルトの名無しさん
NGNGscanf("%lf",&buffer); // <=ここで
セグメンテーションエラーが出てしまうんですけどどうしたらいいんでしょう
0182デフォルトの名無しさん
NGNG普通にしたらできましたm(_ _)m
迷惑かけてすいません(;_;)
0183デフォルトの名無しさん
NGNG1 2 3.....
1/2/3 4/5/6 7/8/9.........
最初から要素が何個あるか解からない時は、
fgets(line, 255, fp);
で一行読み込んでから、空白ごとに読み込んでいく
以外に方法はないんでしょうか?
最初から何要素在るか解かる関数など在るんでしょうか?
m(__)mm(__)mm(__)m
0184デフォルトの名無しさん
NGNG無い。
0185デフォルトの名無しさん
NGNG√ ̄ ̄ ̄ ̄ ̄\
/ ̄ |
/ / ̄ ̄ ̄ ̄ ̄\|
| / |
| / ` ´ |
| / _ _ | 初心者の文字が目に入らぬか!!
(6 つ. |
| ___ |
_ | /__/ |
⊃|房| | ___/
つ  ̄ ⊂
⊃
0186デフォルトの名無しさん
NGNGヲタクは氏ね
0187デフォルトの名無しさん
NGNG助けてください。
0188デフォルトの名無しさん
NGNG読まないで個数をどうやって数えるんでしょうか?
0189デフォルトの名無しさん
NGNGC言語には念写する機能はついていません。
0190デフォルトの名無しさん
NGNG解る関数が無ければ解る関数を作ればよい(藁
色々な面で処理効率は落ちるが、コーディングで難しいって点は無い筈。
補足。意外と使われてない気がするけど、こういう処理にはstrtokって関数が有る。
貴兄の求める仕様に合致するかは知らないけど、知識外なら一度調べてみては。
0191デフォルトの名無しさん
NGNGオーバーヘッドが多いような。
というか、FGETSしてるのならすぐに調べられるだろうが。
FGETSせずに調べるのは超能力が必要だし。
愚かな質問。
0192デフォルトの名無しさん
NGNG何を悩む必要があるのかまるでわからん。
「コードを書きたくない」と書いてるように見えるが。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNGwhile((c = fgetc(fp)) != EOF) fputc(c,wp);
のようにして最後まで読んでしまって
また一から読みたい場合はどうすればよいのですか?
lseek()を使うのでしょうか。
0196デフォルトの名無しさん
NGNG普通に開きなおしたら?
0197デフォルトの名無しさん
NGNGfgetcで1文字ずつ読んでった方が楽なケースというのも世の中にはある。
0198デフォルトの名無しさん
NGNGOSの再インストールが必要になります
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGfgetc, fputc ときたら fseek だろ。もしくはrewind。
0201200
NGNG今日もGETかな( ´ー`)y-~
0202デフォルトの名無しさん
NGNGぷ
0203195
NGNG開き直しかfseekかrewindやってみます。
0204デフォルトの名無しさん
NGNG知ってることで出来ることを無理に知らないことでやろうとしないこと。
0205デフォルトの名無しさん
NGNGと
int const foo[3]={1, 2, 3};
はどう違うんですか?
0206デフォルトの名無しさん
NGNGとりあえずお約束だが「プログラミング言語C」は読んだか?
0207デフォルトの名無しさん
NGNG初心者なら気にしなくても大丈夫な気も・・
0208デフォルトの名無しさん
NGNG>>207 いーかげんなこといわないように
0209デフォルトの名無しさん
NGNGfunction(i1, i2){
unsigned char i1[size1][size2];
unsigned char i2[size1][size2];
{
・・・
}
なら大丈夫なのに
function(i1, i2, x, y){
unsigned char i1[size1][size2];
unsigned char i2[size1][size2];
int x,y;
{
・・・
}
ではダメなのはどうしてなんでしょう?
0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNGどんなエラーが出るかを書け。
0213デフォルトの名無しさん
NGNGint *const p;
とかも考えると、修飾子は右に書く方が、統一はとれてるんだけどね。
でも、
int const *p;
const int *p;
だと、後者の方が良く見かける気がする。
0214デフォルトの名無しさん
NGNGあうあう、そうか。
C言語でややこしい宣言をする時には
(ポインタのポインタの関数のポインタの・・みたいな)
「段階的宣言」をして明確にする口なので気がつかず。
constの方が「重要な情報」であることは確実だとおもうのと
constが色々な方にまたがって複数ある時にはconstを
先に出して連ねた方が見やすい。
・・と思ってるんですけど、正しい?
0215デフォルトの名無しさん
NGNG一見便利だが、複雑になると死にそうになる。
長いけど例えば
AddressOf
みたいな感じだったら混乱しなかったはず。
p : AddressOf Const Integer;
p : Constant AddressOf Integer;
pf AddressOf Array AddressOf func();
例えばこんな感じで
0216デフォルトの名無しさん
NGNG>>>205 intとconstの位置が違うだけです
そうなのですか。どうもありがとうございます。
constって不思議ですね。
#include <stdio.h>
main(int ac, char **av)
{
const int a=1;
const int b=2;
const int *p = &a;
printf("%d\n", *p);
p = &b;
printf("%d\n", *p);
*p = 3;
printf("%d\n", *p);
}
*p=3でWarning出ますが、実行すると書きかえれちゃう(gccです)
こんなものなのでしょか。
0217デフォルトの名無しさん
NGNGなんか Pascal っぽいね。
0218デフォルトの名無しさん
NGNGROMに焼くようなプログラム作るときには、重宝するかも。
漏れあんまりconstってかいたことない。
0219デフォルトの名無しさん
NGNGテーブルとかconstで宣言しとかないと心配じゃ無い?
0221
NGNG“*”じゃなくて“〒”はどう?
0222デフォルトの名無しさん
NGNGC 言語で「警告」が出たら、他の言語だと「致命的エラー」に相当すると思って
おいた方がいい。特にキャストやポインタがらみの場合。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGbakaですが何か?
0225デフォルトの名無しさん
NGNGですが何か?
0226デフォルトの名無しさん
NGNGたくさんいますが、何か?
0227あ
NGNG学校では「コンソールアプリケーション」とかいうので、DOSプロンプトで実行するやつしか
作ったことがないのですが、VBみたいにボタンとかテキストボックスとかをCでも作れるのですか?
0228デフォルトの名無しさん
NGNGC++Builderっ、買え!
0229183
NGNGお答え下さいました皆様方、真に
ありがとうございました。
>193
要素数とゆうか、Lineが数千行在るんでなんとも・・・・。
今のところ、中身が解かるので、
for(hoge=0 ; !feof(fp);)
{
fgets(line, 255, fp);
sscanf(line, "%s", ky);
if(!strcmp(ky, "文字"))
{
sscanf(line, "%*s %lf %lf %lf",
&hoge[v][0],
&hoge[v][1],
&hoge[v][2]);
v++;
}
.
.
.
の様にしているので、改良してみます。
0230229
NGNGfor(v=0 ; !feof(fp);)
{
fgets(line, 255, fp);
sscanf(line, "%s", ky);
if(!strcmp(ky, "文字"))
{
sscanf(line, "%*s %lf %lf %lf",
&hoge[v][0],
&hoge[v][1],
&hoge[v][2]);
v++;
}
0231デフォルトの名無しさん
NGNGいまいち何を悩んでるんだかつかめないんだけど、
1.各行の要素数がまちまちなので、最大の要素数を知らないと配列確保できねーじゃねーかゴルァ
2.1行が長すぎて、fgets()で読み切れない時があるんじゃゴルァ
3.sscanf()しか知らんから、要素数可変でスペースで区切られてる文字列をパースできねーんじゃゴルァ
のどれなのよ?
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1012348974/n208
でもどうぞ。この場合はポインタの配列だけど、応用でわかるかな?
チミのお脳にかかっている!
0234232
NGNG0235デフォルトの名無しさん
NGNGint i = 9999,*p = &i,**pp = &p;
printf("%d",**pp);
---結果---
9999
つまり
int i = 9999
はこういうこと
0x0001番地 ←アドレス(例)
| ̄ ̄ ̄ ̄|
| 9999 | ←変数i(中身はデータ)
|____|
次の
*p = &i
は
0x000A番地 ←変数iとは必ず異なるpのアドレス
| ̄ ̄ ̄ ̄ ̄|
| 0x0001 | ←ポインタ変数p(中身は変数iのアドレス)
|_____|
ほんで
**pp = &p;
でポインタ変数pのアドレスを代入
0x000FF番地 ←ppのアドレス
| ̄ ̄ ̄ ̄ ̄|
| 0x000A | ←ポインタを指すポインタ変数pp(中身はポインタpのアドレス)
|_____|
最後の
printf("%d",**pp);
は単項の*演算子で指すものを取り出している。
単項の結合規則は右から左なので
*(*pp)
こういうことだから
pp p i
↓ ↓ ↓
| ̄ ̄| | ̄ ̄| | ̄ ̄|
|__}→(*参照)→|__|→(*参照)→|__}
こうなって見事に繋がりを参照することによってiが取り出されて
printf()関数に9999を渡し、表示されるわけ。
0236235
NGNGまあ暇だからいいや。
0238231
NGNGなんか長くなっちゃった・・・鬱
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_BUF_GROW_STEP 8
#define MAX_LINE 10240
char **hoge[MAX_LINE];
main() {
char *line,*line_tmp;
char *word;
char **line_element_ptr;
int lines = 0;
int chars;
int count;
int line_buf_len = 2; /* 最低でも 2 は必要(man fgets) */
int i,j;
/* 行バッファ確保 */
line = (char *)malloc(line_buf_len);
line_tmp = (char *)malloc(line_buf_len);
if (!line || !line_tmp) {
puts("メモリ買えや・・・");
exit(1);
}
/* 読み込むよぅ */
while(fgets(line,line_buf_len,stdin)) {
/* 継続読み込み */
while(line[strlen(line)-1] != '\n' && !feof(stdin)) {
/* 行バッファ伸ばす */
line_buf_len += LINE_BUF_GROW_STEP;
line = (char *)realloc(line,line_buf_len);
line_tmp = (char *)realloc(line_tmp,line_buf_len);
if (!line || !line_tmp) {
puts("メモリねぇんだゴルァ・・・");
exit(1);
}
/* 続きを読み込む */
fgets(line+(line_buf_len - LINE_BUF_GROW_STEP -1),
LINE_BUF_GROW_STEP+1,stdin);
}
0239238のつづき
NGNGif (line[strlen(line)-1] == '\n') line[strlen(line)-1] = '\0';
/* strtok は引数で渡した文字列破壊するので、コピーしる */
strcpy(line_tmp,line);
/* 単語数カウント */
count=0;
for(word = strtok(line_tmp," \t"); word; word = strtok(NULL," \t")) {
count++;
}
/* 単語数分のポインタ領域確保 */
line_element_ptr = hoge[lines] = (char **)malloc( (count+1) * sizeof(ch\
ar*) );
if (!line_element_ptr) {
puts("メモリねーよ");
exit(1);
}
/* 単語を複製し、そのアドレスをさっき確保した領域に入れてく */
for(word = strtok(line," \t"); word; word = strtok(NULL," \t")) {
*line_element_ptr++ = strdup(word);
}
*line_element_ptr = NULL;
lines++;
}
/* 行バッファ開放 */
free(line);
free(line_tmp);
/* ついでに表示するよぅ(ついでにメモリ開放しる) */
for(i=0; i<lines; i++) {
for(j=0;hoge[i][j];j++) {
printf("[%s]",hoge[i][j]);
if (hoge[i][j+1]) printf(",");
free(hoge[i][j]);
}
free(hoge[i]);
puts("");
}
}
0241デフォルトの名無しさん
NGNG↓
fprintf(stderr,"殿!メモリがたりませぬ!\n");
0242デフォルトの名無しさん
NGNG>>239
なんか結構つっこめちゃんですが?
0243デフォルトの名無しさん
NGNGお前の気分なんてどうでもいい。
大体お前だって本当は鬱でもないんだろ。
0244デフォルトの名無しさん
NGNGつっこむ以前に汚すぎて読む気もおきねーよ
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGどれが適してるのでしょうか?
本来なら私自身が全方法をテストして調査するべきなのでしょうが、
みなさんのご意見を聞かせていただけると有り難いです。
0247デフォルトの名無しさん
NGNG「ダメなコメントのつけかた」のサンプルじゃないのか?
0248デフォルトの名無しさん
NGNGDVD-RAM
(その質問だと、前提が正しく示されてないから、こういう大ボケな答えが返って
きても文句言えんと思う)
0249デフォルトの名無しさん
NGNG無駄レスすんな
>>244
同意
0250ィ
NGNGハノイの塔っていうプログラムです。
#include<stdio.h>
hanoi(char src,char dst,char tmp,int n)
{
if(n > 1)
{
hanoi(src,tmp,dst,n-1);
hanoi(src,dst,tmp,1);
hanoi(tmp,dst,src,n-1);
}
else
{
printf("move from %c to %c\n",src,dst);
}
}
main()
{
int n;
printf("何個? ");
scanf("%d",&n);
hanoi('A','B','C',n);
}
0251デフォルトの名無しさん
NGNG実に読んだままです。
0252デフォルトの名無しさん
NGNGハノイの塔の説明でも聞きに来たんじゃないだろうな?
■ このスレッドは過去ログ倉庫に格納されています