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

#991
Programación C/C++ / Re: Cortar Cadena
30 Septiembre 2016, 18:53 PM
Cita de: bash en 29 Septiembre 2016, 23:28 PM
lamentablemente no encontre ninguna que haga esto eficientemente

Si estás en C++, la clase string tiene el método substr.
Además, la librería algorithm de la librería estándar también, tiene funciones para manejar contenedores (string incluido).


A parte:

- Pusiste de retorno de la función ini.
- (char *)calloc(inlen, sizeof(char ));: inlen es 0. Quizás quisieras decir this->inlen.
- strncpy( szEnd, &this->szChars[end], inlen);: si lo que querías decir ahí era this->inlen, ten en cuenta que vas a copiar caracteres fuera del rango, y probablemente, de la memoria de tu cadena.
Luego, yo cambiaría calloc y strncpy por malloc y memcpy, poniendo posteriormente el caracter nulo al final de las cadenas. Ya a tu gusto.
Y bueno, estás reservando memoria 4 veces. Puedes hacer esta función reservando memoria solo 1 vez (o ninguna si reutilizas la memoria que ya había, dejando que sobre espacio). Además, coges memoria de un tamaño excesivo.

La cadena tendrá 3 partes:
--- A ---|beg| --- B --- |end| --- C ---
Deberías reservar solo memoria de tamaño A + C + 1 (caracter nulo). Con eso, te llegará.
#992
¿Qué error? Cópialo.
#993
La razón por la cual están esas variables es porque no está asegurado que esos tamaños sean así siempre.
Lo único asegurado es que los tamaños siguen estas condiciones:
Código (cpp) [Seleccionar]
char <= short <= int <= long <= long long
#994
Prueba con una ruta relativa (que es lo que deberías hacer la mayoría d elas veces)

En vez de poner "C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", (supooniendo que tu ejecutable está en la carpeta Naves, pon: "recursos/nave.pcx". Y a ver.
#995
Vale. No confundas char con char[] o char*.
char es 1 caracter, que en C es un entero de 8 bits.
char[] y char* son punteros, que apuntan a un (o varios) char.

De ahí el error: return makes integer from pointer without a cast
Es decir, en el retorno, estás convirtiendo un puntero (char[]) a un entero (char) sin un cast explícito, que sería:
return (char)dos;

El segundo error es lo mismo prácticamente. printf espera una cadena (%s, char*), y le estás pasando un entero (char).


Aquí la solución es colocar los tipos correctos:
#include <stdio.h>

char* a();
void b( char* dos );

int main(void){

b(a());

return 0;
}

char* a() {
char* dos = "dos";
printf("frase uno = %s\n\n", "uno");
return dos;
}

void b(char* dos) {
printf("frase dos = %s\n\n", dos);
}


Ahora b coge un parámetro char*. Por tanto, a retorna un parámetro char*.


Edito: Por si acaso, aclarar una cosa: no debes retornar un array de tipo char[]. En vez de eso, deberías utilizar malloc, llenar ese array, y retornarlo.
Una explicación más larga con ejemplos la tienes aquí. Está en inglés, pero los ejuemplos son auto-explicativos: http://stackoverflow.com/questions/31060404/how-can-i-return-a-character-array-from-a-function-in-c
#996
Ese código es correcto.

Pasar como argumento una "llamada a función", intuyo que te refieres a pasar como argumento el retorno de una función.

Tu código es igual a este:

#include <stdio.h>

int a();
void b(int num);

int main(void){
int t = a();
b(t);

return 0;
}

int a() {
printf("num = %d\n\n", 1);
return 2;
}

void b(int num) {
printf("num = %d\n\n", num);
}




La otra interpretación, era la que te comentaron por ahí, que es pasar como parámetro una función en sí.
#include <stdio.h>

void call(void (*func)());
void a();
void b();

int main(void){

call(&a);
call(&b);

return 0;
}

void call(void (*func)()){
func();
}

void a() {
printf("num = %d\n\n", 1);
}

void b() {
printf("num = %d\n\n", 2);
}


Si dices que un código te da errores, copia también esos errores aquí.
#997
De texto a binario como? Pasar los caracteres a binario?
"abc"
"01100001 01100010 01100011"
O cómo?
#998
Cita de: JonaLamper en 24 Septiembre 2016, 17:30 PM
Gracias a ambos. Me gusta más la solución en JS.

ivancea96, vi esa solución por Internet, pero no entendí por qué el
  • . ¿Acaso lo que devuelve es un array?
getElementById retorna 1 elemento, porque se supone que soo habrá 1 elemento con el mismo ID. Pero getElementsByClassName retorna todos los elementos que tengan esa clase dentro del contenedor. En caso de que hubiera varios, ya sería cosa tuya seleccionar cuál. Pero según ese ejemplo, debería retornar un array con 1 valor.
#999
Código (javascript) [Seleccionar]
<html>
    <head>
        <script>
            window.addEventListener("load", function(){
                var div = document.getElementsByClassName("texto")[0];
                var spanPuntos = div.getElementsByClassName("puntos")[0];
                var valor = parseInt(spanPuntos.innerHTML);
                alert(valor);
            })
        </script>
    </head>

    <body>
        <div class="col-xs-6 texto">
            <span class="nombre">Petrosian</span>
            <span class="puntos">2730</span>
        </div>
    </body>
</html>


No es JQuery, eso sí.
#1000
Yo lo haría con threads. De hecho, el de unix también lo haría con threads. Además, así no tendrías que hacer mucho cambio.