こういうのダブルアナル使わないとうまくいかないじゃん。

#include <stdio.h>

void set_str(char* str) {
  str = (char*)malloc(100);
  strcpy(str, "abc");
}

int main(int argc, char **argv) {
  char* str = NULL;
  set_str(str);
  printf("%s\n", str);
  return 0;
}