In the first half's only real chance, Johnnie Jackson found Callum Harriott with a good pass, who ran at his man and shot just over from 20 yards out.
Jackson himself could have opened the scoring on the stroke of half time, but his header sailed over the bar.
It didn't take long for Charlton to open the scoring after half-time. In the 46th minute, French striker Yann Kermorgant crashed a volley beyond the reach of Tom Heaton.
Kermorgant doubled his, and Charlton's, tally just minutes after the opener. Harriott's cross was met by the onrushing Kermorgant, who planted his header into the back of the net.
Bristol City got a lifeline when Michael Morrison gifted the ball to Bobby Reid, who cleverly lobbed the ball over David Button.
Nick Pope came on to make his debut for the home side, after David Button picked up an injury and had to be replaced.
Kermorgant almost got his hat-trick with a lob, but he was denied as they ball rebounded off the bar. His strike partner Jon Obika followed up the shot and headed into an empty net.
Charlton sealed the win as the game came to a close after good work by Bradley Pritchard and Mark Gower, which left Johnnie Jackson with a simple finish to make it 4-1.