合計 昨日 今日

文字列配列の入れ替え

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: danbo12
[URL]
Date: 2017年10月09日(月) 23:06
No: 1
(OFFLINE)

 文字列配列の入れ替え

大学の課題で 入力させたmain関数内で文字列を入力させそれをmystrlen関数内で長さをはかりgyaku関数内でその長さを受け取り、文字列の順番を逆にしたものを新しい配列にいれ、main関数内で表示するプログラムを作っています。
 一通り作ってみて実行してみたのですが
 文字列入力:aiueo

 フuフiフ
 終了するには(ry
とエラー警告のポップアップでvariable 'r' was corrupted

となってしまいます。自分でも調べてみたのですが解決方法がわかりません。
環境はwindowsでVSを使っています。
原因を教えていただけないでしょうか?
以下にコードをはります。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>
int mystrlen(char[]);
void gyaku(char s[], char f[]);
int main(void)
{
    char s[100];
    char r[100];
 
    printf("文字列入力:");
    scanf("%s", &s);
 
    gyaku(s,r);
 
    printf("%s\n",r);
 
    return 0;
}
 
void gyaku(char s[], char f[]) {
    int n,i = 0;
    n = mystrlen(s);
 
 
    for ( i = n - 1; i >= 0; i--) {
        f[(n - i) - i] = s[i];
    }
    f[n] = '\0';
 
    printf("\n");
}
 
int mystrlen(char s[]) {
    int i = 0;
 
    while (s[i] != '\0')
    {
        i++;
    }
    return i;
}





 

Name: danbo12
[URL]
Date: 2017年10月09日(月) 23:07
No: 2
(OFFLINE)

 Re: 文字列配列の入れ替え

申し訳ござません。 文頭の入力させたmain関数~は誤表記です。ただしくはmain関数~です

Name: みけCAT
[URL]
伝説なるハッカー(677,649 ポイント)
Date: 2017年10月09日(月) 23:19
No: 3
(ONLINE)

 Re: 文字列配列の入れ替え

danbo12 さんが書きました:原因を教えていただけないでしょうか?

バグによりデータを書き込む位置がおかしくなっているからですね。

danbo12 さんが書きました:解決方法がわかりません。

コード[C++]: 全て選択
1
        f[(n - i) - i] = s[i];

コード[C++]: 全て選択
1
        f[(n - 1) - i] = s[i];
にすると改善しそうです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: みけCAT
[URL]
伝説なるハッカー(677,649 ポイント)
Date: 2017年10月09日(月) 23:22
No: 4
(ONLINE)

 Re: 文字列配列の入れ替え

danbo12 さんが書きました:
コード[C++]: 全て選択
1
    scanf("%s", &s);

scanfの書式%sにはchar*型のデータを渡さないといけないのに、char(*)[100]型のデータを渡しているので、未定義動作になります。
未定義動作になると、何がおこってもおかしくありません。
正しくは
コード[C++]: 全て選択
1
    scanf("%s", s);
です。
バッファオーバーフローしないように入力の最大文字数を書式で指定したり、
入力が正しく読み込めたか戻り値でチェックするようにすると、さらによくなるでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: danbo12
[URL]
Date: 2017年10月09日(月) 23:44
No: 5
(OFFLINE)

 Re: 文字列配列の入れ替え

[解決!]

みけCAT様にご指摘頂いたところを直したところ、無事実行成功いたしました!ありがとうございます。 自分でもわかる範囲の間違いだったので気づけなかったの不思議です。。 コメントにあったとおりエラーの原因を探れるよう、ところどころにエラーチェックをいれるのを心がけて今後は書いていこうとおもいます。
ほんとにありがとうございました!


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[16人]