[過去ログ] Qiita 2 - キータぞ、来たぞ、キータだぞー (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
81
(4): 2022/09/18(日)13:11 ID:Yf5HDNqR(1/9) AAS
『【C】初めてのC言語(17. 文字列リテラル)』の表題で

> 文字列リテラルの機能
> ・ダブルクォーテーションで囲まれた文字列(文字列リテラル)は、
>  自動的に末尾に「\0」を付ける処理が入っています。
>  ・ダブルクォーテーションを使わず、char型の配列として文字列を
>   作る場合は終端文字として「\0」を入れます。

と書いてるのは文字列リテラルとcharの配列とcharの配列に文字列リテラル
省13
82: 2022/09/18(日)13:15 ID:Yf5HDNqR(2/9) AAS
> ・そのため以下の例では、memcpyによるコピー先(※ここではstr1)で
>  確保されているメモリ領域を確認しておく必要があります。
>
>#include <stdio.h>
>
> int main(void){
>   char str1[] = "Hello";
省5
83: 2022/09/18(日)13:22 ID:Yf5HDNqR(3/9) AAS
同じ人の別の記事

『【C】初めてのC言語(19. 文字列とバッファオーバーフロー)』
外部リンク:qiita.com
> 終端文字とバッファオーバーフロー(オーバーラン)
> 以下のように終端文字「\0」を上書きしてしまうと、printf関数は「\0」が
> 現れるまで探し続けることになります。
> そのため、配列として確保していない領域(※100バイト目以降)にもアクセス
省13
86
(1): 2022/09/18(日)13:44 ID:Yf5HDNqR(4/9) AAS
『【C】初めてのC言語(16. 文字列の基本)』
外部リンク:qiita.com
> 文字列にまつわる業界ルール
> ・「C言語の文字列に関する業界ルール」として、以下の2つのルールが
>  挙げられていました。
>  ・先頭要素から順に1文字ずつ文字コードを格納して文字列を表す。
>  ・最後の文字の直後には「文字コード0の文字」を必ず格納し、それ以降の
省20
91
(1): 2022/09/18(日)18:29 ID:Yf5HDNqR(5/9) AAS
>>87
> '\0'がないとprintf("%s\n", str) では文字列の終わりを見つけらない

>>90
> 0を入れなきゃいけないルールはあるぞw
> 文字列リテラルを使えば必ず入る
>
> 間違ってるのは記事主じゃなくお前だよw
省9
93
(1): 2022/09/18(日)20:05 ID:Yf5HDNqR(6/9) AAS
> > '\0'がないとprintf("%s\n", str) では文字列の終わりを見つけらない
>
> と書かれてるのに
> printf("%s\n", str); → printf("%.5s\n", str);
> と勝手に変えてるし説明もない

'\0'で文字列の終端明示する必要はないし説明要る人は想定してないけど
説明要るの??
94
(1): 2022/09/18(日)20:13 ID:Yf5HDNqR(7/9) AAS
>>92
勝手に変えてる>>88の説明はあるのかな
96: 2022/09/18(日)20:57 ID:Yf5HDNqR(8/9) AAS
> >>81で引用されてるところは、
>
> const char str[5] = "Hello"; とすると、最後に'\0'が入らないから
> 入ってると思ってprintf("%s\n", str);を使うとうまくいかない
>
> という話だからprintf("%.5s\n", str);に変えてはどうしようもないんだが
> ID:Yf5HDNqRには理解できないんだな
省8
97: 2022/09/18(日)21:04 ID:Yf5HDNqR(9/9) AAS
>   const char str[5] = "Hello";

が正しいか正しくないかというとC言語的には正しい。
このオブジェクトについて文字列終端に'\0'があることを期待するのが間違いなだけ。
文字列リテラルの話ではないのでそう題するのも間違い。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s