質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

2765閲覧

文字配列を全て大文字にする C言語

Savanof

総合スコア33

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/05/09 03:19

前提・実現したいこと

与えられた文字列の配列を全て大文字に書き換えるコードを書きたいと思っています。この要件で実装するにあたり、以下のワークフローでの実装を考えています。
0. main関数内で、fgets()関数でキーボードからの入力を受け取る

  1. 自分で定義した関数に受け取った文字列配列を渡す
  2. 自分で定義した関数内で、toupper()関数を使用して、for文で一文字ずつ文字を大文字に変換する。
  3. 戻り値を受けとって、全部大文字になってた文字列を表示する。

実装にあたって躓いている所

・エラーメッセージを読んでみた所、自分の定義した関数の戻り値、ポインターの処理でバグが起きてるいるようなのですが、どのようにすればエラーメッセージを取り除けるか分からないです。
・文字列をfor文でループさせる際に、for (初期化;条件式;変化式)というような文法で書く必要があると思うのですが、どの様に書けば、文字列を1文字ずつ取り出してtoupper()関数を適用させれば良いのか分らないです。

発生している問題・エラーメッセージ

PS C:\Users\> gcc -o test .\Assighment.c .\Assighment.c: In function 'ConvertString_Upper': .\Assighment.c:16:12: warning: return makes integer from pointer without a cast [-Wint-conversion] return STRING; ^~~~~~ .\Assighment.c: In function 'main': .\Assighment.c:33:10: error: assignment to expression with array type str1 = ConvertString_Upper(str1);

該当のソースコード

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <ctype.h> 5#define MAXLINE 256 6 7 8 9char ConvertString_Upper(char STRING[]){ 10 11 char *STRING_pointer; 12 13 STRING_pointer = STRING; 14 15 for(STRING_pointer; *STRING_pointer; STRING_pointer++){ 16 *STRING_pointer = toupper(*STRING_pointer); 17 18 } 19 20 return STRING; 21 22} 23 24 25 26int main(){ 27 28 char str1[MAXLINE]; 29 30 printf("EnterTHeString\n"); 31 fgets(str1,MAXLINE,stdin); 32 33 str1 = ConvertString_Upper(str1); 34 35 return(0); 36 37}

お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ぱっと見て気付いたことだけ。

ConvertString_Upperの型がcharになっています。
char *でなければならないと思います。

str1 = str1 は配列なので=の左辺値にはできません。

投稿2021/05/09 03:34

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Savanof

2021/05/09 08:42

回答ありがとうございます! 一点目に関しては、確かにそうですね... 二点目に関しては、元々のstr1の変数を動的に書き替えるという事を意図していたんですけど、C言語の仕様だとできないんですね、初めて知りました。
guest

0

ベストアンサー

C

1#include <stdio.h> 2#include <ctype.h> 3#define MAXLINE 256 4 5void ConvertString_Upper(char STRING[]) { 6 char* STRING_pointer; 7 for (STRING_pointer = STRING; *STRING_pointer; STRING_pointer++) { 8 *STRING_pointer = toupper(*STRING_pointer); 9 } 10} 11 12int main() { 13 char str1[MAXLINE]; 14 15 printf("EnterTHeString\n"); 16 fgets(str1, MAXLINE, stdin); 17 18 ConvertString_Upper(str1); 19 puts(str1); 20 21 return(0); 22}

投稿2021/05/09 03:32

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Savanof

2021/05/09 08:46

回答ありがとうございます。 多分、ポインターと関数周りの処理が分かってないので調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問