Question

mon problème est en convertir un char en chaîne Je dois passer à strcat () char à ajouter à une chaîne, comment puis-je faire? merci!

#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;
}
Était-ce utile?

La solution

Comme ok pointe vers un tableau de caractères non initialisée, il va tous être des poubelles, alors où la concaténation (par strcat) commencera est inconnue. Aussi strcat prend une chaîne C (à savoir un tableau de caractères qui se termine par un caractère « \ 0 »). Donner char a[200] = "" vous donnera un [0] = '\ 0', puis un [1] à [199] réglé sur 0.

Modifier (ajouté la version corrigée du code)

#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;
}

Autres conseils

strcat ne sera pas ajouter des caractères simples. Au lieu de cela il faut un const char* (une chaîne complète de style C) qui est ajouté à la chaîne dans le premier paramètre. Ainsi, votre fonction doit lire quelque chose comme:

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

    do
    {
        *end++ = *in;

    } while(*in++);

    return out;
}

Le do-while comprendra le zéro de terminaison qui est nécessaire à la fin des chaînes de style C. Assurez-vous que votre ficelle est initialisé avec un zéro de terminaison à la fin ou cet exemple échouera.

Et en aparté: Pensez à ce que *in++; fait. Il incrémenter in et déréférencer, qui est la même que in++, de sorte que le * ne sert à rien.

Pour regarder votre code, je peux faire deux ou trois pointeurs en relation avec elle, ce n'est pas une critique, prendre avec une pincée de sel qui vous permettra d'être un meilleur programmeur C:

  • Aucun prototype de fonction.
  • Une utilisation incorrecte de pointeurs
  • Faire face à la fonction strcat est utilisée de manière incorrecte.
  • exagérez - pas besoin de la fonction elle-même asd
  • Utilisation de traiter avec des variables de tableau notamment char qui ne sont pas correctement initialisé.
#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;
}

Hope this helps, Meilleures salutations, Tom.

Pour convertir un caractère à une chaîne (null terminée), vous pouvez simplement faire:

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

Exemple de travail: http://ideone.com/Cfav3e

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top