アプリ版:「スタンプのみでお礼する」機能のリリースについて

文字を入力して、それを1つ右にずらして出力する問題。
例  aret → tare

関数内でポインタを使用するのが条件です。
ズラしているつもりが、入力した文字がそのまま出力されてしまいます。


自分の方針としては、
関数内で入力された文字の長さを確認。
文字列の最後の文字をtmpに保存して
ドンドン右にずらして保存していく。
最後にtmpに保存したものを、文字列の最初に入れる。
というものです。

わかるかた、ご指導お願いします。

#include<stdio.h>
#include<string.h>

void kaiten(char *t)
{
int len =0;
int i;
char tmp;

while (*t++){
len++;
}
tmp = *(t+(len-1));
for(i=len-1;i>0;i--)
*(t+i)=*(t+i-1);
*t = tmp;

}
int main()
{
char s[100];

printf("文字列を入力:"); scanf("%s",s);

kaiten(s);

printf("一文字ずらすと:%s\n",s);
}

A 回答 (3件)

> while (*t++){ len++; }


ここで t が変わってしまいます。文字列終端+1かな。

その後の処理では
t が入力された文字列の先頭を指している事を期待しているので、
意図した動きになっていないと思われます。
    • good
    • 0
この回答へのお礼

なるほど! 
char *p=t;
と置き換えて、
while(*p++){len++;}

とすることによって解決しました!

ありがとうございました!

お礼日時:2011/03/28 14:13

> while (*t++){



このループを抜けたとき、tは一体どこを指しているでしょう?
バッファが十分すぎる量なのでsegmentation faultにはなっていませんが、これがs[10]とかだとメモリ破壊しますよ。

本来strlenで十分ですし、あくまで計算で行う方針ならt+lenで行わなければ駄目です。
    • good
    • 0

t を変えちゃっていいの?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!