質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1122閲覧

charポインタで初期化した文字列のサイズについて

torimingo

総合スコア123

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2020/01/18 11:48

charポインタで初期化した文字列のサイズについてわからないことがあります。
コードを以下に示します。

c

1#include <stdio.h> 2#include <string.h> 3 4int main() 5{ 6 char* str1 = "string"; 7 printf("%ld\n", sizeof(str1)); // 8 8 9 char str2[] = "string"; 10 printf("%ld\n", sizeof(str2)); // 7 11 12 return 0; 13}

str2のサイズが7になるのは、終端文字があるからだと思うのですが、str1のサイズが8になる理由がわかりません。
ご教授頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

sizeof(str1)は、ポインタのサイズとなります。

#文字列のサイズは関係ない

投稿2020/01/18 11:53

y_waiwai

総合スコア88163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2020/01/18 12:04

ご回答をありがとうございました。 sizeof(str2)は、char型ではなく、charの配列型?として評価されるのでしょうか。
y_waiwai

2020/01/18 12:13

そうですね。 sizeofは対象が占めるサイズを表す、と考えてください 配列や構造体はそのサイズを返します
guest

0

ご利用の環境では、charポインタのサイズが8バイトなのでしょう。
文字数は一切関係ありませんので、別の文字列でも試してみて下さい。

投稿2020/01/18 11:53

LouiS0616

総合スコア35676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2020/01/18 12:09

ご回答をありがとうございました。 私の環境は64bitとなりますので、たしかに、charのポインタのサイズ(アドレスのサイズ)は8バイトになると思われます。 (同様の回答を頂いた方の投稿時間が早かったので、そちらの方をベストアンサーとさせて頂きました。。)
LouiS0616

2020/01/18 12:19

配列変数をsizeofのオペランドにした場合、配列全体のサイズを返します。 sizeof(char)は常に1であることが規格で保証されているので、文字列全体にぴったりとフィットする配列arrについてsizeof(arr)は文字数+1になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問