For a drawing application, I’d suggest keeping the drawing in an SDL_Image, in program memory .
Then you can draw to it on the CPU without using expensive copying operations.
Then, keep a texture around that has the same size of the in-memory image. Copy rectangular areas that have changed between frames into this texture, and use that with the renderer to present the result to the user.
If you want to use the Renderer’s features themselves to do the drawing operations, create a software renderer. Then, the image backing store stays on the CPU, allowing you to implement things that the renderer doesn’t support without expensive memory copy roundtrips between the CPU and the GPU.