

c言語でポインタ変数を用いた配列の反転操作を行いたいのですが、文字列の反転の仕方が分かりません。流れとしては、文字列の長さを調べてから文字列を反転して表示するという感じです。どうか教えてください。また、その他問題点があればご指摘よろしくお願いします。
#include <stdio.h>
int strlength(char *str) { /* 文字列の長さを調べる /*
int length = 0;
while (*str++ != '\0'){
length++;
}
return length;
}
int main(void) { /*配列strSrc[]の文字列を逆にして配列strDst[]に格納する */
char strSrc[] = "reverse this";
char *pC;
char strDst[] = "01234567890123456789";
char *pD;
int length;
printf( "%s\n", strSrc );
/* この部分が分かりません */
printf("%s\n", strDst ) ;
return( 0 );
}
A 回答 (15件中11~15件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>エラーになどなりません。
正しいコードです。失礼しました。
ポインタではなく配列でしたね。ご指摘のとおりです。
>静的に、という言葉の使い方が間違っています。
mallocで「動的に」確保することとの対比で使ってます。
しかし、スタック上に自動的に配置されるのですから、ある意味動的ですね。
正確には、staticを指定してスコープを抜けても保持される場合が「静的」だというのは異論ありません。
>要素数を省略した場合は、右辺で記述した分だけの領域を
>自動的に確保します。つまり、終端の'\0'の分を含めて
これもそのとおりなんですが、質問文にあるstrDstは、データ格納先を確保するために宣言されています。なので、その時点で終端の分を含めるか否かは瑣末だと思いますが?
不正確な回答をした非は私にありますが、本題と関係のない指摘は質問者にも閲覧する人にも不利益となると思います。
No.4
- 回答日時:
>#1さん
もう一つ。
>char strDst[20];
>上記のように静的にサイズを指定するか、
静的に、という言葉の使い方が間違っています。
さらに、
>char strDst[] = "01234567890123456789";
要素数を省略した場合は、右辺で記述した分だけの領域を
自動的に確保します。つまり、終端の'\0'の分を含めて
char strDst[21] = "01234567890123456789";
と書いたのと同じです。
# C言語の基礎的なところが本当にわかっているのだろうか?専門家じゃないでしょ。
No.3
- 回答日時:
>#1さん
>"01234567890123456789"はリテラル文字列です。処理系によっては書込み禁止にする場合があるので、エラーになるかもしれません。
エラーになどなりません。正しいコードです。
char strDst[] = "01234567890123456789";
において、strDstは配列です。したがって、
char strDst[] = {'0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','\0'};
と書いたのと同じ意味です。
質問されているかたをあまり惑わさない方がよいです。
No.2
- 回答日時:
#include <stdio.h>
int strlength(char *str) { /* 文字列の長さを調べる */
int length = 0;
while (*str ++ != '\0'){
length++;
}
return length;
}
int main(void)
{ /*配列strSrc[]の文字列を逆にして配列strDst[]に格納する */
char strSrc[] = "reverse this";
char *pC = strSrc;
char strDst[] = "01234567890123456789";
char *pD = strDst;
int length = strlength(strSrc);
printf( "%s\n", strSrc );
while(length --) *pD ++ = *(pC + length);
*pD = '\0';
printf("%s\n", strDst ) ;
return 0;
}
No.1
- 回答日時:
>int strlength(char *str) { /* 文字列の長さを調べる /*
学習のために実装するのならかまいませんが、そうでなければ標準関数のstrlen()を使いましょう。
あと、最後の/*は*/ですね。
>char strDst[] = "01234567890123456789";
"01234567890123456789"はリテラル文字列です。処理系によっては書込み禁止にする場合があるので、エラーになるかもしれません。
反転したデータを保存する領域をとる場合は、
char strDst[20];
上記のように静的にサイズを指定するか、
char* strDst = malloc(strlen(strDst)+1);
このように動的に領域を取得するか、どちらかを使ってください。
>/* この部分が分かりません */
考え方としては、strSrcの先頭から文字を取り出し、strDstの最後から文字を入れていく、という処理になります。
注意が必要なのは下記の2点です。
1.strDstの領域の最後ではなく、strSrcの文字列サイズの最後
strDst[19]ではなく、strDst[strlen(strDst)-1]です。
2.strSrcの最後には必ず'\0'を入れる
あらかじめstrDst全体を'\0'でクリアするか、strDst[strlen(strDst)]に'\0'をセットする。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char[]をDWORDに格納するには
-
CStringからchar*への型変換に...
-
ポインタを使って回文かどうか...
-
C言語のintとcharの違いってな...
-
Cの関数の引数のconst *charに...
-
文字列str内の全ての数字を...
-
char型にint型の数値を代入する。
-
char*を初期化したいのですが
-
DWORDとcharの変換
-
char 文字列型 の表現範囲が-12...
-
strcat関数を自作したいです
-
fgetsで読み込んだ値のvector処理
-
const char* s1とただのchar s1...
-
文字列strの中から文字cを探す...
-
文字列内の数字削除
-
fstream型オブジェクトを関数の...
-
C++Builder 2009 テキスト...
-
fgetc( )の戻り値はなぜ整数??
-
C言語 配列の長さの上限
-
Integer変数をカラにしたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
char型にint型の数値を代入する。
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
new charとnew char[N]の違いは?
-
char 文字列型 の表現範囲が-12...
-
fgetc( )の戻り値はなぜ整数??
-
fstream型オブジェクトを関数の...
-
DWORDとcharの変換
-
C++17で、unsigned char * 配列...
-
動的メモリの初期化方法について。
-
csvファイルをfscanfで読み込む...
-
入力された文字列の中の数字を...
-
C++Builder 2009 テキスト...
-
小数点入りの文字列をfloat型に...
-
char AA[]{"全角文字"};から"全...
-
文字列str内の全ての数字を...
-
エクセルのMID関数は、C言語では?
-
ポインタ配列
おすすめ情報