- ベストアンサー
文字列を大文字にするプログラムがわかりません。
小文字を大文字に、大文字はそのまま、それ以外は表示しないプログラムなんですが、 「それ以外を表示しない」というところが書けません。 #include <stdio.h> int main(void) { char x; char *p; puts("文字列を入力"); scanf("%s", &n); for(p = &n; *p != '\0'; p++){ if(*p >= 'a' && *p <= 'z'){ *p = *p - 'a' + 'A'; } } printf("%s\n", &n); return 0; } これではもちろん数字などはそのまま表示されてしまいます。 しかも、4文字までは普通に大文字で表示されるんですが 6文字だとcoredumpedしてしまいます。 すいませんが、ソース書いて教えていただけると嬉しいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#敢えてコード提示はしません。 4文字でも動いてるのが不思議なコードです。 nは一文字分のメモリしか持っていないので、scanf()のところで以降のメモリを破壊しています。 #コアダンプの理由はまず間違いなくこれ まずはnをchar配列にしましょう。 ただし、もちろん配列の要素数以上にscanf()で入力すれば同じようにコアダンプします。 で、肝心の部分ですが。 printf()で一括にしなければならない理由があるのでなければ、判定に引っかかった時点で一文字ずつ表示するのが楽でしょう。 一括表示しなければならないのなら、元の文字列を直接書き換えるのではなく結果出力用のバッファを作りましょう。
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
変数nを定義していないため、提示のコードはコンパイルできません。 実行時にコアダンプしていてもいいですから、さしあたってはコンパイルが通るコードを見せてください。
補足
すいません。 char x; じゃなくて char n; でした。
お礼
わかりやすく回答していただき、ありがとうございました。