ページ 11

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

Posted: 2014年10月13日(月) 12:39
by masaorz
閲覧して下り有難うございます。
私は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."};
}
この段階で改行を含むことは難しいと判断したのですが、解決方法(改行を含んだ文字列を宣言する方法)はありますでしょうか?
詳しい方、ご教授ください。

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

Posted: 2014年10月13日(月) 12:52
by Rittai_3D

コード:

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

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

コード:

char* text =
 {
   "abcdefg¥n"
   "hijklmn"
};
ですね。

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

Posted: 2014年10月13日(月) 12:57
by みけCAT
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."};
}

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

Posted: 2014年10月13日(月) 12:58
by box
別の回答者さんの回答は、結局
"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;
}

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

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

コード:

"\n"
が改行を意味します。

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

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

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

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