1

ポインターを使用して文字列を逆にしようとしています。DCBA を取得する代わりに、逆の文字列を出力しようとすると、BA としてのみ出力されますか?これについて誰か助けてもらえますか?

#include<stdio.h>
void reverse(char *);
void main()
{
  char str[5] = "ABCD";
  reverse(str);
}

void reverse(char *str)
{
  char *rev_str = str;
  char temp;
  while(*str)
      str++;
  --str;

  while(rev_str < str)
  {
      temp = *rev_str;
      *rev_str = *str;
      *str = temp;   
      rev_str++;      
      str--;
  }
  printf("reversed string is %s",str);
}
4

2 に答える 2

2

文字列の先頭へのポインターを失っているため、最初の文字を指していないため、印刷すると最初の文字から開始していませんstr。文字列の先頭へのポインターを保持するために、プレースホルダー変数を入れるだけです。

void reverse(char *str)
{
  char *begin = str; /* Keeps a pointer to the beginning of str */
  char *rev_str = str;
  char temp;
  while(*str)
      str++;
  --str;

  while(rev_str < str)
  {
      temp = *rev_str;
      *rev_str = *str;
      *str = temp;   
      rev_str++;      
      str--;
  }
  printf("reversed string is %s\n", begin);
}
于 2012-04-24T17:04:12.950 に答える