"Unit" объявлен как локальная переменная внутри NextUnit, которая на самом деле является переменной "стека", что означает, что его время жизни только до тех пор, пока NextUnit не вернется.
Итак, хотя NextUnit еще не вернулся, копирование «somebytes» в него - это нормально, равно как и его распечатка. Как только NextUnit возвращается, Unit освобождается из стека, и указатель somedata в main не будет указывать на что-то допустимое.
Вот быстрое решение. Я до сих пор не рекомендую писать программы таким образом, но это наименьшее количество изменений.
#include <stdio.h>
#include <string.h>
char Unit[256];
char* NextUnit()
{
strcpy(Unit,"somebytes");
return &Unit[0];
}
int main()
{
FILE *ourfile;
ourfile=fopen("output.txt","wb");
char* somedata;
somedata=NextUnit();
printf("%s\n",somedata);
fwrite(somedata,1,strlen(somedata),ourfile);
fclose(ourfile);
}
Это работает, но бессмысленно возвращать адрес модуля, когда он на самом деле глобален!