Found it! Here's the problem. This is what I was doing, essentially:
#define HI_THERE "hi "
#define ID10T "idiot"
data = strcat(HI_THERE, ID10T);
... and the statement, of course, after the preprocessor was done with it, looked like this:
data = strcat("hi ", "idiot");
It was trying to concatenate literals, not string variables. This works:
char data = HI_THERE;
char data2 = ID10T;
data = strcat(data, data2);
<dope slaps self>