Utilisation de GDB, je trouve que je reçois une erreur de segmentation lorsque je tente cette opération: étant donné que la chaîne est initialisée comme p> et actuelchar est p> pourquoi cela résulte-t-il d'une défaillance de segmentation? p> si Strcat ne peut pas être utilisé pour cela, comment puis-je concocter un caractère sur une chaîne? p> p>
7 Réponses :
car ou si vous souhaitez utiliser & courantchal code> n'est pas une chaîne, il ne finit pas avec
\ 0 code> caractère. Vous devriez définir
b code> comme
char * courantchaar = 'B'; code>. Aussi selon http://www.cplusplus.com/reference/clibrary/cstring/strcat < / a>
string code> doit avoir assez d'espace pour maintenir la chaîne de résultat (2 octets dans ce cas), mais ce n'est que 1 octet.
char Code> Ensuite, vous pouvez faire quelque chose comme (en fonction de votre code): p>
Pas la raison pour laquelle le programme est SEGFaulting. Cela fait partie de l'erreur cependant
@Foo & courantchal code> ne pointe pas sur NULL termina la chaîne et bien sûr Strcpy provoquera une faute SEG
J'accepte cela comme la réponse car il couvre que A: J'avais besoin des terminateurs nuls, et B: je devais allouer plus d'espace pour la chaîne.
String [CUR_LEN + 1] doit être réglé sur 0, pas '\ N'
strcat () prend deux cordes terminées. Lorsque vous passez l'adresse d'un caractère, la routine examinera la mémoire qui suit le caractère, à la recherche du terminateur. P>
Puisque vous ne savez pas ce que cette mémoire fait même référence, vous devez vous attendre à des problèmes lorsque votre code l'accède. P>
En plus de cela, votre argument de chaîne n'a pas de place pour que des personnages soient annexés. Où est cette mémoire écrite? Il tentera d'écrire après la fin de la mémoire associée à cette chaîne. P>
Les deux cordes doivent être terminées nuls. Un seul caractère n'est pas terminé NULL, il est donc indéfini lorsque Strcat cessera de concaténer des caractères à la fin. De plus, la chaîne doit contenir au moins suffisamment d'espace pour la chaîne d'origine et la chaîne résultante.
Ceci fonctionne: P>
char string[10] = ""; char* currentChar = "B"; strcat(string, currentChar);
Cela ne fonctionne pas car il n'y a pas assez d'espace dans la chaîne. Pour voir mon point, essayez-le: Ideone.com/0jjst
Il y a deux problèmes avec le code. Le premier argument n'a pas assez d'espace, le second n'a pas de terminateur. Pourquoi êtes-vous concentré sur un seul problème?
Cela fait partie de la raison, bien que vous ayez raison, ce n'est pas le principal. fixé pour inclure la cause principale du segfault
Le premier argument de Strcat doit avoir assez d'espace pour maintenir le reste de la chaîne. "" Est une chaîne constante et comme ce type de GCC n'alloit pas l'espace.
Faites-le un tableau avec suffisamment d'espace: P>
char buf[1024]; strcat(buf, ""); strcat(buf, "B");
Aussi répondu par d'autres personnes, & EM> est un pointeur sur char fort> ou char * fort>, mais une chaîne en C est Un moyen d'utiliser strcat pour concaténer un char fort> à string fort> crée une chaîne minimale et utilisez-le pour transformer un caractère en chaîne. p> Fabriquer une chaîne simple, avec seulement 1 caractère et le suffixe appliquer à votre question: p> ctostr assumera la chaîne "B" : p> et strcat fonctionnera! p>
Je pense que la méthode la plus simple (non efficace) serait sprintf code> p>
sprintf (str, "% s% c", str, chr); code> p>
Pourquoi n'est-ce pas efficace?
@ Gustavoadolfomejía parce qu'il doit analyser la chaîne de format. Vous pouvez écrire votre propre fonction (dire strctatchar () code>) pour effectuer le même travail plus efficacement.
Nous savons que CurrentChar = 'B'.
Ceci peut être fait P>
strcat(string, "B\0");
Strcat nécessite des chaînes à terminaison des nuls. Votre unique Char n'a pas de null, alors Strcat continuera à copier jusqu'à ce qu'il trouve une null quelque part sur la ligne, ce qui pourrait être sur le 2e octet par accident, ou quelques gigaoctets sur la route, tout en copiant tout ce qui déchets à votre chaîne , piétinant sur la pile