Copying and initializing using mem* functions

Copying and initializing using mem* functions#

Copying#

Activity 51 (Copying using mem*)

  1. In section Copying an array for passing-by-value we copied an array using a for loop. Which character array manipulation (mem*) function could be useful?

  2. Convert the following code.

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

#define WIDTH 5

typedef enum { EMPTY, SENTENCE, PHOTO, BOTH } collage_t[WIDTH];

collage_t collage;

/**
 * Wants only to write something on the first empty slot
 */
void sentence_friend(collage_t collage) {
  for (size_t col = 0; col < WIDTH; ++col)
    if (collage[col] == EMPTY) {
      collage[col] = SENTENCE;
      return;
    }
}

/**
 * picks a random place and puts both a sentence and a photo.
 */
void creative_friend(collage_t collage) {
  for (size_t tries = 0; tries < WIDTH; ++tries) {
    size_t col = rand() % WIDTH;
    if (collage[col] == EMPTY) {
      collage[col] = BOTH;
      return;
    }
  }
}

/**
 * Careless friend just overwrites
 */
void careless_friend(collage_t collage) { collage[rand() % WIDTH] = PHOTO; }

int main() {
  // FOR DEMO: use debugger to visualize the changes

  sentence_friend(collage);
  creative_friend(collage);

  // You copy the collage for the careless friend
  collage_t collage_copy;

  for (size_t col = 0; col < WIDTH; ++col)
    collage_copy[col] = collage[col];

  careless_friend(collage_copy);

  // Then you merge the collage_copy into the collage.
}

Initializing#

Activity 52 (Initializing using mem*)

  1. Imagine you want to give an empty collage to another friend, but you want to reuse collage_copy. Which mem* function would you use.

  2. Add it to the code above and test its effect using the debugger.