1) A string does not have a fixed size, so setting a string equal to a char pointer to an empty char array does nothing:
Materials[i].TextureFilename = new char[strlen( pMaterial->m_texture )+1];
2) Look up strcpy() and see what parameter types it can take:
strcpy( Materials[i].TextureFilename, pMaterial->m_texture );
3) Read my second post again.