[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 15:17 / Filesize : 213 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131



1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ]
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
nssearch.hp.infoseek.co.jp/clang/
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
pc10.2ch.net/test/read.cgi/tech/1159613789/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.34【環境依存OK】
pc10.2ch.net/test/read.cgi/tech/1169039760/
C/C++の宿題を片付けます 82代目
pc10.2ch.net/test/read.cgi/tech/1169575464/

586 名前:585 [2007/06/22(金) 04:01:52 ]
で、Bです。
========================
【B】
========================
fpos_t *pos;
FILE *fp = NULL;
fp = fopen( "hogehoge.jpeg", "rb" );
if ( fp == NULL ) {
 /* エラー処理 */
} else {
 if ( fseek( fp, 0L, SEEK_END ) != 0 ) {
  /* エラー処理 */
 } else {
  if ( fgetpos( fp, &pos ) != 0 ) {
   /* エラー処理 */
  }
  if ( fclose( fp ) != 0 ) {
   /* エラー処理 */
  }
 }
}
/* posの値がhogehoge.jpegのファイルサイズ */
/* fpos_tってキャストできそうだからサイズの値が取れると思ったのですが。。。 */
========================


587 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 04:02:02 ]
環境依存の方法を使うのが普通じゃないかな。

588 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 04:04:05 ]
>>586
全然本質じゃない細かいところで
> fpos_t *pos;
これは
fpos_t pos;
だよね。多分わかってはいるとは思うんだけど。

589 名前:デフォルトの名無しさん [2007/06/22(金) 04:14:58 ]
fpos_tって別の変数にキャストしたりするとき困らない?

fpos_tって環境依存だからlong long型とは限らないと聞いたことがある。


590 名前:デフォルトの名無しさん [2007/06/22(金) 04:19:29 ]
横からすみません。

この>>585って、もしhogehoge.jpegのファイルサイズが巨大だった場合、
どうなっちゃんですか?

591 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 05:16:26 ]
標準Cでは2GBを超えるファイルのサイズを知る手段はないって結論になる。
fpos_tがキャスト可能であることは保障されていないことだし。

ファイル関連は標準Cだけで書くのを諦めて、64ビット系のstat()相当の関数を使うのが無難じゃない?

592 名前:デフォルトの名無しさん [2007/06/22(金) 06:19:36 ]
>>587〜のみなさん、ありがとうございました(588さんご指摘ありがとうございます)。
ファイルのサイズが大きい場合のことまで頭が回っていませんでした。
標準Cでは難しそうですね。
stat等の機能を持つ関数使用が無難といったところでしょうか。
一応stat使用時のソースも考えてみましたが…

struct stat fInfo;
if ( stat( "hogehoge.jpeg", fInfo ) != 0 ) {
 /* エラー処理 */
} else {
 /* fInfo.st_sizeにファイルサイズが入る */
}

あるいは・・・非 POSIX 標準 API インタフェースで(UX上で動作)

struct stat64 fInfo;
if ( stat64( "hogehoge.jpeg", fInfo ) != 0 ) {
 /* エラー処理 */
} else {
 /* fInfo.st_sizeにファイルサイズが入る */
}









593 名前:デフォルトの名無しさん [2007/06/22(金) 07:49:47 ]
相乗り質問ですいませんが
ファイルサイズ自体を知りたいのではなくて
ファイルサイズがある一定値を超えているか否かを判定したい場合も、
やはりstatなりftellなりでバイトサイズを一度取得してから
if文で判定するしかないですよね。

2GBだろうが3GBだろうが、とにかくある値を
超えてるか超えてないかだけわかればいいのですが。。。

594 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:16:12 ]
ファイル開いたらある値まで無理矢理ファイルポインタ動かしてみて
エラーが出るかを拾うってのはどうだろう
やっぱ2GB超えちゃうとダメなのかな



595 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:36:48 ]
そもそもファイルが開けないとサイズが調べられないプログラムはどうかと思うんで、
stat64 なりで調べた方がいいと思うよ。

596 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:45:05 ]
ていうかPOSIX環境だと_FILE_OFFSET_BITS=64が無ければ
2G以上のサイズはのopen/fopen自体が失敗する。
Windows環境だとopenは出来るけど、seekが出来ない(シーケンシャルには読める)。
それぞれ、open64や_lseek64(bccには無い)を使う。
もちろん、_FILE_OFFSET_BITS=64なら、openだけでよい。

また、statも同様に、_FILE_OFFSET_BITS=64ならstatだけで良いが
それ以外はstat64等を使う。

597 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 09:31:14 ]
そもそもfseek()はエラーを返せない。

598 名前:デフォルトの名無しさん [2007/06/22(金) 09:54:27 ]
stat構造体のst_sizeはoff_t型だから、……
long int型になるのかな、
そうするとlong int型に格納しきれないバイト数のファイルは
桁あふれするのかな? 0? 再現させてテストしたいが
環境が手元にないのだが。。。。。。

599 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:00:42 ]
だからoff_t型の大きさは_FILE_OFFSET_BITSや_LARGEFILE64_SOURCEによって変わる。
off_tに格納できないようなサイズのファイルは、そもそもstat自体が失敗する。

600 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:07:58 ]
あ、Windowsだとstatは失敗しないな。たぶん。
で、結果がどうなるかは処理系(ライブラリ)依存。
何故ならstatはエミュレーションしているので、
stat("c:/*", &st)が成功してしまったりする処理系があるから。

601 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:44:19 ]
ファイルサイズというのが何を意味するかによる。
OS上でのサイズのことなら、
そもそも環境依存なので環境に用意されたAPIを好きなように使えばいい。
Cの入出力関数で読んだときのバイト数のことなら、
読めないようなものは無視してしまえばいい。

まあ、なんでファイルサイズを知りたいのかってとこまで
一回さかのぼって考えてみるのも一計。

602 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 22:25:44 ]
サイズは「サイズ」以外ないだろ。
「文字数」とは違う。

603 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:17:34 ]
昔のCP/Mはセクタ数でしか管理してなかったなぁ

604 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:53:01 ]
>>603
今のCP/Mとやらはどう管理しているの?



605 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:23:37 ]
>>603
最終セクタの0x1Aまでがファイルの「サイズ」だろ?

606 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:45:36 ]
でもそれは管理されてない。

607 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:54:38 ]
ん、「管理されているかどうか」という話なの?
「ファイルのサイズとは何か」という話の揚げ足を取ろうとして墓穴を掘っただけじゃなかったの?

だったらそれでいいけど。

608 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:57:38 ]
あっと、
「ファイルのサイズとはOSに管理されていなければならない」という
話の流れとは関係ないことを言いたかっただけで
「ファイルのサイズとは一意に決まるものである」ということに対する反論じゃなかったって事ね。

609 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 10:25:40 ]
バイナリファイルは「0x1aまで」というルールを採用できないからセクタ単位でしかサイズを得られない。

610 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 03:19:11 ]
ファイルシステムがファイルのサイズをセクタ単位でしか管理してない上に、
テキストとバイナリで終端の扱いが違うようなシステムだって存在してたんだ。
統一した「ファイルサイズを得る方法」なんてあるわけがない。

あー、それから人の書き込みが何でも揚げ足取りに見えるとしたら重症だぞ。


611 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 03:23:51 ]
ファイルサイズを取得する関数が標準で用意されなかったのは、
そのあたりが理由なのかな?

612 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 04:03:56 ]
>>611
そそ、ファイルシステムという概念も統一できないからディレクトリ操作関係も入れられていないし
ファイル操作もストリーム処理系を除くとremove()位しかない。

613 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 04:31:09 ]
MS-DOS 1.0 もディレクトリないんだっけ?

614 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 04:43:31 ]
汎用機もねーよ



615 名前:デフォルトの名無しさん [2007/06/24(日) 22:22:42 ]
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

616 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 22:24:17 ]
そのネタ飽きた

617 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 10:05:04 ]
そういや、xmodemプロトコル(無印)もファイルサイズの概念無かったな
128バイトのブロック単位だったからファイルの後ろにはゴミがついていた
Mac専用にファイル名やサイズをヘッダにつけるマックバイナリができたっけ・・

618 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 10:55:57 ]
マックバイナリができた事情はリソースフォークの管理のためだが詳細はスレ違いにつき割愛。

619 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 11:58:13 ]
リソースフォークの話は出してくるやつが出ると思った
リソース/データフォークのサイズもファイルサイズの指定の意味で
書いたんだがわからなかったんだろう


620 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 15:09:30 ]
>リソース/データフォークのサイズもファイルサイズの指定の意味で
>書いたんだがわからなかったんだろう
これ日本語なの?

621 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 19:06:14 ]
まるでXMODEM対応のためにマックバイナリが作られた様な表現はどうと思う。

622 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 19:07:17 ]
どうと思う!
いや、どうかと思う、だorz

623 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:39:59 ]
MFCでCString型の変数strにメタ文字の.が入っている場合\記号と連結するのに
str = "\\" + str;
これで全然問題ないのですが、標準のCで
char str[MAX_PATH];
strcpy(str, ".");
starcat("\\", str);
こうするとアクセスバイオレーションが発生します
どうしたらええの?
strcpy(str, "\.");これでも駄目だった
そうそう環境はWinXPSP-2、VC6です


624 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:41:45 ]
>>623
starcat なる謎の関数の仕様をよーく確認しろ。



625 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:42:52 ]
星猫

626 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:46:52 ]
スマンstrcatだったMSDN見ても問題ないと思うのだが?
文字列の連結するんだよねstrcatって、まぁ今回は連結する方もされる方も一文字だったが

627 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:48:00 ]
>>626
じゃぁ strcat の仕様をよーく確認しやがれこのバ

628 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:48:55 ]
そりゃ文字列リテラルに文字列を追加しようとしたら落ちるわな。

629 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:50:02 ]
それでもstarcatならきっとやってくれるさ

630 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:50:05 ]
MFC 使える環境なら CString か std::string 使えば?
そっちの方が幸せになれるよ。セキュリティ的にも。

631 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:56:52 ]
>>628
ところがどっこいリラテルでなくてもアクセスバイオレーションが起こるんだよねこれがまたww
>>630
だからMFCなら全然無問題なのだが、Cの事も知りたいからよ

632 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:56:54 ]
>>626
strcatでは、後ろに追加することしか出来ないんだ。
"//"には、後ろにstrを追加する余裕なんて無い。

633 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:59:06 ]
>>631
ならリテラル以外で問題が再現するコードを書いてみやがれ

634 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:00:41 ]
>>631
C は面倒臭いよ。
バッファオーバーフローをいちいち気にしないといけないから。



635 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:04:06 ]
sprintf()一回ですむことをstrcpy(), strcat()を駆使しようとするからそうなる。
しかし、やりたいことがよく判らないからサンプルを書けない。
例えばディレクトリとファイル名を連結したいだけならこうなるのだが。
sprintf(path, "%s\\%s", dir, file)

636 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:08:05 ]
>>631
どうせ初期化してないのに strcat とかしたんじゃないのか?

637 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:12:33 ]
元のCStringを使ったコードはこうなっていると解釈するぞ。
CString str = ".";
str = "\\" + str;

char str[MAX_PATH] = ".";
size_t size = strlen(str) + 1;
if (size >= MAX_PATH)
  abort(); /*好きにしてくれ*/
memmove(str + 1, str, strlen(str) + 1);
str[0] = '\\';
WindowsならTCHAR系使えという気もするが、とりあえずcharにしておいた。


638 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:39:04 ]
BoehmGCのようなライブラリを使えば
char *str = ".", *tmp;
tmp = GC_MALLOC(strlen(str) + strlen("\\") + 1);
sprintf(tmp, "\\%s", str);
str = tmp;
でいいよ

んでも毎回strlen()とかすんのはウザいので、
typedef struct string_t { char *s; size_t len; } string_t;
とかして、string_tに対する操作を関数で一通り作るといいよ

んでもそんなアホくさい作業をするくらいならC++で素直に
std::basic_string<>使ったほうがいいよ

639 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:53:40 ]
MFC使っているならCStringもありさ

640 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:19:12 ]
strcpy -> strncpy
strcat -> strncat
sprintf -> snprintf

641 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:09:50 ]
>>640
残念ながら、前2者は仕様が仕様だから推奨できない。そして最後は未だ標準じゃない。

642 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:07:18 ]
結局C++でstd::basic_string<>なりMFCのCStringなりを使えということになる。
何より楽だし。

643 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:28:15 ]
バッファオーバーフロー脆弱性の話を聞くたびに、
敢えて C を使う以上はエラー処理ちゃんとしろよと思ってしまう。
それができないなら C++ にしる、と。

644 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:19:51 ]
>641
C99は未だ存在しないのか・・・



645 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:22:59 ]
C99 が使える環境では snprintf を使って、
使えない環境なら等価な関数に #define すればいいんじゃない?

646 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:26:40 ]
snprintf()に等価な関数なんてないっしょ。環境によってはあるんだっけ?

647 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:33:00 ]
VC++ には _snprintf がある。

648 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:13:07 ]
char *s;
FILE *fp = fopen("/dev/null", "w");
size_t len = fprintf(fp, ...); /* 長さを数えてもらう */
fclose(fp);
s = malloc(len + 1);
sprintf(s, ...);

勿論こんなコードを使うぐらいならapacheあたりのコードをパクるのが良いが
それぐらいならやっぱりC++を使うべきという結論に

649 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:38:37 ]
>>648
必要なバッファの大きさを求める部分は、関数化して切り出すべきだと思う。
C99ならsnprintf(NULL, でいいし、VCなら_scprintfが使えるし。

650 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:48:37 ]
>>649
そいつらの代替実装の話だろ。

651 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:48:40 ]
問題は移植性の低さだな
標準とはいえC99未対応のCコンパイラは多い

652 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:00:52 ]
snprintf 程度なら、C99 に対応してない処理系でも大抵独自に用意されてるんじゃない?

653 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:09:55 ]
>>652
あってもC99と同じ仕様とは限らん
たとえばSingle Unix Specificationだと、たしか返り血が違うんじゃなかったか

654 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 03:06:17 ]
その場合は自分でラッパ関数を定義すればいいんじゃないかな?



655 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:29:01 ]
*BSD LIBCあたりから掻っ払って来りゃええやん。

656 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:59:02 ]
ねぇねぇおまえらちょっと教えてくんない
ファイルの行数を取得する標準関数なんてないよね
そんなことがしたい時ってやっぱ一旦ファイルを全部読み込んでそん時に\nの数
数えるとかやってんの?
どうよ


657 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:03:13 ]
そうする

658 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:34:14 ]
それ以外の方法があるなら是非とも教えてもらいたいもんだ

659 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:50:13 ]
fp = fopen(filePath,"r");
while(fgets(szBuff, MAX_PATH, fp) != NULL)
{
  maxLine++;
}
fclose(fp);

char szItem[7][maxLine++];

じゃぁこれはどうよ、二次元配列が作りたくてこうやったら
error C2057: 定数式が必要です、MSDNとか調べてsupport.microsoft.com/kb/142493/ja

char szItem[7][((const int)maxLine++];
こうしてもなおんないんだよねぇこれってどうよ

660 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:52:13 ]
スマン訂正
int maxLine;
罰char szItem[7][((const int)maxLine++];
丸char szItem[7][(const int)maxLine++];

661 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:59:58 ]
C99じゃない限り配列の大きさはコンパイル時に固定=定数

662 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:07:53 ]
あきらめきれなくて
回避策はないのかと聞いてみる

663 名前:デフォルトの名無しさん [2007/07/05(木) 00:09:15 ]
ttp://www23.atwiki.jp/homework/pages/11.html#id_062fdb0f
のwikiに載っていたリサージュのプログラムで
x = cos(2 * PI * a * t);
y = sin(2 * PI * b * t);
の2の値を自由に変えられる(自分で入力できる)ように
したいんですけど、どうやったらいいですか?


664 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:10:28 ]
>>662
malloc使えばいいんじゃない



665 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:12:44 ]
>>664
クワシク

666 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:17:10 ]
そこらへんの入門書に書いてある。
残念ながらここで1から説明していられるほど簡単に説明できる機能ではない。

667 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:53:10 ]
>>662
寧ろ、C++でstd::vector使えばいいんじゃない?

668 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:32:50 ]
ドウシテC99ヲツカワナイノデスカ

669 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:48:51 ]
ドウシテC99ガフキュウシテルトオモウノデスカ

670 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:50:55 ]
C99 使うくらいなら C++ 使う

671 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:52:17 ]
んだな

672 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:13:16 ]
単項演算子の+って、どう言ったときに役に立つのでしょうか?
Cだけの話ではないかもしれませんが。

673 名前:デフォルトの名無しさん mailto:age [2007/07/05(木) 23:13:35 ]
メジャーなコンパイラでC99に対応してないのってあるの?
俺趣味グラマでgccしか使わんからわからん。

674 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:16:17 ]
>>673
VC++



675 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:20:05 ]
>>672
桁合わせくらいには役に立つことはあるかも。

676 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:47:34 ]
>>672
-があるから+も装備したらしい

677 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:45:33 ]
昔、
#ifdef xx
# define SYM 10
#else
# define SYM
#endif
のような時に

int num = SYM +0;
というような使い方をした覚えがあるような無いような。

678 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:20:07 ]
マクロ関連で役に立つことがたまにありそうではあるな。

679 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:35:03 ]
正確には、式に単項演算子をつけない場合は+を省略したものとみなされる・・・じゃなかったっけ?

680 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:36:20 ]
単項+のオペランドも式だし、
単項+のオペランドになれない式もあるだろ。

681 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 03:44:31 ]
#ifdef xx
# define SYM 10
#else
# define SYM 0
#endif
では、何故ダメだったのか教えてほしい。

682 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:11:51 ]
学校でC言語実習やったんだがどうしてもわからないことがあったんで聞いてみる。
○×ゲームを作るプログラムを作っていたんですが。
1〜9の数字キーでどこのマスを使うか決めるプログラムなんです。
line1[10]=" 789\n",
line2[10]=" 456\n",
line3[10]=" 123\n",
という行があるんだが↑このスペース間をTabキー使って開けたらエラーが出たんですが
何故Tabキー使っては駄目なのか教えていただけませんか?

683 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:17:17 ]
>>682
書き換える前後で strlen(line1) の数値を比べてみれば分かるんじゃないかな

684 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:37:32 ]
いやコンパイルエラーになるんだろ。
たぶん、構文的に駄目になっているのだろうとしか言えない。
後できちんと規格書に当たってみる。

とりあえず、文字列リテラルの中でタブ文字を表現したければ、
タブを直接入力する代わりに\tを使えばいいと言っておく。



685 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:44:18 ]
>>683
ほんとにCはかじったばっかりなんでよく分からない上に
今気づいたんだけどスペースに半角使用してしまったため↑の位置が変すぎる('A`)
"と7のスペースね。

strlenって言ったら文字列の長さだよね?
Tabキーのスペースは普通のスペースの何個分もあるけど1カウント?しかしないという解釈でいいのだろうか?

686 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:48:07 ]
>>685
やってみたほうがよく分かる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef