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

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

新規登録して質問してみよう
ただいま回答率
86.12%
VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

解決済

C言語:const修飾子の使い方など

sanshirou
sanshirou

総合スコア6

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

3回答

0リアクション

0クリップ

401閲覧

投稿2022/08/29 03:00

前提

文字列単位で英大文字を小文字に変換する関数を自作しましたが、今一つ自信がありませんのでご助言を賜りたいです。

実現したいこと

文字単位のtolower()関数の文字列版を作るのが目的です。

  • 入力する文字列をconst char *型の引数とする。
  • 出力する文字列をchar *char型の戻り値とする。

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

いろいろstr関係のライブラリ関数の仕様を見ていて、なんとなく引数にconst修飾子をつけたのですが、出力文字列を受けるsoutの初期化でsout = sin;とすると、

異なるconst修飾子です。

という警告が出ました。そこでなんとなく、sout = (char *)sin;とキャストすると、警告なくコンパイルでき、実行結果も問題ありませんでした。
しかし、上記のように「なんとなく」で進んできたので気持ち悪く、今一つ自信がありません。
ポインタを返す関数を自作するのは初めてなので、いろいろ不安です。
オーソドックスというか、エレガントというか、問題のないコーディング流儀をご教授いただきたいです。
よろしくお願いいたします。

該当のソースコード

C

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> /* 文字列単位で英大文字を小文字に変換する関数 */ /* tolower()関数を使用する */ char *tolowerstr(const char *sin); int main(void) { char line[256]; printf("文字列単位で英大文字を小文字に変換します。\n\n"); printf("英文字列を入力してください。\n"); fgets(line, sizeof line, stdin); line[strlen(line) - 1] = '\0'; printf("↓\n"); printf("%s\n", tolowerstr(line)); return EXIT_SUCCESS; } /* 文字列単位で英大文字を小文字に変換する関数 */ /* tolower()関数を使用する */ char *tolowerstr(const char *sin) { int i = 0; char *sout; sout = (char *)sin; while(sin[i]) { sout[i] = tolower(sin[i]); i++; } return sout; }

実行結果

文字列単位で英大文字を小文字に変換します。 英文字列を入力してください。 ABC-Z ↓ abc-z

補足情報(FW/ツールのバージョンなど)

コンパイラ:Visual Studio 2022、OS:Windows10

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。