Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackZeroX

#351
tal vez mis estructuras de mi CSxript que estoy haciendo te sirvan (por ahora me concentro en funciones y variables)...



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

struct String;
struct Variable;
struct VariableList;
struct Function;

struct Params;
struct ParamsList;
struct Instruction;
struct InstructionList;

const long INVALID_INDEX = -1;

/*
typedef struct Variable Variable ;
typedef struct Function Function;
typedef struct VariableList VariableList;
*/

struct String {
    char* text;
    size_t size;          //  Tamaño del bloque reservado (mas no el que se usa).
};

struct Variable {    //  Define una varible.
    enum FORMAT_VARIABLE{
        _NONE_      = 0x0,
        //  Tipos...
        _CHAR_      = 0x1,
        _INT_       = 0x2,
        _FLOAT_     = 0x4,
        _DOUBLE_    = 0x8,
        _VOID_      = 0x10,

        //  Modificadores...
        _UNSIGNED_  = 0x100,
        _LONG_      = 0x200,    //  Se permite usar 2 veces solo en INT y 1 vez en DOUBLE.
        _SHORT_     = 0x400,    //  Se permite usar 1 vez en INT.
        _CONST_     = 0x800,    //  Solo una vez en todos los tipos de variables.
        _PTR_       = 0x1000,   //  Indica que la variable es un puntero.
        _SHARED_    = 0x2000,   //  Se usa en combinacion de una variable tipo puntero (Se usa para que la memoria pedida no se autolibere al salir de la función).
        _STATIC_    = 0x3000    //  Se usa para que una variable no pierda su valor al salir de una funcion.
    } a;
    struct String name;         //  Nombre de la variable.
    long flags;                 //  Tipo de variable (Es una combinacion de las enumeraciones superiores).
    size_t size;                //  Tamaño en bytes de la variable.
    void* value;                //  Valor.
};

struct VariableList {           //  Lista de variables.
    struct Function* parent;    //  Funcion padre donde estan alojadas las variables.
    unsigned long count;        //  Cantidad de variables.
    struct Variable** list;     //  Puntero a la lista de las funciones.
};

struct Params {
    enum FORMAT_PARAM {
        _VARIABLE_ = 1,
        _FUNCTION_ = 2,
        //_VOID_ = 4
    } a;
    void* value;                //  Apuntador al parametro (Segun flags debera de realizarse un cast adecuado).
    long flags;                 //  Tipo de parametro: variable, funcion...
};

struct ParamsList {
    struct Instruction* parent; //  A que instruccion pertenece este parametro?.
    struct Params* list;        //  Lista d elos parametros.
    size_t count;               //  Cantidad de parametros.
};

struct Instruction {
    enum {
        //  Flags Predeterminados.
        //_NONE_,             //  No es ninguna instruccion.

        //  Asignaciones.
        _ASIGN_,            //  Asignacion (A = B).
        _ASIGN_ADD_,        //  Asignacion con Sumatoria/Resta ( A += B, A >- B).
        _ASIGN_ROL_,        //  Asignacion con dezplazamientode de N bits a la izquierda ( A <<= B).
        _ASIGN_ROR_,        //  Asignacion con dezplazamientode de N bits a la derecha ( A >>= B).

        //  Comparaciones.
        _EQUAL_,            //  Igual que (A == B).
        _GREATTHAT_,        //  Mayor que (A > B).
        _LESSTHAT_,         //  Menor que (A < B).
        _GREATTHAT_EQUAL_,  //  Mayor o igual que (A >= B).
        _LESSTHAT_EQUAL_,   //  Menor o igual que (A >= B).
        _AND_,              //  A y B (A && B).
        _OR_,               //  A o B (A || B).

        //  Operaciones Basicas (base 10).
        _ADD_,              //  Resta/Suma (A+B).
        _ADD_PRE_,          //  Resta/Suma -/+ 1 (++A, --A).
        _ADD_POST_,         //  Resta/Suma -/+ 1 (A++, A--).
        _MULTIPLY_,         //  Multiplicacion (A * B).
        _MOD_,              //  Residuo de A entre B (A % B) (retorna un unsigned long long).
        _DIV_,              //  A entre B (A / B) (Retorna un long double).

        //  Operaciones Binarias (base 2).
        _ROL_,              //  Rotacion de N bits a la izquierda (A << N).
        _ROR_,              //  Rotacion de N bits a la izquierda (A >> N).
        _AND_BIT_,          //  A y B (A & B).
        _OR_BIT_,           //  A o B (A | B).
        _XOR_,              //  A xor B (A ^ B).
        _NOT_               //  complemento binario (not A).
    } a;
    struct Function* parent;    //  A que funcion pertenece la instruccion?.
    int opcode;                 //  De que tipo es la instruccion?.
    struct ParamsList arg;      //  Lista de argumentos d ela funcion.
};

struct InstructionList {
    struct Function* parent;    //  A que funcion pertenece la lista de instrucciones?.
    struct Instruction* list;   //  Lista de instruccion.
    size_t count;               //  Cantidad de instrucciones contenidas.
};

struct Function {
    struct Function* stackCall; //  Pila del proceso (Quien llamo al proceso).
    struct String name;         //  Nombre de la funcion.
    struct VariableList* vars;  //  Lista de variables.
    struct InstructionList code;//  Codigo de la funcion Cada linea representa una instruccion.
    struct Variable ret;        //  Valor que retorno la funcion.
};


bool            stringInit(struct String* str);
struct String*  stringCreate();
char*           stringRedim(struct String* str, size_t size);
bool            stringFinalize(struct String* str);
bool            stringFree(struct String* str);
struct Variable*        variableCreate(const char* name);
bool            variableFree(struct Variable* var);
bool            variableFreeList(struct Variable** varlist, size_t count);
struct Variable**       variableListFind(struct VariableList* varlist, const char* find);
struct VariableList*    variableListCreate();
struct VariableList     variableListInit();
bool            variableListFinalize(struct VariableList* varlist);
bool            variableListFree(struct VariableList* varlist);
unsigned long   variableListLink(struct VariableList* varlist, struct Variable* var);
long            variableListIndex(struct VariableList* varlist, struct Variable** ptr);
unsigned long   variableListUnLink(struct VariableList* varlist, struct Variable** ptr);



Dulces Lunas!¡.
#352
http://foro.elhacker.net/programacion_cc/consulta_programa_para_parsear_csv-t365491.0.html;msg1760918#msg1760918



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* replace(const char *str, const char *find, const char *rep)
{ // Reemplaza UNO  A LA VEZ...
    char *ret = NULL;
    size_t strOln;
    size_t strFln;
    size_t strRln;
    const char *end[2];
    size_t sizeL;
    size_t sizeR;


    if (!str) return NULL;

    strOln = strlen(str);

    if (!find || (end[0] = strstr(str, find)) == NULL) {
        ret = (char*)malloc(strOln + 1);
        memcpy(ret, str, strOln + 1);
        return ret;
    }

    strRln = strlen(rep);
    strFln = strlen(find);

    end[1] = end[0] + strFln;

    sizeL = end[0] - str;
    sizeR = (str + strOln) - end[1];

    ret = (char*)malloc(sizeL + strRln + sizeR + 1);

    memcpy(ret, str, sizeL);
    memcpy((ret + sizeL), rep, strRln);
    memcpy((ret + sizeL + strRln), end[1], sizeR);

    ret[sizeL + strRln + sizeR] = '\0';

    return ret;
}

int main() {
    const char MSG[] = "% &";
    char* ret1;
    char* ret2;

    ret1 = replace(MSG, "%", "Hola");
    ret2 = replace(ret1, "&", "Mundo");

    puts(ret1);
    puts(ret2);

    free(ret1);
    free(ret2);

    getchar();

    return 0;
}



Dulces Lunas¡.
#353

« Última modificación: Hoy a las 11:39:24 por BlackZeroX (Astaroth) »
#354
Modificalo para tu propósito es igual al que te puso @marcico con la diferencia que no es a un archivo si no a un buffer de cadena.



#include <stdio.h>
#include <string.h>

int main() {
    char newName[256];

    for (int i = -100; i <= 100; i++) {
        memset(newName, 0, 256);                  // limpiamos...
        sprintf(newName, "Archiv0_%d.txt", i); // construimos la cadena Archivo_-100.txt hasta Archivo_100.txt
        puts (newName);
// o como @marcizo
//        fichero = fopen( "Archivo_%d.bat", "w", &i );
// código...
    }

    getchar();
    return 0;
}



Dulces Lunas!¡.
#355
Programación C/C++ / Re: Ayuda con cadenas.
17 Julio 2012, 19:01 PM
Cita de: do-while en 17 Julio 2012, 18:18 PM
Si vas a criticar algo, lee lo que se postea primero y luego comentas, ¿ok?

:) estaba pensando en [base cadena] + [longitud word] + [longitud divisor], jamas tome en consideración los divisores iniciales ( paso de textos que empiezan a ser pedantes ).

* Tomando los criterios de especializar la función para dicha cadena http://codepad.org/oCHGCGbd aun asi yo me quedo con strtok() (código de ejemplo: http://codepad.org/s9gKfS0Z);

Cita de: do-while en 17 Julio 2012, 18:18 PM
Por lo menos tomate la molestia de comprobar si lo que dices es cierto o no.

Gracias por la ilustración maestro (vale madre estoy en vacaciones, jajaja).

P.D.: Como dicen por aquí "estas generando demasiada bilis".

Dulces Lunas!¡.
#356
Programación C/C++ / Re: Ayuda con cadenas.
17 Julio 2012, 18:00 PM
Cita de: do-while en 17 Julio 2012, 13:30 PM
Esto tampoco es correcto. A parte de que User ha dicho que todavia no ha estudiado la aritmetica de punteros, desplazar cadena stlen(ptr1) posiciones no te asegura pasar a la siguiente posicion despues del primer token (¿lees los post anteriores o solo les echas un vistazo por encima y luego posteas sin saber lo que se ha dicho anteriormente?)


Si cadena = "---hu-ha"; la primera llamada a strtok dejara las variables asi:

ptr1 = strtok(cadena,"-");

ptr1 = "hu";
cadena = "---hu'\0'ha"

Asi que cadena + strlen(ptr1) + 1 apuntara otra vez a "hu'\0'ha"
. En algun post anterior, ya he comentado que tiene que volver a utilizarse la misma cadena que se le ha pasado a strtok. Si miras como ha quedado cadena despues de la primera llamada a strtok veras el porque.

¡Saludos!

Esa afirmación es mentira... la aritmética dice todo lo contrario, ya que ambos métodos son equitativos.



...
char cadena[] = "Necesito repasar matematicas basicas"
ptr1 = strtok(cadena, " "); // ptr1 = Necesito\0repasar matematicas basicas
cadena + strlen(ptr1) + 1; // repasar matematicas basicas
cadena[strlen(ptr1) + 1]; // repasar matematicas basicas
...



http://foro.elhacker.net/programacion_cc/ayuda_con_cadenas-t367020.0.html;msg1766536#msg1766536

Edito:

Nunca mire tu post me centre en la duda.

Dulces Lunas!¡.
#357
* Usa expresiones regulares...
* usa InStr() + un while() + mid$() ...

Intenta hacerlo (no creo que se te ayude con la logica pero si en algunas correcciones).

Dulces Lunas!¡.
#358
puros errores...



Software error:

can't find an executable sendmail at Modules/Session.pm line 492
For help, please send mail to the webmaster (webmaster@necroupload.com), giving this error message and the time and date of the error.

Software error:

[Tue Jul 17 06:48:44 2012] index.cgi: can't find an executable sendmail at Modules/Session.pm line 492
Compilation failed in require at Modules/Session.pm line 492.
For help, please send mail to the webmaster (webmaster@necroupload.com), giving this error message and the time and date of the error.



Dulces Lunas!¡.
#359
Programación C/C++ / Re: Ayuda con cadenas.
17 Julio 2012, 05:15 AM
Quiero creer que strtok() hace una llamada a realloc() aumentando en +1 su tamaño ya que de lo contrario ese '\0' que agrega para dividir con varias llamadas a strtok() a larga crearía un error de escritura en regiones invalidas...

Código (vb) [Seleccionar]


... solo es otra manera de escribir: &str[strlen(ptr1) + 1];

    ptr1 = strtok((char*)CADENA, ESPACIO);
    ptr2 = ptr1 ? (char*)(cadena + strlen(ptr1) + 1): NULL;

...



Dulces Lunas!¡.
#360
Revisa cada tipo en la plataforma en la que estas... por ejemplo: un int difiere segun la arquitectura x86 (32) y una x64 (64)...

Dulces Lunas!¡.