You didn't do what I said to do. You did not create a char buffer. Take a look at this code and its output:
Code
void main(void){
	string a = strf("apple");
	string b = a;
	char c[20];
	strcpy(c,a);
	string d = c;
	printf("\na1: %s",a);
	printf("\nb1: %s",b);
	printf("\nc1: %s",c);
	printf("\nd1: %s",d);
	int i;
	for(i=0;i<100;i++){
		strf("banana%d",i);
	}
	printf("\na2: %s",a);//undefined behavior (bad)
	printf("\nb2: %s",b);//undefined behavior (bad)
	printf("\nc2: %s",c);//defined behavior (good)
	printf("\nd2: %s",d);//defined behavior (good)
}

/*output:
a1: apple
b1: apple
c1: apple
d1: apple
a2: banana99
b2: banana99
c2: apple
d2: apple
*/
Note that a and b were ruined, whereas c and d remained intact.

By the way, strx() also returns temporary pointers, so you can expect similar problems.