• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列中の空白部の読み込みの方法を教えてくださいm(_ _)m)

文字列中の空白部を読み込む方法とプログラムの問題

このQ&Aのポイント
  • 質問者は、キーボードから入力される文字列の空白部分を正しく読み込む方法を知りたいとしています。
  • また、質問者は、現在のプログラムが空白部分で停止してしまう問題についてアドバイスを求めています。
  • 要約文をまとめると、質問者は文字列の空白部分の読み込み方法とプログラムの問題についてアドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • dtyu
  • ベストアンサー率33% (1/3)
回答No.1

scanf()した後のsやmの値を表示してみればいいんじゃないですか。

you-two
質問者

お礼

ありがとうございます。 自分の考えていたエラーがそもそもおかしかったことに気づけました。

その他の回答 (4)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.5

scanf(3)を使った別解です。バッファオーバフローの危険性がある点、文字列の長さがBUFSIZの制限を受ける点でNo.3に劣ります。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include<stdio.h> #include<ctype.h> int main(void){ char buf[BUFSIZ]; char *p; int i; printf("please iput sentens\n"); scanf("%[^\n]", buf); i = 0; for (p = buf; *p != 0; p++) { if (isupper(*p)) i++; } printf("Number of upper char = %d.\n", i); return(0); }

you-two
質問者

補足

No3に引き続きお願いします。 "%[^\n]"とは「文字列として改行まで読み込み」という意味でしょうか?

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.4

fgets(3)を使った別解です。文字列がBUFSIZの長さに制限されている点でNo.3に劣ります。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include<stdio.h> #include<ctype.h> int main(void){ char buf[BUFSIZ]; char *p; int i; printf("please iput sentens\n"); fgets(buf,BUFSIZ,stdin); i = 0; for (p = buf; *p != 0; p++) { if (isupper(*p)) i++; } printf("Number of upper char = %d.\n", i); return(0); }

you-two
質問者

補足

3つも解答を用意していただいてありがとうございます。 失礼ながら私は最近からC言語の勉強を始めたので分からないキーワードが多々あります。。。もしよければ各解答に質問をするので答えて頂けないでしょうか? BUFSIZって何のことでしょうか?別のサイトをみたら「バッファのデフォルト時のサイズ」と書かれていたのですが、そもそもバッファが何かよく分かっていません。。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.3

scanf(3)では空白の前までしか読みませんし、バッファオーバーフローの危険性の問題があります。 数値による大文字の判定はシステム依存性があります。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include<stdio.h> #include<ctype.h> int main(void){ int c; int i; printf("please iput sentens\n"); i = 0; while((c = getchar()) != EOF) { if (c == '\n') break; if (isupper(c)) i++; } printf("Number of upper char is %d.\n", i); return(0); }

you-two
質問者

補足

EOFとは何ですか?別のサイトで見たら「ファイルの終端を示す」と書かれていたのですが、getchar関数は標準入力なのでファイルとは関係ないような。。。

  • smat7
  • ベストアンサー率46% (7/15)
回答No.2

空白の判定というよりsの領域確保に問題があります s=(char*)malloc(sizeof(char)); これではsに割り当てられるのは1バイトしかありません scanfを呼んだ段階でメモリ破壊がおきています 必要とする最大文字数分を,例えば #define MAX_STR 256 なら s=(char*)malloc(sizeof(char)*(MAX_STR+1)); などとして確保してください

you-two
質問者

お礼

ありがとうございます! なるほど動的メモリというだけでただmallocを使えばいいというわけではないんですね。。。勉強になりました!!

関連するQ&A