• 締切済み

[c言語] 大きな文字列の入力

scanfやfgetsで入力を使用としても4000文字程度までしか受け取らないのですが それ以上の長さの文字列を受け取りたい場合はどうすればいいでしょうか? よろしくお願いします

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>char str[10001] static char str[10001]; と定義したらどうなりますか?

momisukechan
質問者

お礼

返答ありがとうございます。 staticを付けても変わらないです ただ単に char str[10001]="1万文字~~~~~~略"; のようにscanfなどの入力を使わないで出力するだけなら1万文字は出力されます 該当のコードを提出したところ問題はなかったので提出先の環境では1万文字を受け取り処理したようです。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

>scanfやfgetsで入力 入力先の配列のサイズは?

momisukechan
質問者

お礼

回答ありがとうございます char str[10001]で10000文字もしくは5000文字の入力をすると4094文字 fgetsの場合は4095文字を受け取ってるように見えます 調べた結果どうも自分の環境が原因みたいなのですがどこを見ればよいのかわかりません 環境はWindows Mingw? VScodeです 入出力はPSとなってるのでおそらくPowerShellだと思います 設定方法などご存知であればよろしくお願いします

momisukechan
質問者

補足

C++のstringも4000文字程度までしか受け取らないです

関連するQ&A

  • fgetsを使って入力した文字列を読み込む。

    こんにちは。私は30代の男性です。 上司から、「C言語でコーディングする際にscanfは使わずにfgetsを使うように」との指示があったのですが、scanfしか使ったことがないので、具体的にどうコーディングすればいいのかわかりませんでした(聞いても教えてもくれず…)。どのようにすればfgetsを使って入力した文字列を読み取れるのか、わかる方がいらっしゃれば簡単な例文で教えて頂けるとありがたいのですが。 どうぞ宜しくお願い致します。

  • c言語 文字列の比較

    ファイルから読み込んだ文字列と入力した文字列を比較して同じなら次の処理を行いたいんですが、入力が例えば同じ1212でもstrcmp()で181がかえってきます。原因は何なのでしょうか? #define BUFMAX=45;  char smsg[BUFMAX];  char pass[BUFMAX];  printf("pass=%s\n",pass); printf("smsg=%s\n",smsg); c=smsg; stc=strcmp(pass,c); passにはscanfで1212を読み込みます。 smsgにはfgetsでファイルから一行読み込みます。 テキストのなかみは1212が一行はいっています。 自分では全く見当がつかないので、回答していただける方がいれば、ヒントでもいいのでお願いします。

  • c言語のポインタへの文字列入力についてです。

    当方c言語初学者なのですがscanfを使ってポインタに文字列を入力したいのですがバグが発生して進みません・・・どういうことなのでしょうか? #include <stdio.h> int main(void) { char *a; scanf("%s", a); printf("%s", a); return (0); } *aをa[128]; のように配列に変えるとうまくいくことはなんとかわかるのですが・・・助けてください(^_^;)

  • 文字列の入力について

    http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H11b2/pm11.html このプログラムを完成させたいのですが、 例えば、「abc dfg hij ・・・」とscanfで文字列入力した場合、空白以降(スペース)が読み取れません。 (「abc」しか読み取れません) スペース以降の文字列もキーボード入力できるようにするにはどうしたらいいのでしょうか?

  • 標準入力の際に、、、fgets

    標準入力の際にgetsやscanfは読み込むバイト数を指定できないので危険、 fgetsを使えという話を良く聞きますが、fgetsだと改行まで読み込んで しまいますよね。これで少し困っています。 読み込んだ文字列から'\n'を探して'\0'を代入することはできますが 面倒くさいです。もっと手軽にscanfのように改行を含めずに 標準入力から受け付けるのをfgetsなどではどうやればいいのでしょうか。 よろしくお願いいたします。

  • C言語の文字列について教えてください。

    2つの文字列を入力後、それらを比較して、前者の文字列の中から後者の文字列に該当する箇所を削除するコードはどうなるのでしょうか? たとえば、前者の文字列が"abacbat"で、後者の文字列が"bac"だった場合、前者の"bac"の部分が削除されて、"abat"と出力されるようにしたいのです。

  • 文字列の入力

    文字列(名前)と誕生日を読み込み、表示するプログラムです。文字列を読み込むときに空行を入力すると、読み込みを終了して表示するようにしたのですが、うまくいきません。読み込む時に使う関数が違うのだと思います。scanfとgets、fgetsは試したのですが、だめでした。 教えてください。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DATA 3 int main() { char *name[DATA]; char work[31]; int month[DATA]; int day[DATA]; int count1,count2; printf("Data #1\n"); printf("name ="); fgets(work,31,stdin); for(count1=0;(work[0]!='\n')&&(count1<DATA);count1++){ printf("month ="); scanf("%d",&month[count1]); printf("day ="); scanf("%d",&day[count1]); name[count1]=(char *)malloc((strlen(work)+1)*sizeof(char)); strcpy(*(name+count1),work); printf("\n"); if(count1<DATA-1){ printf("Data #%d\n",count1+2); printf("name ="); fgets(work,31,stdin); } } for(count2=0;(count2<DATA)&&(count2<count1);count2++){ printf("Data #%d\n",count2+1); printf(" name: %s\n",*(name+count2)); printf(" birthday: %2d %2d\n",month[count2],day[count2]); } }

  • C言語でプログラミング。(文字を置き換えるやり方)

    scanfなどで入力した文字列(アルファベット)の中にある特定の文字を違う文字に置き換えるようなプログラムってどのように作ったらよいのでしょうか?? 例えば、(sという文字をtと言う文字に変える・・・sound→tound)などのように、入力した文字を置き換えて、もう一度表示するようにするには、どうしたらよいのでしょうか? 関数を使ってプログラムを作りたいと思っているのですが・・・ なにかヒントなどがあったらお願いします。

  • C言語 strlen 再入力を促す

    文字列の比較で、 文字列の長さが60以上の時、再入力を促します。 while文を使って書いてみたのですが、 文字列Bの入力の前に、もう一度意味もなく 「文字列Aを入力===>」が表示されたり。 文字列Aのほうが小さいのに「Aのほうが大きい」と 表示されるようになったり、変な感じです。 どなたかご指摘・ご指導のほどよろしくお願いします。 int main(void) { char moji1[100]; char moji2[100]; while(strlen(moji1)>60){     printf("文字列Aを入力===>"); scanf("%80s" ,moji1); } while(strlen(moji2)>60){     printf("文字列Bを入力===>"); scanf("%80s" ,moji2);    } if(compare(moji1,moji2)>0){ printf("===AはBより大きい===\n"); } else if(compare(moji1, moji2)<0){ printf("===AはBより小さい===\n"); } else if(compare(moji1, moji2)==0){ printf("===AとBは等しい===\n"); } return 0; } int compare(char *x, char*y) { while(*x==*y && *x!=0){ x++; y++; } return (*x-*y); }

  • C言語の文字列に関する質問です。(初心者です)

    文字列の文字を削除するにはどのようなアルゴリズムで考えればいいのでしょうか。 例えば文字列を入力した後、文字を入力し、その文字を文字列から削除するプログラムを作る場合、どのような処理でこれを実現できますか?

専門家に質問してみよう