Архив метки: c++

Удаление пробелов из строки С++

Часто бывает необходимо при обработке  результата вывода выполнения консольных программ, убрать все пробелы из строки. Стандартного решения (ктоб сомневался!) в с++ нет. Пишем свой велосипет.

string trim(string ss){
 int i=0;
 string st=""; 
 while(i!=ss.length()-1){
   if(ss[i]!=' '){st+=ss[i];};
   i++;
 };    
 return st;
};

Возврат динамического массива из функции. C++

Задача: обьявить суперглобальный динамический массив, в который попадают значения из функции.

Решение:

struct tars{
    int tar_id;
    string tar_name;
    int fixshape;
    int used;
    int maxspeed;
    int onlytar;
};
tars *gtars;
tars *GetTarifsFromNoc(){
   tars *noctar=new tars[cnttar];
   noctar[counttar].fixshape=atoi(row[5]);
   noctar[counttar].onlytar=atoi(row[10]);
   return noctar;
};
int main(int argc, char** argv) {
   gtars=GetTarifsFromNoc();
   return 0;
}

Ошибка “Syntax error: Bad fd number” при вызове функции system c++

При вызове:

system("ipfw pipe list >& pipe.lst");

Вызывает возврат с ошибкой «Syntax error: Bad fd number»

Та же самая команда, выполненная на прямую в консоли, выполняется без ошибок. ОС FreeBSD. Необходимо записать в файл результат выполнения ipfw pipe list, включая stderr

Как костыль отлавливаю код возврата system. Но не хорошее решениие для меня, т.к. вижу код, но не вижу текста ошибки..

Особенности работы с Mysql во FreeBSD на с++

  1. После каждого выполнения запроса необходимо «сохранять» результат запроса при помощи mysql_store_result, иначе получаем ошибку
    Error: can't execute SQL-query Commands out of sync; you can't run this command now
  2.  Во FreeBSD не достаточно «выбрать базу» при выполнении mysql_real_connect(connectionNOC,hostbase,userbase,passbase,namebase,3306,0,0). Пришлось дополнительно её «перевыбирать» в запросом.

Итоговый шаблон работы с MySQL на FreeBSD:

string sql;
connectionNOC = mysql_init(NULL); 
mysql_real_connect(connectionNOC,hostbase,userbase,passbase,namebase,3306,0,0)

   sql ="use noc";
   if (mysql_query(connectionNOC, sql.c_str()) != 0){fprintf(stderr,"Error: can't execute SQL-query\n");exit(1);};      
   result=mysql_store_result(connectionNOC);    

  // Шаг 1
  sql ="SET NAMES utf8";
  if (mysql_query(connectionNOC, sql.c_str()) != 0){fprintf(stderr,"Error:  can't execute SQL-query\n");exit(1);};      
  result=mysql_store_result(connectionNOC);    

  // Шаг 2
   sql="select * from lanbshconfig";
   if (mysql_query(connectionNOC, sql.c_str()) != 0){
   fprintf(stderr,"Error: can't execute   SQL-query %s\n",mysql_error(connectionNOC));
   exit(1);
  };

C++ и компиляция проекта используещего mysql под FreeBSD

1290897526_freebsd2Вот она! Рыба моей мечты. Почти 2 дня мучений, чтоб подобрать состав ключей для компиляции!

g++ -o shaper main.cpp -lmysqlclient -I/usr/local/include/mysql -I/usr/local/include/ -L/usr/local/lib/mysql

Порядок включения библиотек в проект:

#include<iostream>
using namespace std;

#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <unistd.h>
#include <cstring>
#include <fstream>
#include <sstream>
#include <math.h>
#include <my_global.h>
#include <mysql.h>

Как в конечном итоге оказалось, порядок включения, тоже очень важен. В самом верху  iostream, затем обьявляем пространство имен std,  затем все остальные библиотеки. Причем те которые с расширением *.h рекомендуют опускать в самый низ. Причем под Ubuntu компилировалось всё без проблем сразу, и в любом порядке. А вот со FreeBSD ыли вот такие пляски с бубном.