Smart String Memory Management in C