Цитата(AlexSpl @ 12 Oct 2016, 01:18)

Цитата
И увидел что она делает. Она делает ошибки.
Если в коде ошибки, его лучше закомментировать от греха подальше:
Код
// using namespace fbx;
Я так и делаю
Цитата
Потом запускаешь программу, которая генерит набор символов заданной длины в лексикографическом порядке (например, "usign namespcae fеr;", "singu spaceamen sdt;" и т.д.) и комментишь неудачные варианты. Спустя конечное время обязательно должен получиться вариант, который скомпилируется.
А вот это не правильно! Надо просто посмотреть в Google что за ошибка. И вставить тот код который написано что надо вставлять при таких ошибках. И тогда получается намного быстрее.
Кстат вот! Вот код исходника что делает base64 кодирование.
Код
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include "base64.h"
#include <cstring>
int main() {
// char *FileBuf = NULL;
FILE* hFile = NULL;
unsigned long int FileSize,TotalSize;
// char *SendBuf = NULL;
unsigned int q, i,res;
hFile = fopen("input.txt","rb");
if(hFile == NULL)
{
fputs("Ошибка файла \n", stderr);
exit(1);
}
// Из примера
// определяем размер файла
fseek(hFile , 0 , SEEK_END); // устанавливаем позицию в конец файла
long lSize = ftell(hFile); // получаем размер в байтах
q = lSize/54+1;
rewind (hFile); // устанавливаем указатель в конец файла
char * SendBuf = (char*) malloc(sizeof(char) * lSize);
char * FileBuf = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
if (FileBuf == NULL)
{
fputs("Ошибка памяти", stderr);
exit(2);
}
/* size_t result = fread(buffer, 1, lSize, hFile); // считываем файл в буфер
// fread(buffer,sizeof(char),54,hFile);
if (result != lSize)
{
fputs("Ошибка чтения", stderr);
exit (3);
}
//содержимое файла теперь находится в буфере
puts(buffer);
// завершение работы
fclose (hFile);
free (buffer);
// Конец из примера
*/
// Проверяем размер:
// FileSize = 0;
// while(!feof(hFile))
// FileSize += fread(FileBuf,sizeof(char),54,hFile);
// TotalSize += FileSize;
// sending the file:
// if(TotalSize/1024 > MSG_SIZE_IN_MB*1024)
// throw ECSmtp(ECSmtp::MSG_TOO_BIG);
// else
// {
// fseek (hFile,0,SEEK_SET);
// MsgPart = 0;
// for(i=0;i<FileSize/54+1;i++)
// {
// res = fread(FileBuf,sizeof(char),54,hFile);
//
//MsgPart ? strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*(FileBuf),res).c_str()): : //strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*(FileBuf),res).c_str());
// strcat(SendBuf,"\r\n");
// MsgPart += res + 2;
// if(MsgPart >= BUFFER_SIZE/2)
// {
// sending part of the message
// MsgPart = 0;
// SendData(); // FileBuf, FileName, fclose(hFile);
// }
// }
// if(MsgPart)
// {
// SendData(); // FileBuf, FileName, fclose(hFile);
// }
// }
// fclose(hFile);
// }
// delete[] FileBuf;
// delete[] FileName;
FileSize = 0;
while(!feof(hFile))
{
FileSize = fread(FileBuf,sizeof(char),54,hFile);
// std::cout << "FileSize равно=" << FileSize << "\r\n";
// TotalSize += FileSize;
// std::cout << "TotalSize равно=" << TotalSize << "\r\n";
}
// Делаем буфер:
fseek (hFile,0,SEEK_SET);
// std::cout << "TotalSize равно=" << TotalSize << "\r\n";
// std::cout << "FileSize равно=" << FileSize << "\r\n";
// std::cout << "lSize равно=" << lSize << "\r\n";
// std::cout << "q равно=" << q << "\r\n";
for(i=0;i<q;i++)
{ res = fread(FileBuf,sizeof(char),54,hFile);
// std::cout << "i равно =" << i << "\r\n";
strcat(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),54).c_str());
// strcat(SendBuf,"ПРИВЕТ ЭТО ДАНЯ!!!!!\r\n");
strcpy(SendBuf,base64_encode(reinterpret_cast<const unsigned char*>(FileBuf),res).c_str());
strcat(SendBuf,"\r");
// puts(SendBuf);
// std::cout << "RES равно=" << res << "\r\n";
if(SendBuf)
{
puts(SendBuf);
// FILE * ptrFile = fopen ( "output.txt" , "wb" );
// fwrite(SendBuf, 1 , sizeof(SendBuf) , ptrFile ); // записать в файл содержимое буфера
// fclose (ptrFile);
// fclose(hFile);
}
}
return 0;
}
Собрал его из трех разных правда он еще в файл писать не может, приходится его вот так запускать
Код
./test > test.txt
Но кодирует уже правильно.