Problème sur les chaînes de caractères (en C), attribution de caractères

Le problème exposé dans ce sujet a été résolu.

Bonjour, J’ai un souci en programmation en C concernant les chaînes de caractères, je vous montre mon code :

#include <stdio.h>

int main ()
{
    char name[] = "Salut"; //La chaîne de caractères d'origine
    char test = name; ///////que je veux affecter à test
    
    
    printf("Tu t'appelles %s", test);
    
    return 0;
}

Est-ce que vous avez une idée de comment je contourne le problème, car j’aimerais faire un code de ce type :

#include <stdio.h>

typedef struct Perso Perso;
struct Perso
{
    char nom[100];
};

int main ()
{
    Perso tunk;
    printf("Comment se nomme votre personnage ?");
    scanf("%s", &tunk.nom);
    printf("Votre personnage se nomme %s.", tunk.nom);
    
    return 0;
}

Mais sans avoir à appeler la fonction scanf, je veux pouvoir rentrer mes données directement dans le code.

Merci d’avance, Tunk

Alors :

    char name[] = "Salut"; //La chaîne de caractères d'origine
    char test = name; ///////que je veux affecter à test 

Ici test n’as pas le bon type. Ce n’est pas une conversion pertinente. Un pointeur sur le premier élément d’un tableau ne tiendra pas dans un 1 octet.

Ensuite,

    scanf("%s", &tunk.nom);

Ici, tunk.nom est déjà un pointeur sur le premier élément du champ nom.

Ce n’est pas très important mais tu devrais écrire :

    scanf("%s", tunk.nom);

Et ceci car nom est un tableau, ce n’est pas la même chose pour un entier par exemple. Où tu dois explicitement mettre le &.


Ensuite, ce que tu cherches j’ai l’impression est la fonction sprintf (remarque le s au début). Ici, j’utilise snprintf la version plus sûr de sprintf.

Que l’on peut utiliser comme ça :

sprintf est moins sûr que snprintf car elle n’encourage pas dans son utilisation à faire attention au buffer overflow. Alors que snprintf oblige à y penser. Pour information sprintf s’utiliserait comme ceci :

    sprintf(chaine, "Le nb : %d\n%c est sur %s", nb, c, zds);

Si tu ne veux que copier une chaîne dans une autre, tu n’es pas obligé d’utiliser sprintf qui est un peu lourde. Il y a des fonctions spécialement faite pour ça, notamment strcpy_s.

Plus d’information dans le tutoriel C du site. ^^

Mais basiquement :

   char name[] = "Salut";
   char test[100] = "";
   strcpy_s(test, name, 100);
   puts(test); // Affiche "Salut".
+1 -0

Merci beaucoup ache pour tes conseils, Je n’avais pas pensé au fait que mes variables étaient déjà des pointeurs. Donc j’ai changé le deuxième argument dans ma commande scanf (j’ai enlevé le '&' devant la variable), et ça a fonctionné. :waw: Comme quoi hein ?… ^^

Maintenant je veillerai à utiliser les commandes spéciales de string.h, merci pour le conseil.

Encore merci. :D

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte