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 - Seyro97

#71
Vaya... con el rato que me pasé buscando y resulta que estaba ahí...

Muchas gracias! Era eso exactamente lo que quería!
#72
Sé programar en Windows, pero no se si habrá diferencia con Linux (quitando la API de Windows xD)
#73
Hola. Muy buenas a tod@s. Hoy me ha entrado la curiosidad de este mundo de la seguridad informática. Bien, me presento: soy un programador principalmente en lenguaje C++ y Java (principalmente usados en videojuegos). Sé mas o menos como funciona la arquitectura de un ordenador (manejo de memoria, código máquina...). No sé prácticamente nada sobre redes (solo sé lo que es muy básico). La mayor parte de mi experiencia está basada en Windows, es decir, no sé prácticamente nada sobre Linux y servidores

Sabiendo todo esto, por dónde me recomendarían empezar a aprender Seguridad Informática (por hobby :)). Gracias
#74
Otra es no usar namespaces (sobre todo cuando solo vas a usar cout xD). Pongo un ejemplo:

Código 'malo':

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main() {
cout << "HOLA" << endl;

cin.get();
return 0;
}


Código 'bueno':

Código (cpp) [Seleccionar]
#include <iostream>

int main() {
std::cout << "HOLA" << std::endl;

std::cin.get();
return 0;
}
#75
Hola a tod@s. La duda está básicamente expresada en el título. Estoy buscando un tema para el IDE Eclipse CDT (C++) que se parezcca al de Visual Studio 2013 (tema oscuro).

Aquí os dejo de como se ve el tema de Visual Studio:



Nota: es preferible que el tema sea compatible con Color Theme (los que usen Eclipse CDT supongo que sabrán que es), para los que no, es como una amplicación dentro de Eclipse que te permite poner un tema sin complicaciones.

Muchas gracias.
#76
¿Por qué incluyes la librería conio.h si has definido gotoxy con la API de Windows?
#77
Ahí va el código completo:

String.h

Código (cpp) [Seleccionar]
#ifndef _String_h_
#define _String_h_

#include <cstdlib>

#ifndef NULL
#define NULL 0
#endif

class String {
public:
String();
String(const char *init_value);

unsigned int getNumCharacters();
bool isEmpty();

const char *toString();

void append(const char *data);
char charAt(unsigned int index);

void toUpperCase();
void toLowerCase();

void replaceData(const char *data);
void replaceChar(char oldChar, char newChar);
void clear();

private:
char *_value;
unsigned int _num_characters;
};

#endif


String.cpp

Código (cpp) [Seleccionar]
#include "string.h"

String::String() {
_value = (char *)calloc(1, 1);
_num_characters = 1;
}

String::String(const char *init_value) {
unsigned int num_characters = 0;

while(init_value[num_characters] != (char)NULL)
num_characters += 1;

_num_characters = num_characters;
_value = (char *)malloc(num_characters + 1);
_value[num_characters] = (char)0;

for(unsigned int i = 0; i < num_characters; i++)
       _value[i] = init_value[i];
}

unsigned int String::getNumCharacters() {
return _num_characters;
}

bool String::isEmpty() {
return _num_characters == 1;
}

const char *String::toString() {
char *result = (char *)malloc(_num_characters + 1);

   result[_num_characters + 1] = (char)NULL;
   
for(unsigned int i = 0; i <= _num_characters; i++)
result[i] = _value[i];
   
return result;
}

void String::append(const char *data) {
unsigned int num_data_characters = 0;
unsigned int new_num_characters;

while(data[num_data_characters] != (char)NULL)
num_data_characters += 1;

realloc(_value, _num_characters + num_data_characters + 1);

_value[_num_characters + num_data_characters] = (char)NULL;
new_num_characters = _num_characters + num_data_characters;

for(unsigned int i = 0; i < num_data_characters; i++)
       _value[i] = data[i];

_num_characters = new_num_characters;
}

char String::charAt(unsigned int index) {
return _value[index];
}

void String::toUpperCase() {
for(unsigned int i = 0; i <= _num_characters; i++) {
if(_value[i] >= (char)97 && _value[i] <= (char)122)
_value[i] -= (char)32;
}
}

void String::toLowerCase() {
for(unsigned int i = 0; i <= _num_characters; i++) {
if(_value[i] >= (char)65 && _value[i] <= (char)90)
_value[i] += (char)32;
}
}

void String::replaceData(const char *data) {
   unsigned int num_characters = 0;

while(data[num_characters] != (char)NULL)
num_characters += 1;
   
   _num_characters = num_characters;
realloc(_value, num_characters + 1);
_value[num_characters] = (char)0;

for(unsigned int i = 0; i < num_characters; i++)
       _value[i] = data[i];
}

void String::replaceChar(char oldChar, char newChar) {
for(unsigned int i = 0; i <= _num_characters; i++) {
if(_value[i] == oldChar)
_value[i] = newChar;
}
}

void String::clear() {
realloc(_value, 1);
_value[0] = (char)NULL;
_num_characters = 1;
}


main.cpp

Código (cpp) [Seleccionar]
#include <iostream>

#include "string.h"

int main(int argc, char *argv[]) {
String cadena = "";

cadena.replaceData("Hola, soy un programador :'D");

std::cout << cadena.toString();

std::cin.get();
return 0;
}


Solo digo que con MinGW funciona perfectamente y con el compilador de VisualStudio 2013 (no se como se llama), me da errores (no de compilación, sino de ejecución)
#78
Está claro, el código completo es muy largo, e innecesario (ya que no accedo a partes de ese código no puesto)
#79
Sé que el error se produce en el while ya que quitandolo, y sustituyendo la variable _num_characters por 17 no me da ese error.

Esa función pertecene a una clase creada por mí llamada String (la estoy haciendo a modo de ejercicio), y _value es la cadena de caracteres que define a un objeto String.

PD:
Código (cpp) [Seleccionar]
for(unsigned int i = 0; i < num_characters; i++)
        _value[i] = data[i];


Esa es mejor, ¿no?
#80
Pues resulta que era el compilador...

He usado el compilador MinGW (el que viene por defecto con Code::Blocks) y funciona... Es extraño, todos los compiladores deberían seguir las reglas ANSI, por lo que no debería de haber diferencia...