codice:
#include <stdio.h>
#include <strings.h>
#include <malloc.h>

class Stringa
{
	public:
		char *s;
		int lunghezza;
	public:
		Stringa(void)
		{
			s = (char *)malloc(512);
			s[0] = '\0';
			lunghezza = 0;
		}
		
		Stringa(char *p)
		{
			s = (char *)malloc(512);
			int i;
			for (i = 0; (s[i] = p[i]) != '\0'; i++)
				;
			lunghezza = i;
		}
		
		Stringa(int k)
		{
			s = (char *)malloc(k);
			s[0] = '\0';
			lunghezza = 0;
		}
		
		Stringa(char *p, int k)
		{
			s = (char *)malloc(k);
			int i;
			for (i = 0; (s[i] = p[i]) != '\0'; i++)
				;
			lunghezza = i;
		}
		
		~Stringa(void)
		{
			s[0] = '\0';
			lunghezza = 0;
		}
		
		void write(void)
		{
			printf("%s",s);
		}
		
		void writeln(void)
		{
			printf("%s\n",s);
		}
		
		int lung(void)
		{
			return lunghezza;
		}
		
		void input(void)
		{
			char c;
			int i;
			for (i = 0; (c = getchar()) != '\n'; i++)
				s[i] = c;
			s[i] = '\0';
			lunghezza = i;
		}
		
		void modifica(int i, char c)
		{
			if (i > 0 && i <= lunghezza)
				s[i-1] = c;
		}
		
		int operator==(Stringa &x)
		{
			return !(strcmp(s,x.s));
		}

		int operator==(char *x)
		{
			return !(strcmp(s,x));
		}

				
		int operator<(Stringa &x)
		{
			return (strcmp(s,x.s) == -1);
		}

		int operator<(char *x)
		{
			return (strcmp(s,x) == -1);
		}

				
		int operator>(Stringa &x)
		{
			return (strcmp(s,x.s) == 1);
		}

		int operator>(char *x)
		{
			return (strcmp(s,x) == 1);
		}

		
		int operator<=(Stringa &x)
		{
			return ((*this == x) || (*this < x));
		}

		int operator<=(char *x)
		{
			return ((*this == x) || (*this < x));
		}

				
		int operator>=(Stringa &x)
		{
			return ((*this > x) || (*this == x));
		}

		int operator>=(char *x)
		{
			return ((*this > x) || (*this == x));
		}

		Stringa operator+(Stringa &x)
		{
			Stringa z;
			int i,k;
			for (i = 0; s[i] != '\0'; i++)
				z.s[i] = s[i];
			for (k = 0; x.s[k] != '\0'; k++)
				z.s[i++] = x.s[k];
			z.s[i] = '\0';
			z.lunghezza = i;
			return z;
		}
		
		void operator+=(Stringa &x)
		{
			*this = *this + x;
		}
		
		
		
		void operator=(char *z)
		{
			int i;
			for (i = 0; (s[i] = z[i]) != '\0'; i++)
				;
			lunghezza = i;
		}		
};

#include <stdlib.h>

int main()
{
	system("cls");
	Stringa a;
	Stringa b;
	Stringa c;
	a.input();
	b.input();
	c = a + b;
	printf("\n\n");
	a.writeln();
	b.writeln();
	c.write();
}
salve, vorrei sapere perchè il codice sopra riportanto non funziona. Non stampa la stringa c.
Però se s lo metto come un array statico va tutto bene... qualcuno mi può aiutare?