Rechercher : dans
Par :

Caractère " (double quote) en C

Dernière réponse le 19 avr 2009 à 18:05:10 mano9, le 17 avr 2009 à 21:14:49 
 Signaler ce message aux modérateurs

Bonjour,
Je suis en train de faire un travail dans lequel j'ai besoin d'affecter la double côte( " ) à une variable de type chaine(C'est le seul chemin pour faire ce que je veux).Mais depuis 2 jours, j'ai tout tenté en vain.En fait voilà:

char machaine[5];
machaine = "SC CREATE " ";

Toujours des erreurs je ne sais donc pas comment utiliser " comme caractère.
Aidez moi SVP mon projet ç'est pour demain et il ne me reste que ça à débloquer pour le terminer.

Très cordialement

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Caractère " (double quote) en C » dans :
Télécharger Joost VoirSi vous voulez obtenir des vidéos gratuites ou des shows de toutes sortes sur Internet, ne cherchez pas plus loin ! Joost c'est de la vidéo, plus de 20.000 shows avec des ajouts quotidiens. C'est accessible en ligne sur une connexion à bande large....
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

fiddy, le 17 avr 2009 à 21:30:20

Salut,
Trois erreurs dans ton code.
1/ La taille de ta chaîne est trop petite pour contenir "SC CREATE". (10 caractères minimum, tu peux en mettre plus pour être tranquille).
2/ machaine = "SC CREATE " "; Interdit de faire ça. Tu dois utiliser la fonction strncpy pour réaliser la copie de la chaîne. Par exemple :

strncpy(machaine,"SC CREATE",sizeof machaine);
machaine[sizeof machaine - 1]='\0'; //pour placer le \0 final.

3/Pas de guillemets dans la chaîne. Ou alors il faut l'échapper avec un backslash. Par exemple : "SC CREATE\" "

Cdlt
Google is your friend

Répondre à fiddy

6

KéKeCest ??, le 19 avr 2009 à 10:13:28

Slt fiddy,

Je me permet cette petite correction sur la fonction strncpy() :

char *strncpy(char *cible, const char *source, size_t longueur)


> Copie au maximum longueur caractères de source dans cible en complétant par des caractères de code nul si taille cible > taille source.

Sinon dans son cas il peut simplement utiliser vieille fonction strcpy().

Bonne journée.

Répondre à KéKeCest ??

7

fiddy, le 19 avr 2009 à 12:32:37

Je ne comprends pas pourquoi tu me reprends ? Qu'est-ce qu'il ne t'a pas plu dans mon code ?

Sinon dans son cas il peut simplement utiliser vieille fonction strcpy().
Oui, mais attention au buffer overflow.
Google is your friend

Répondre à fiddy

10

KéKeCest ??, le 19 avr 2009 à 16:48:13

Re,

strncpy(machaine,"SC CREATE",sizeof (machaine));

Non non comme ça, ça semble OK (:>).

Crldt.

Répondre à KéKeCest ??

11

fiddy, le 19 avr 2009 à 16:51:05

Il faut placer un '\0' en fin de chaîne. Il n'est pas mis de façon systématique.
D'où : machaine[sizeof machaine - 1]='\0'; //pour placer le \0 final.

Google is your friend

Répondre à fiddy

12

KéKeCest ??, le 19 avr 2009 à 17:02:05

Stl fiddy,

Ok et si je fais ça (question) :

strncpy(machaine,"SC CREATE", (sizeof (machaine) - 1) ); 


> Est ce que la fonction strncpy() se débrouille elle même pour rajouter ce caractère de fin de chaine ?.

Merci de ta réponse.

Répondre à KéKeCest ??

16

fiddy, le 19 avr 2009 à 17:25:30

> Est ce que la fonction strncpy() se débrouille elle même pour rajouter ce caractère de fin de chaine ?.
Non. strncpy te garantit juste qu'elle copiera au maximum sizeof machaine - 1 bytes. Si la taille de "SC CREATE" est supérieure alors il n'y aura pas de '\0'.
Google is your friend

Répondre à fiddy

18

KéKeCest ??, le 19 avr 2009 à 17:29:00

Ok,

et dans le cas contraire ?.

crdlt.

Répondre à KéKeCest ??

8

loupius, le 19 avr 2009 à 13:10:05

Slt KéKeCest ?? .

Je me permets cette petite correction sur la fonction strncpy() :

char *strncpy(char *cible, const char *source, size_t longueur)
> Copie au maximum longueur caractères de source dans cible en complétant par des caractères de code nul si taille cible > taille source.


Non, la bonne réponse est:
Copie au maximum longueur caractères de source dans cible en complétant par des caractères de code nul si longueur > taille source.

Bonne journée.

Répondre à loupius

9

KéKeCest ??, le 19 avr 2009 à 16:42:34

Re,

Je dirais oui "à priori" - faudrait que l'on compare nos sources comme justifications.

Crdlt.

Répondre à KéKeCest ??

13

loupius, le 19 avr 2009 à 17:13:52

Copie au maximum longueur caractères de source dans cible en complétant par des caractères de code nul si taille cible > taille source.
Il n'y a aucune possibilité pour la fonction 'strncpy' de déterminer 'taille cible', donc le remplissage ne peut se faire en fonction de cette taille; d'autre part à quoi servirait de passer 'longueur' ?
A+

Répondre à loupius

14

KéKeCest ??, le 19 avr 2009 à 17:20:13

Ok,

Bon on aura à peu prés compris qu'il copie les longueur 1er octets de source et qu'il complète si besoin ensuite avec des caractères nuls en finalisant le dernier octet par un '\n' (enfin j'espère pour ce dernier point).

crdlt.

Répondre à KéKeCest ??

15

KéKeCest ??, le 19 avr 2009 à 17:21:50

...oupss... par un '\0'.

crldt.

Répondre à KéKeCest ??

17

fiddy, le 19 avr 2009 à 17:27:01

Non, le dernier point est faux. Il complète par des caractères nuls si besoin.
Mais il ne finalise pas par un '\0'.
Google is your friend

Répondre à fiddy

19

KéKeCest ??, le 19 avr 2009 à 17:32:40

OK,

Donc la 2eme ligne doit être systématiquement ajoutée dans tous les cas pour obtenir une chaine en sortie saine ?.

strncpy(machaine,"SC CREATE",sizeof(machaine));
machaine[sizeof machaine - 1]='\0'; <<<----


Crldt.

Répondre à KéKeCest ??

20

 fiddy, le 19 avr 2009 à 18:05:10

Oui, de façon systématique.
La règle à retenir est qu'il faut mettre un '\0' dans le tableau de destination à l'indice n-1. n étant le nombre maximale de bytes copiés.
Une autre façon intéressante de faire est l'utilisation de strncat qui met toujours un '\0' en fin de chaîne. Par contre, il ne faut pas oublier de stocker le '\0' en début de chaîne, strncat y faisant référence.
Google is your friend

Répondre à fiddy

2

mano9, le 17 avr 2009 à 21:40:09

Merci déjà pour la réponse.

1 Pour la taille ç'est bon je n'ai pas fait cette erreur

2 Dans mon "sc create " ", j'ai justement besoin de mettre la double cote( L'avant dernière) comme caractère
dans la chaine.

3je ne veux pas mettre " ", mais plutôt "

SVP j'attends votre réponse

Répondre à mano9

3

fiddy, le 17 avr 2009 à 21:47:40

1 Pour la taille ç'est bon je n'ai pas fait cette erreur
Pourtant l'exemple que tu as donné contient cette erreur.

2 Dans mon "sc create " ", j'ai justement besoin de mettre la double cote( L'avant dernière) comme caractère dans la chaine.
Oui, ça j'ai bien compris, et c'est pour ça que je te dis qu'il faut l'échapper avec un backslash sinon cela ne marchera pas. Relis mon exemple du post 1 pour savoir comment faire.

3je ne veux pas mettre " ", mais plutôt "
En C, la chaîne est délimitée par deux apostrophes. Mais ces apostrophes ne font pas parties en eux-même de la chaîne. C'est juste pour aider le compilateur à comprendre de quoi il traite.
Google is your friend

Répondre à fiddy

4

mano9, le 17 avr 2009 à 21:54:41

Merci grandement. Je rentre l'essayer tout de suite

Répondre à mano9

5

tartALAfraise, le 19 avr 2009 à 05:40:25

Salut

je tenais juste à préciser que ton double côte est en fait "double quote"
quote est "guillemets" dans la langue de shakespeare (d'où la citation = quotation)
le double est apparu dans les salles d'enseignement (anglophones) de l'informatique où il a bien fallu faire comprendre la différence (en programmation) entre apostrophe et guillemets en mettant l'accent sur le nombre d'apostrophes à dessiner (single ou double).
Je rappelle que le public de ces cours (toutes langues confondues) n'est généralement pas versé dans la connaissance de la langue ni de sa formalisation (d'où l'utilisation de vocabulaire simplifié voire rudimentaire pour leur expliquer quelque chose ainsi que leur difficulté à formuler par écrit une description d'un fonctionnement ou d'un problème dans un langage compréhensible par leurs pairs)

Répondre à tartALAfraise