0

いくつかのインタビューの質問を閲覧していたところ、ポインターを使用して文字列を反転するこのコードを見つけました。しかし、ここでは、文字列の長さを制限する char string[100] が定義されていることがわかります。私は C があまり得意ではありません。同じものを変更して任意の長さの文字列にするにはどうすればよいですか?

#include<stdio.h>

int string_length(char*);
void reverse(char*);

main() 
{
   char string[100];

   printf("Enter a string\n");
   gets(string);

   reverse(string);

   printf("Reverse of entered string is \"%s\".\n", string);

   return 0;
}

void reverse(char *string) 
{
   int length, c;
   char *begin, *end, temp;

   length = string_length(string);

   begin = string;
   end = string;

   for ( c = 0 ; c < ( length - 1 ) ; c++ )
      end++;

   for ( c = 0 ; c < length/2 ; c++ ) 
   {        
      temp = *end;
      *end = *begin;
      *begin = temp;

      begin++;
      end--;
   }
}

int string_length(char *pointer)
{
   int c = 0;

   while( *(pointer+c) != '\0' )
      c++;

   return c;
}
4

3 に答える 3

1

静的配列の代わりに動的メモリ割り当てを使用します。char *tab = malloc(n * sizeof(char))ここで、n目的の長さを表す変数です。

于 2013-04-19T06:28:20.517 に答える
1

実行時にユーザーがサイズを決定/入力する場合は、この目的で malloc() を使用できます。

malloc()

于 2013-04-19T06:28:29.877 に答える
0

動的メモリ割り当てが解決策です.文字列へのポインタを取得し、メモリを動的に割り当てます..これは実行時に割り当てられます..これで問題が解決します..

char *str;
str = (char*)malloc(n *sizeof(char));

注: C では型キャストはオプションであり、ここでの 'n' は必要な長さです (ユーザー入力にすることができます)。

于 2013-04-19T07:03:32.133 に答える