0

了解しました。mallocまたはcalloc動的割り当てに使用できることは知っていますが、CIの初心者として、TC++の例のように複数の入力を入力するために割り当てたメモリの使用方法がわかりません。このコードがあります。

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

int main(void)
{
   char *str;

   /* allocate memory for string */
   if ((str = (char *) malloc(10)) == NULL)
   {
      printf("Not enough memory to allocate buffer\n");
      exit(1);  /* terminate program if out of memory */
   }

   /* copy "Hello" into string */
   strcpy(str, "Hello");
    /* display string */
    printf("String is %s\n", str);
    /* free memory */
   free(str);

   return 0;
}

このように、コードでは、Helloを割り当てたメモリに配置します。これにより、さらに4つの文字スペースが残り、これらのスペースにもデータを追加する必要があります。

ユーザーが入力の数について尋ねられ、10または100と言うと、プログラムがデータを入力して保存し、そのデータを画面に出力するときに、このアイデアを実装したいと思います。

4

2 に答える 2

1

あなたは「ポインタ演算」を探しています。
この例では、10バイトのメモリを割り当て、最初のバイトのアドレスをポインタに格納していますstr
次に、文字列をこのメモリにコピーします"hello"。これにより、使用できる4バイトが残ります("hello"文字列終了文字の場合は5バイト+ 1バイトであるため\0)。
残りの4バイトに何かを格納したい場合は、ポインタ演算を使用してメモリアドレスを計算できます。たとえば、から6番目のバイトにアクセスする場合はstr、を実行しますstr+5。単純。
したがって、例を拡張するには、次のようにします。

strcpy(str, "Hello");
strcpy(str+5, " man");

の出力はprintf("String is %s\n", str);になります"Hello man"

于 2012-11-23T11:35:33.537 に答える
1

malloced文字列に追加する場合は、 strcatを使用します

str = malloc(20);
...
/* copy "Hello" into string */
strcpy(str, "Hello");
strcat(str, ", world!");
/* display string */
printf("String is %s\n", str); /* will print 'Hello, world!' */
于 2012-11-23T12:01:59.687 に答える