ここから本文です

VisualStudio C++についてです。 下記のように、const char型の文字列を定義して...

kan********さん

2014/11/1114:34:33

VisualStudio C++についてです。
下記のように、const char型の文字列を定義して他の関数(指定文字列で区切る)で使用したいと思います。

Debugモードではきちんと、char1、char2が取得できていますが、Releaseモードでは上手く取得できません(値が0になる)。
考えられる原因や対策はありますでしょうか?

const char char1='\n';
const char char2=',';

閲覧数:
82
回答数:
4

違反報告

ベストアンサーに選ばれた回答

jak********さん

2014/11/1115:59:23

>const char char1='\n';
>const char char2=',';
これだとchar型の1バイトの変数になります。
「文字列」としては扱えません。
なぜならば、終端文字(NULL文字=\0)がないからです。

その1バイトの次のアドレスには何があるか分かりません。
デバックモード時は変数の後ろに数バイトの空きがあるので問題を回避できますが、
リリースモード時は空きを作りません。

上記の変数を文字列と勘違いして関数に渡すと、
デバックは上手くいくこともありますが、
リリースでは大問題が発生します。
しかも、コンパイル時にエラーが出ないので気付かないこともあると思います

  • jak********さん

    2014/11/1116:09:44

    この場合、文字列にするためには配列にしなければなりません。
    '\n'や','のように文字が1文字であってもNULL文字が必要なわけですから、
    少なくとも2バイトの配列変数にしなければなりません。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/11/12 08:52:58

皆さん、ありがとうございました。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

mer********さん

2014/11/1119:14:37

>下記のように、const char型の文字列を定義して他の関数(指定文字列で区切る)で使用したいと思います。
>Debugモードではきちんと、char1、char2が取得できていますが、Releaseモードでは上手く取得できません(値が0になる)。

まずは完全なソースを示しましょう。
あなたが何をやっているのか、どこがまずいのか、我々にはわかりませんから、憶測でしか回答できません。

プロフィール画像

カテゴリマスター

n2q********さん

2014/11/1117:37:19

書き間違いか誤解なのか判別できませんが、まず「文字」(character)と「文字列」(string)って違うものなんですよね。『const char型の文字列を定義して』とされているのですけれども、そのコードは『文字』です。『文字列』じゃないです。

const char char1='\n';
const char char2=',';

文字列というのは文字の配列です。そして通常、最後に '\0' が置かれる形です。

const char str1[] = {'\n', '\0'};
const char str2[] = {',', '\0'};

こうです。

で、&char1 とか &char2 とかっていう引数を渡してますか?それは &str1[0]、&str2[0] に変えてください。でも、もっと簡単にすることが出来ますよ。ただ、str1、str2 だけで良いのです。先頭要素のアドレスを得る場合は & 記号 と [0] を取り除いても良いことになっていますからね。

なお、上の例は文字の配列だっていう雰囲気を味わってもらうためにあえて書いたものなのですよ。通常は、

const char str1[] = {"\n"};
const char str2[] = {","};

こうすれば OK 。更には、

const char str1[] = "\n";
const char str2[] = ",";

これで良いのです。


なお、『Debugモード』でちゃんと動いたのは偶然です。たまたま運が良かった(あるいは悪かった)ってだけ。慣れていないと時々そういうことが起きてきます。恐いものですよ、C++ っていうのは。でも技術が身に付けば、あまり心配なくなりますよ。そういうことは年に1回も起きません。夥しい数のプログラムを作ってますけど。

頑張って C++ をマスターしてくださいね。

k03********さん

2014/11/1114:38:53

kane_moto11さん

基礎から学ぶ。

1.
文字
const char char1='\n';
const char char2=',';

2.
文字列
const char char1[]="\n";
const char char2[]=",";

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる