
No.3ベストアンサー
- 回答日時:
>結果的に処理により文字コードになる1バイトの数値をcharにより扱えるわけでしょうか?
その通りですね。
データを文字として扱うかどうかは、プログラムを組む側の都合に委ねられるので、
char s1[] = "ABCDE";
と
char s1[] = { 0x41,0x42,0x43,0x44,0x45,0x00 };
は同じ内容になります。※16進数で0x41は文字コード'A'
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
なるほど、同じ数値でも、intなら値として、charならば1文字ならば結果的に1文字の文字コードになる1バイトの値を、文字列ならば結果的に文字列になる文字コードになる何バイトの値として取り扱うとわかりました。
No.2
- 回答日時:
>char*で文字列や文字の入るメモリの最初のアドレスを定義し、charは一文字の文字コードを扱うのでしょうか?
厳密には、1バイトで表わせる数値(符号付きなら-128~+127)が扱えます。
半角文字は1バイトなので、その認識で大丈夫です。
実際にプログラムを動かして体感するとより理解が深まるでしょう。
ありがとうございます。
では、文字はcharにより、文字コードの数値ではなく、1バイトで表す数値で扱えるわけですね。
って事は文字コードそのものを扱う事はできないため、結果的に処理により文字コードになる1バイトの数値をcharにより扱えるわけでしょうか?
No.1
- 回答日時:
constの有り無しは、上書き出来るか否かに関わってきます。
constを付けることによって、上書き出来なくなります(中身の変更不可)。
(例1)
const char s1[] = "ABCDE";
s1[0] = 'a'; // 上書き出来ないので、コンパイルエラーになります。
(例2)
char s1[] = "ABCDE";
s1[0] = 'a'; // 1文字目を'A'→'a'に書き換え(正常に動作します)
(例3)
char str[] = "ABCDE";
const char* s1;
s1 = str;
*s1 = 'a'; // 上書き出来ないので、コンパイルエラーになります。
パソコンで実行する場合はプログラムとデータは全てRAMに展開されるのですが、
組み込み機器(例えばプリンタのファームウェア等)ではプログラムとデータはROMに焼かれています。
constで宣言した文字列はROM上のアドレスを指すことになるので、当然書き込みできません(読み出しのみ)。
const無しならRAMにコピーした文字列のアドレスを指しますので、書き換え可能です。
<参考>
https://www.hiramine.com/programming/c_cpp/const …
ありがとうございます。
ちなみに、char*で文字列や文字の入るメモリの最初のアドレスを定義し、charは一文字の文字コードを扱うのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- Visual Basic(VBA) 該当セルに行替えを含むデータを命令文に入れて、2行に表示したい。 5 2023/07/20 11:51
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
動的に配列を確保した時の操作...
-
strtok
-
文字列配列を動的に割り当てる...
-
C言語でポインターで詰まってい...
-
簡易版smtpクライアント(メール...
-
ファイル読込時に構造体の文字...
-
可変長構造体をファイルから読...
-
C言語での質問です。
-
カンマで区切った文字の抽出に...
-
ポインタ
-
教えて下さい。
-
ポインタについての質問です。
-
配列の動的確保
-
配列を返す
-
c言語でポインタ変数を用いた配...
-
ポインタを使って回文かどうか...
-
C言語 strstrの実装
-
C言語にて構造体のメンバがNULL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
char型にint型の数値を代入する。
-
C言語にて構造体のメンバがNULL...
-
fgetc( )の戻り値はなぜ整数??
-
char 文字列型 の表現範囲が-12...
-
fstream型オブジェクトを関数の...
-
C++17で、unsigned char * 配列...
-
DWORDとcharの変換
-
文字列内の数字削除
-
new charとnew char[N]の違いは?
-
文字型配列に格納した空白の切捨て
-
C++Builder 2009 テキスト...
-
csvファイルをfscanfで読み込む...
-
文字列の途中から途中までを抽出
-
[C] 構造体メンバーのカンマ区...
-
エクセルのMID関数は、C言語では?
-
小数点入りの文字列をfloat型に...
-
wsprintf( ポインタ , "%d" , "...
おすすめ情報