chaines de caractere... si simple ! - C - Programmation
Marsh Posté le 12-08-2008 à 00:02:40
une chaine de caractére, ca s'alloue avant de faire joujou : malloc et free
comparaison : strcmp
copie : strcpy
Marsh Posté le 12-08-2008 à 10:04:42
Dans son cas précis (3 caracteres a comparer avec trois autres), malloc/free semble un poil le fusil a éléphant pour chasser la grenouille. Un buffer de 4 caracteres semble suffisant.
Bon, apres, il faut plus de details sur l'algorithmique de son code pour juger de la strategie la plus efficace.
A+,
Marsh Posté le 12-08-2008 à 10:36:23
gilou a écrit : Dans son cas précis (3 caracteres a comparer avec trois autres), malloc/free semble un poil le fusil a éléphant pour chasser la grenouille. Un buffer de 4 caracteres semble suffisant. |
Certes pour malloc, reste qu'il faudrait plsu de détails :€
Marsh Posté le 12-08-2008 à 10:49:38
Merci de réponses,
mais comment je peux faire ça :
//ici-lieu du code, j'aurais aimé faire ca:
chaine=data[0]+data[2]+data[3];
printf(chaine);
Marsh Posté le 12-08-2008 à 12:13:07
Code :
|
En gros et de tête
Marsh Posté le 12-08-2008 à 12:30:33
Tu veux chaine=data[0]+data[2]+data[3];
TU fais
chaine[0] = data[0];
chaine[1] = data[2];
chaine[2] = data[3];
chaine[3] = 0;
Marsh Posté le 12-08-2008 à 12:33:27
je pense que c'est 0,1,2 vu son code initial. Doit y avoir une typo. Si c'est le cas, strncpy fait très bien l'affaire
Marsh Posté le 12-08-2008 à 12:44:37
Joel F a écrit : je pense que c'est 0,1,2 vu son code initial. Doit y avoir une typo. Si c'est le cas, strncpy fait très bien l'affaire |
Ça m'apprendra à ne pas lire les topics en entier
Marsh Posté le 12-08-2008 à 19:30:05
Merci pour vos réponses,
mais je n'arrive pas du tout à faire ce que je souhaite.
j'aimerais juste mettre la valeur afficher par => printf( "%c", data[0]);
dans une variable.
ce que je comprends dans printf( "%c", data[0]);
c'est que cela affiche la chaine contenu dans data[0]
je peux pas simplement ( même très simplement) la mettre dans une variable?
PS : je suis obligé de faire du C....
dans tous les autres langages on fait ça en 2 sec ! ....
C'est possible ou non?
Marsh Posté le 12-08-2008 à 20:32:41
pas de réponse???
perso je testes encore et encore et j'avoue qu'un coup de main serait vraiement le bienvenu !
ce test ne fonctionne pas non plus,
if (printf( "%c", data[0])=="M" )
{
printf(" M victoire ! " ); //je voudrais passé dans cette condition
}
else
{
printf(" DTC! " );
}
--------------------------------
si une idée vous vient ... je suis preneur !
Marsh Posté le 12-08-2008 à 20:50:25
Il faut absolument que tu lises un bouquin de C.
printf est une fonction qui ecrit sur la sortie standart : stdout, la valeur de variables qui sont définis dans les arguements 2, 3, 4 ... de la fonction.
data est une chaîne de caractères. en C, celà signifie que data est un tableau de caractères. Pour que la chaîne soit valide, il faut que l'un des caractères soit 0.
Chauqe élément de data, data[0], data[1] ... est uncaractère, comme 'c', 'M' ...
Maintenant, analysons ce que tu as écrit, et tu vas voir que ça n'est pas du tout ce que tu crois :
if (printf(%c", data[0]) == "M" )
printf est une fonction donc renvoie une valeur, la valeur est le nombre de caractères écrits, ici 1.
Donc 1 est comparé à l'adresse mémoire de la chaîne "M", en effet, à la compil, la chaîne "M" a été stockée en mémoire quelque part, donc quelque part il y a un 77 (code ASCII decimal de M) et puis un 0.
Autant-dire que la comparaison échoue !
Ce que tu veux sans doute faire c'est
Code :
|
Citation : 'aimerais juste mettre la valeur afficher par => printf( "%c", data[0]); |
C'est très simple :
Code :
|
Marsh Posté le 11-08-2008 à 23:49:49
bonjour,
j'aurais aimé un petit coup de main...
je dois joué sur les chaines de caractère en C... donc c'est pas gagné du tout!
je m'explique,j'ai code que voici :
----------
for(k = 0 ; k < 16 ; k++, j++)
{
if(data[j] < 127 && data[j] > 31)
{
//ici-lieu du code
----------
//ici-lieu du code, j'aurais aimé faire ca:
chaine=data[0]+data[2]+data[3];
printf(chaine);
j'ai essayé ca :
fprintf(stdout, "%c", data[0]); //affiche le M
fprintf(stdout, "%c", data[1]); //affiche le S
fprintf(stdout, "%c", data[2]); //affiche le G
ceci m'affiche bien ce que je souhaite, mais j'ai besoin de comparé ces chaines donc je bloques..
il me faudrait tout ça dans une variable pour faire des tests (contrairement à maintenant ou je fais qu'afficher un résultat).
C'est tout con, mais m***** !
Merci d'avance.
Newguy