Parece que cuando utilizo '\0' no obtengo el resultado correcto... g_strdelimit?

En windows con msys2

printf(“A: %s\n”, g_strdelimit(“Hola Mundo”, " ", ‘\0’));

Out: :x:
A: Hola

Pero el resultado debería ser: A: HolaMundo :white_check_mark:

¿Por qué debería?
la entrada en chars: 'H' 'o' 'l' 'a' ' ' 'M' 'u' 'n' 'd' 'o' '\0'
la salida en chars: 'H' 'o' 'l' 'a' '\0' 'M' 'u' 'n' 'd' 'o' '\0'

0 indica la final de C string,
por lo que printf("%s\n", "Hola" "\0" "Mundo" "\0") imprime Hola

Po no estoy entendiendo como funciona g_strdelimit

Si realizo esto puedo remplazar las letras o por un *, pero si realizo hacer el cambio para eliminar los espacios no puedo…

printf(“A: %s\n”,g_strdelimit(g_strdup(“Hola Mundo”), “o”,‘*’));
Resultado: A: H*la Mund*

Que me estoy perdiendo??

perdido que C string termina en 0

se puede hacer con
g_print("A: %s\n", g_strjoinv("", g_strsplit("Hola Mundo", " ", -1)));
o con g_string_replace(), o con g_regex_replace(), o con simple for() ciclo, etc.

Si, fue como pude hacerlo, pero tenia la duda de que estaba haciendo mal. Gracias!!!

/**
 * Reemplaza todas las apariciones de una subcadena en una cadena con otra subcadena.
 *
 * @param str La cadena original.
 * @param find La subcadena que se va a reemplazar.
 * @param replace La subcadena para reemplazar las apariciones de 'find'.
 * @return Una nueva cadena con todas las apariciones de 'find' reemplazadas por 'replace'.
 */
char* gb_str_replace(const char* str, const char* find, const char* replace)
{
    char** split = g_strsplit_set(str, find, -1);
    char* result = g_strjoinv(replace, split);
    g_strfreev(split);
    return result;
}

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.