C言語で、文字列を空白で区切り、数字の配列で返す以下のような関数を書きました。しかし、この書き方だとSegmentation faultしてしまいます。なぜでしょう?

void putupNums(char* str, int* result) {
  char buff[80];
  int i = 0;
  strcpy(buff, strtok(str, " "));
  for(i = 0; (i < 2) && (buff != NULL); ++i) {
    result[i] = atoi(buff);
    strcpy(buff, strtok(NULL, " "));
  }
}

buffをポインタ変数にし、strtokから代入するようにすれば問題は解決するのですが、この実装でどうして動作しないのでしょうか。