掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30064

C++ で、char foo[2] = "ab"; はエラー?
投稿者---Hermit(2007/04/24 21:19:24)


題名の通りですが、C++としてコンパイルした場合、

bcc32ではエラーになってくれません。(C と同じみたい)
gcc ではエラーです。

どちらが、C++ の仕様なんでしょう?

サンプル書くほどの事じゃないとは思ったけど、いちおう書いておきます。
---- foo.cpp ----
#include <stdio.h>
int main() {
    char foo[2][2] = {"ab","a"};
    printf("%d => %s\n",sizeof foo[0], foo[0]);
    return 0;
}
------------ 



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:C++ で、char foo[2] = "ab"; はエラー? 30065 YuO 2007/04/24 22:35:07


No.30065

Re:C++ で、char foo[2] = "ab"; はエラー?
投稿者---YuO(2007/04/24 22:35:07)


題名の通りですが、C++としてコンパイルした場合、
bcc32ではエラーになってくれません。(C と同じみたい)
gcc ではエラーです。
どちらが、C++ の仕様なんでしょう?


エラーになるのが仕様です。
実は,ISO/IEC 14882:2003 8.5.2 Character arraysの第2段落にあるサンプルが結構そのまんまだったりします。
There shall not be more initializers than there are array elements. [Example:
    char cv[4] = "asdf"; // error
is ill-formed since there is no space for the implied trailing '\0'. ]




この投稿にコメントする

削除パスワード

No.30066

Re:C++ で、char foo[2] = "ab"; はエラー?
投稿者---Hermit(2007/04/24 22:52:34)


やはり、エラーでいいんですね、安心しました。

C++ は、OLD C からの拡張だから、
ANSI C で追加された機能までは取り込んでないよね、やはり。


この投稿にコメントする

削除パスワード

No.30067

Re:C++ で、char foo[2] = "ab"; はエラー?
投稿者---YuO(2007/04/25 10:20:42)


>C++ は、OLD C からの拡張だから、
>ANSI C で追加された機能までは取り込んでないよね、やはり。

ISO/IEC 14882:1998はISO/IEC 9899:1995 (当時の標準C) を参照していて,当時の標準Cの機能をほぼ取り込んでいます。
なので,<cwchar>や<cwctype>がちゃんとサポートされていますし,iso646.hの内容は言語仕様に取り込まれています。

ISO/IEC 14882:1998 / Annex C Compatibility / C.1 C++ and ISO C / C.1.6 Clause 8: declarators
の第4段落にこのことが書いてあり,
Rationale: When these nonterminated arrays are manipulated by standard string routines, there is potential for major catastrophe.

が理由となっています。


この投稿にコメントする

削除パスワード

No.30068

Re:C++ で、char foo[2] = "ab"; はエラー?
投稿者---Hermit(2007/04/26 06:42:07)


>
Rationale: When these nonterminated arrays are manipulated by standard string routines, there is potential for major catastrophe.

>が理由となっています。
それで、C++ ではこれがエラーになっているんですか。
やっと理解できた気がします。

ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧