改行を含んだ文字列の宣言について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
masaorz

改行を含んだ文字列の宣言について

#1

投稿記事 by masaorz » 9年前

閲覧して下り有難うございます。
私は4月から大学でc言語学習している初学者で、今、適当な英文にある操作を加える課題に取り組んでいます。

そしてこの課題を取り組む上で、改行を含んだ文字列の宣言をしたいのですが、そもそも出来ないのではないかと思い質問させてもらいました。

以下の様なコード(文字列は簡略化のため一文にしています。)を書いたのですが、コンパイルするとエラーが出ます。

コード:

#include<stdio.h>
#include <string.h>

main(){
  char* text={"But most reincarnation literature
 is poorly informed, highly speculative, superficial, and inconclusive."};
}
そして以下のように文字列中の改行を削除してコンパイルするとエラーは出なくなります。

コード:

#include<stdio.h>
#include <string.h>

main(){
  char* text={"But most reincarnation literature is poorly informed, highly speculative, superficial, and inconclusive."};
}
この段階で改行を含むことは難しいと判断したのですが、解決方法(改行を含んだ文字列を宣言する方法)はありますでしょうか?
詳しい方、ご教授ください。

Rittai_3D
記事: 525
登録日時: 11年前

Re: 改行を含んだ文字列の宣言について

#2

投稿記事 by Rittai_3D » 9年前

コード:

char* text =
 {
   "abcdefg"// ,(カンマ)を入れない
   "hijklmn"
};
としてみてはいかがでしょう

#追記
すいません。改行のことをすっかり忘れていました。

コード:

char* text =
 {
   "abcdefg¥n"
   "hijklmn"
};
ですね。
最後に編集したユーザー Rittai_3D on 2014年10月13日(月) 15:08 [ 編集 1 回目 ]
初心者です

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 改行を含んだ文字列の宣言について

#3

投稿記事 by みけCAT » 9年前

Perlなどでヒアドキュメントを用いるか、
C言語/C++であれば文末に\を書いてプリプロセッサの機能で1行に結合させるといいかもしれません。

コード:

#include<stdio.h>
#include <string.h>
 
main(){
  char* text={"But most reincarnation literature\n\
 is poorly informed, highly speculative, superficial, and inconclusive."};
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: 改行を含んだ文字列の宣言について

#4

投稿記事 by box » 9年前

別の回答者さんの回答は、結局
"abcdefghijklmn"
と同じです。行を変えたからといって、勝手に改行を入れてはくれません。

コード:

#include <stdio.h>

int main(void)
{
    char *text = "But most reincarnation literature\n"
                 " is poorly informed, highly speculative, superficial, and inconclusive.";

    printf("%s\n", text);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 改行を含んだ文字列の宣言について

#5

投稿記事 by softya(ソフト屋) » 9年前

みなさん言葉足らずのようなので補足します。
C言語など大抵のプログラミング言語では、文字列として改行の情報を持つ場合は特殊な文字コードを使います。
エスケープシーケンスと呼ばれるモノで記述するのですが、C言語の教科書・参考書には必ず書かれていると思います。
改行の場合は、

コード:

"\n"
が改行を意味します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

masaorz

Re: 改行を含んだ文字列の宣言について

#6

投稿記事 by masaorz » 9年前

返信して下さり有難うございます。
このような掲示板を利用するのは初めてで、こんなにも早くたくさんの返信が受け取れると思っていなかったので、嬉しいです。

改行を含んだ英文をコピーアンドペーストしただけでは宣言できず、
「"」で囲んだり、「\n\」を一文一文に付け加える操作が必要ということで納得しました。

迅速な返信、本当に有難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る