C char en chaîne (en passant de carbonisation à strcat ())
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;
}
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