static void foo(unsigned char *cmd)
{
strcat(cmd, "\r\n");
printf("\r\nfoo: #%s#", cmd);
}
int main()
{
foo("test");
return 0;
}
compilateur dit Segmentation fault (core dumped) Quel est le problème réel ici?En utilisant une autre fonction strcat intérieur: Segmentation fault (core dumped)
Vous essayez d'ajouter quelque chose à 'qui ne peut pas être modifié la chaîne littérale' « foo ». C'est un comportement indéfini. –
Je pense que ce n'est pas votre vrai code, c'est juste un bon MCVE. Mais, peut-être dans votre code réel, il n'y a pas de chaîne de caractères impliqués. Quoi qu'il en soit, vous devriez éviter 'strcat()' à moins que, vous avez juste besoin de l'appeler une fois. Construire des chaînes en c peut être fait beaucoup plus efficacement une fois que vous avez vraiment compris comment les piqûres sont représentées dans la langue, et ce qu'elles sont vraiment. –
Sur certaines notes non liées, vous n'avez pas besoin d'utiliser le retour chariot lors de l'impression. Le compilateur s'assurera que la nouvelle ligne est convertie en la séquence correcte pour la plate-forme cible. De plus, la sortie vers 'stdout' (qui est l'endroit où' printf' écrit) est par défaut bufferisée en ligne, donc la sortie est rincée sur newline, ce qui rend la nouvelle ligne principale pratiquement inutile. –