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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

3回答

1642閲覧

入力した文字列が反転しない

L4zy

総合スコア18

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/04/24 12:40

入力した文字列を、反転させたいんですが、うまくいきません。
なぜなんでしょうか?
メモリは確保入力した文字列+1にしています。

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5// 入力した文字列の反転を表示するプログラム 引数:なし 戻り値:0 メモリの確保失敗-1 6int main() 7{ 8 int i; 9 char input[16]; 10 char *inputHantai; 11 printf("文字列を入力してください:"); 12 scanf("%s", input); 13 // 確保したメモリ(入力した文字列の長さ+1)をcharポインタにキャスト 14 inputHantai = (char*)malloc(sizeof(char)*(strlen(input) + 1)); 15 16 // メモリの確保に失敗したとき 17 if(inputHantai == NULL) 18 { 19 puts("メモリの確保に失敗しました"); 20 return -1; 21 } 22 23 printf("文字列反転:"); 24 25 // 入力文字列の数だけ 26 for(i = strlen(input) - 1; i >= 0; i--) 27 { 28 int j = 0; 29 // 入力文字列反転を代入 30 inputHantai[j] = input[i]; 31 j++; 32 } 33 34 // 結果出力 35 printf("%s", inputHantai); 36 37 // メモリ開放 38 free(inputHantai); 39 return 0; 40}

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

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

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

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

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

y_waiwai

2020/04/24 12:42

うまくいかないとはどうなるんでしょうか
Luke02561

2020/04/24 12:55

実行結果を見せてください
cateye

2020/04/24 16:13

char input[16];としておきながら、あえてmalloc()を使っているのは何故でしょう? char inputHantai[16];ではいけないのでしょうか? また、16文字以上の入力に関してガードしていないのは?(スタック壊しますが?)
guest

回答3

0

C

1 // 入力文字列の数だけ 2 int j = 0; /* for-loop内から移動 */ 3 for (i = strlen(input) - 1; i >= 0; i--) 4 { 5 // 入力文字列反転を代入 6 inputHantai[j] = input[i]; 7 j++; 8 } 9 inputHantai[j] = '\0'; /* 追加 */

投稿2020/04/24 23:38

episteme

総合スコア16614

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

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

0

c

1 // 入力文字列の数だけ 2 for(i = strlen(input) - 1; i >= 0; i--) 3 { 4 int j = 0; 5 // 入力文字列反転を代入 6 inputHantai[j] = input[i]; 7 j++; 8 }

いくらループしても j が増えないのではないでしょうか.

投稿2020/04/24 13:45

jimbe

総合スコア12744

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

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

0

for文の閉じカッコのうしろに、
inputHantai[j]='\0';
をいれておきましょう

投稿2020/04/24 12:44

y_waiwai

総合スコア87800

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

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

L4zy

2020/04/24 12:52

なぜヌル文字を入れる必要があるのでしょうか?
y_waiwai

2020/04/24 12:55

まずやってみてどうなるかみてみれば?
jimbe

2020/04/24 13:48

> なぜヌル文字を入れる必要があるのでしょうか? "入力した文字列の長さ+1" の領域を確保した "+1" とは, 何のためとお考えなのでしょう.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問