A l'aide please :'(

xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005 - 23 juin 2004 à 01:20
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005 - 23 juin 2004 à 13:56
Salut
je poster plusieur question ces jour si ,alors j'ai pensé de les posté toutes .
svp je voudrait que vous m'expliquez les choses qui sont un peut deficile en detaill
merci :)
voila :

les fonctions suivante font koi au juste :

-memmove : il deplace un bloc de meme mais un ex sera

meiux merci :

-memcpy : je c qu'il copie un bloc de memoire (Ex)

c koi ladifference entre une fonction avec __stdcall et sans et encore une fonction avec inline et sans .

-strstr : j'ai rien pigé la

-comment convetir un string en un char *

et finalement : #define MEMDISPO (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN)
la j'ai rien pigé
Merci
Life is Short 8-)

3 réponses

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
23 juin 2004 à 03:11
char chaine1[50];
char chaine2[50];
size_t len = 0;

strcpy(chaine1, "&*/?*/&?+_)*/Bonjour NitRic!");

/* à partir du 13e caractères sur une longeur de 15 caractères */
memmove( chaine1, chaine1+13, 15);/* les 13 premiers caractères seront 'écrasé' */
chaine1[ 15 ] = '\0';

printf("%s\n", chaine1);
/*
Affiche à l'écran:

Bonjour NitRic!

En gros, on déplace la chaine: Bonjour NitRic!
de 13 caractères vers la gauche
*/

len = strlen("Bonjour NitRic! Ca va bien?");
/*
Copie X octets dans chaine1
ici, X est représenté par 'len'
*/
memcpy( chaine1, "Bonjour NitRic! Ca va bien?", len );
chaine1[ len ] = '\0'; /* ajoute le caractère de fin de chaine(obligatoire) */
printf("%s\n", chaine1);

/*
Affiche à l'écran:

Bonjour NitRic! Ca va bien?
*/

__stdcall c'est une convention d'appel
la Win32 API par exemple, utilise cette
convention d'appel. Avec la convention d'appel
__stdcall, on ne peut pas spécifier un nombre
variable d'argument par exemple( void func(char * p, ...); )
etc ... J'ai trouvé ceci, ca sera surement plus
claire que mes explications:

- __stdcall Specifics
- A __stdcall function’s arguments are pushed onto
- the stack from right to left, and the called
- function pops these arguments from the stack before
- it returns.

- For C, the __stdcall naming convention uses the
- function name preceded by an underscore ( _ ) and
- followed by an at sign (@) and the size of the
- function’s arguments in bytes. No case translation
- is performed. The compiler uses the following template
- for the naming convention: _functionname@number

une fonction inline c'est simple
ex:

inline int Mod( int i, int a ) {
return ( i % a );
}

ensuite, dans ton code si
tu utilise cette fonction:

void main() {

int i = 5;
int a = 17;

printf("%d\n", Mod(i, a));

}

il sera traduit
de cette facon:

void main() {

int i = 5;
int a = 17;

printf("%d\n", (i % a));

}

Par contre, c'est le compilateur
qui à le dernier mot, une fonction
avec le mot clé inline ne sera pas
obligatoirement inline, c'est le
compilateur qui décide mais, pour
la fonction Mod() plus haut, il y
à je dirais 99.99% des chances que
la fonction soit inline, en gros
le compilateur remplace l'appel
de la fonction par le code qu'elle
contient

strstr() c'est simple aussi
il renvoie un pointeur sur la
première occurence de la chaine
recherché

char chaine1[50];
char * ptr = NULL;

strcpy(chaine1, "Bonjour NitRic!");

ptr = strstr( chaine1, "NitRic!" );
if ( NULL != ptr ) {
/*
Affiche à l'écran:

NitRic!
*/
printf("chaine trouve: %s\n", ptr);
}
else {
puts("chaine non trouve\n");
}

long val = 1|2|4|8|16|32;

if ( 8 & val ) {
printf("8 est present dans %d\n", val);
}
else {
printf("8 n'est pas present dans %d\n", val);
}
/*
Affiche à l'écran:

8 est present dans 63
*/

if ( 16 & val ) {
printf("16 est present dans %d\n", val);
}
else {
printf("16 n'est pas present dans %d\n", val);
}
/*
Affiche à l'écran:

16 est present dans 63
*/

val &= ~4; /* retire la valeur 4 */
if ( 4 & val ) {
printf("4 est present dans %d\n", val);
}
else {
printf("4 n'est pas present dans %d\n", val);
}
/*
Affiche à l'écran:

4 n'est pas present dans 59
*/

val |= 24; /* ajoute 24 */
if ( 24 & val ) {
printf("24 est present dans %d\n", val);
}
else {
printf("24 n'est pas present dans %d\n", val);
}
/*
Affiche à l'écran:

24 est present dans 59
*/

pour les explication à ce sujet je crois
que je serais trop vague mais, voilà
un petit lien bien sympa avec exemples:
http://www.iota-six.co.uk/c/e4_bitwise_operators_and_or_xor.asp

Voilà, je crois que c'est tout

~(.:: NitRic ::.)~
0
sybitron Messages postés 9 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 4 août 2004
23 juin 2004 à 13:37
1-Merci bcp t vraimment simpa j'ai bien aimmer t explication.

ben t vraimment genial !!!!!!!

mon prob a moi c que je ne lis pas des cours mais je prog et prog , et quand j'ai un prob et je ne comprend pas quelque choses je domande :)
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
23 juin 2004 à 13:56
SVP le msg qui est en haut celui sybitron et le mien car comme je suis sur un ordinateur public alors j'ai pas fait attention et je ne me suis pas deconecter et je poster ce msg

Encore merci NITRIC
xarier
Life is Short 8-)
0