El problema es que estas trabajando con archivos binarios.....seguramente dentro del jpg1 hay un byte en cero que hace las funciones de string de c crean que llegaste a un final de cadena.
Las funciones de string sirven cuando trabajas con string. Detectan un cero como fin de cadena. Es mas un archivo de texto siempre termina con un caracter especial que marca el fin del archivo (EOF)[no recuendo su numero]. En cambio si abrimos ese archivo como binario poco le va a importar ese caracter especial.
En modo binario se guian por el tamañan del archivo, adentro puede haber cualquier cosas y lo que es mas importante puede ser interpretada de cualquier manera. El modo texto plano de un archivo es una de esas forma de interpretar.
Asi que si usas strtok si o si debes trabajar con cadenas de caracteres (los caracteres ascii imprimibles).
Ahora resolviendo tu duda, en vez de pegar un # en la imagen (que si tratas de abrirla con el bloc de notas es casi seguro que ni lo ves ese #) deberias guardar la longitud del archivo.
Código C++:
Ver originalofstream out;
out.open("c:\\a3.jpg",ios::binary);
out.write(&length,sizeof(int));
out.write(buffer,length);
out.write(&length2,sizeof(int));
out.write(buffer2,length2);
out.close();
Para recuperar haces:
Código C++:
Ver originalifstream in3;
in3.open("c:\\a3.jpg",ios::binary);
in3.read(&length,sizeof(int));
buffer = new char[length];
in3.read(buffer,length);
in3.read(&length2,sizeof(int));
buffer2 = new char[length2];
in3.read(buffer2,length2);
in3.close();