Pregunta

mi problema está en convertir un char a cadena tengo que pasar a strcat () un char para anexar una cadena, ¿cómo puedo hacer? gracias!

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

char *asd(char* in, char *out){
    while(*in){
        strcat(out, *in); // <-- err arg 2 makes pointer from integer without a cast
        *in++;
    }
    return out;
}

int main(){
    char st[] = "text";
    char ok[200];
    asd(st, ok);
    printf("%s", ok);
    return 0;
}
¿Fue útil?

Solución

Desde ok apunta a un array de caracteres sin inicializar, todo habrá valores de basura, por lo que se desconoce la concatenación (por strcat) se iniciará. También strcat realiza un C-secuencia (es decir, una matriz de caracteres que se termina por un carácter '\ 0'). Dando char a[200] = "" le dará a [0] = '\ 0', entonces un [1] a un conjunto [199] a 0.

Editar: (añadido la versión corregida del código)

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

char *asd(char* in, char *out)
{

/*
    It is incorrect to pass `*in` since it'll give only the character pointed to 
    by `in`; passing `in` will give the starting address of the array to strcat
 */

    strcat(out, in);
    return out;
}

int main(){
    char st[] = "text";
    char ok[200] = "somevalue"; /* 's', 'o', 'm', 'e', 'v', 'a', 'l', 'u', 'e', '\0' */
    asd(st, ok);
    printf("%s", ok);
    return 0;
}

Otros consejos

strcat voluntad caracteres no añade individuales. En lugar de ello se necesita un const char* (una cadena de estilo C completo) que se adjunta a la cadena en el primer parámetro. Por lo que su función debe leer algo como:

char *asd(char* in, char *out)
{
    char *end = out + strlen(out);

    do
    {
        *end++ = *in;

    } while(*in++);

    return out;
}

El bucle do-while incluirá el cero terminador que es necesario, al final de las cadenas de estilo C. Asegúrese de que la cadena de salida se inicializa con un terminador cero al final o este ejemplo se producirá un error.

Y en un aparte: Piense en lo que hace *in++;. Se incrementa in y eliminar la referencia, que es la misma que in++, por lo que el * es inútil.

Para consultar su código, puedo hacer un par de punteros en relación con ella, esto no es una crítica, tomar esto con una pizca de sal que le permitirá ser un mejor programador de C:

  • Sin función prototipo.
  • El uso incorrecto de punteros
  • Tratando con la función strcat se utiliza incorrectamente.
  • La exageración de ella - no hay necesidad de que la propia función asd
  • Uso de tratar con variables de matriz particular char que no se ha inicializado correctamente.
#include <stdio.h>
#include <string.h>

int main(){
    char st[] = "text";
    char ok[200];
    ok[0] = '\0'; /* OR
    memset(ok, 0, sizeof(ok));
    */
    strcat(ok, st);
    printf("%s", ok);
    return 0;
}

Espero que esta ayuda, Atentamente, Tom.

Para convertir un carácter a un (terminada en nulo) cadena, simplemente podría hacer:

char* ctos(char c)
{
    char s[2];
    sprintf(s, "%c\0", c);
    return s;
}

Trabajo ejemplo: http://ideone.com/Cfav3e

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top