0

char *charheap;ヒープに長さ 32 バイトの配列 () を作成し、すべての要素を に初期化します\0。これが私の主な機能です:

int main(void) {
   char *str1 = alloc_and_print(5,  "hello");
   char *str2 = alloc_and_print(5,  "brian");
 }

 char *alloc_and_print(int s, const char *cpy) {
   char *ncb = char_alloc(s);// allocate the next contiguous block
   if (ret == NULL) {
    printf("Failed\n");
   } else {
    strcpy(ncb, cpy);
    arr_print();// print the array
  }
  return ncb;
 }

これが私が実装するものです:

/char_alloc(s): find the FIRST contiguous block of s+1 NULL ('\0') 
characters in charheap that does not contain the NULL terminator
of some previously allocated string./

char *char_alloc(int s) {
 int len = strlen(charheap);
  for (int i = 0; i < len; i++) {
  if (charheap[0] == '\0') {
   char a = charheap[0];
   return &a;
 } else if (charheap[i] == '\0') {
   char b = charheap[i+1];
   return &b;
  }
 }
 return NULL;
}

期待される出力: (\を意味する\0)

hello\\\\\\\\\\\\\\\\\\\\\\\\\\\
hello\brian\\\\\\\\\\\\\\\\\\\\\

この解決策は完全に間違っており、2つ失敗しました。:(

実際には、char_alloc連続したブロックの先頭へのポインターを返す必要がありますが、適切に実装する方法がわかりません。誰かが私にヒントや手がかりを与えることができますか?

4

1 に答える 1