Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[DEV-CPP]ARCHIVAGE DES LIENS D'UNE RECHERCHE SUR GOOGLE


Information sur la source

Description

Bonjour
Je me présent, je m'appelle Sébastien, j'ai 16 ans et programme en C depuis cet été, donc pour moi depuis peut. J'ai réalisé cette source pour m'amuser, mais certain de mes amis on trouvé ce code intéressant donc pour remercier l'Open Source car c'est ce concept qui m'a appris a programmer en C, je donne mes sources pour que d'autres puissent l'utiliser ou ce que je préfère APPRENDRE avec cette source.
Cette source est un peut brouillon je sais mais voila...
Cette source est programmé sur dev-cpp avec les librairies de base et elle est complète.!
Comme c'est ma première source j'aimerais bien savoir ce que vous en pensez.
 

Source

  • #include <urlmon.h>
  • #pragma comment(lib, "Urlmon.lib")
  • int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  • URLDownloadToFile(0, "zip", "zip.zip", 0, 0);
  • return 0;
  • }
#include <urlmon.h>
#pragma comment(lib, "Urlmon.lib")

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {  
	URLDownloadToFile(0, "zip", "zip.zip", 0, 0); 
	return 0;
}

Conclusion

Si vous avez des remarques, des questions des améliorations ou n'importe quoi laissez un maissage!
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • DoxyfileTélécharger ce fichier [Réservé aux membres club]9 767 octets
  • googlesearch.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier18 326 octets
  • googlesearch.ex_Télécharger ce fichier [Réservé aux membres club]37 242 octets
  • googlesearch.oTélécharger ce fichier [Réservé aux membres club]19 365 octets
  • googleserach.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier18 204 octets
  • googleserach.devTélécharger ce fichier [Réservé aux membres club]913 octets
  • Makefile.winTélécharger ce fichier [Réservé aux membres club]1 488 octets

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de max12 le 22/05/2007 12:15:10 administrateur CS

C'est bien jolie :D Mais juste un conseil d'ami, utilise FormatMessage avec GetLastError au lieu d'utiliser un switch avec toutes les erreurs possibles, tu va épargner du temps et réduire un peu la taille du .exe

A+

signaler à un administrateur
Commentaire de Cyr62110 le 22/05/2007 17:23:08

Trés belle source mais bon t'as du pas mal t'aidé des sources sur le web car utiliser WinSock aprés moins d'un an de programmation faut avoir du courage.
Bon courage pour la suite.

signaler à un administrateur
Commentaire de sebastienmz le 23/05/2007 11:52:22

en fait je programme depuis que j'ai 8 ans et comme je vais bientôt avoir 17 ça fera 9 ans que je programme j'ai commencer pas le pascal après le delphi pendant 3 ans (je continu) et  après le vb et maintenant le C, j'aurais voulu faire cette source en objet mais je trouve que l'objet (ATTENTION VOUS NE SEREZ PAS D'ACCORD AVEC MOI) c'est de la merde c'est pour cela que je suis passé au C, par exemple ceux qui se prétende "PROGRAMMEUR EN C++ (with classes) et qui utilise des malloc a la place de new frenchement C'EST NULL COMME LES CLASSES. Quand même le concept objet est BIEN mais a l'application c'est plus simple mais l'objet pour mes programmes que j'ai fais en Objet me prend plus de ligne que un bon vieux programme en BON C (peut être que c'est moi je problème avec l'objet mais je suis complètement allergique a ce concepte). Parlons de winsock c'est pas si complique car dans mon travaille je code beaucoup avec winsock et donc j'ai l'abitude, c'est mon travaille (je suis apprenant en sécu informatique) qui ma appris le C, franchement je trouve winsock super simple ce que je trouve plus dure c'est les memcpy ou le glut, opengl
bon pour cette source elle a été faite en 6 heure !
mon vrais problème c'est pour le recv j'aimerais d'abord savoir la taille que je reçois et après je prend les données, cela a été mon vrais problème
et j'ai de la chance, regarder le code source des recherches sur google il y a des balises pour indiquer le début des résultats et la fin donc cette source a pas été si compliquée a réaliser!    

signaler à un administrateur
Commentaire de Cyr62110 le 23/05/2007 12:30:31

Moi, je ne suis pas un fan des technologies du web. Oui je sais programmer en html, CSS et php mais bon c'est juste pour essayer de faire un site web. Sinon pour winsock, j'ai essayer pendant environ 1 mois, c'est de la que viennent mes connaissances. Aujourd'hui j'ai abendonner les sockets pour me remettre à la programmation local sans utiliser Internet, je tente d'apprendre l'ASM pour optimiser mes sources.
Bye

signaler à un administrateur
Commentaire de Thaeron le 23/05/2007 22:37:41

Salut, j'ai porté ton code sous linux pour le tester.
Il est plein de maladresses (excusables vu que ça fait peu de temps que tu fais du C) mais aussi d'erreurs.
Je vais en détailler le maximum mais je vais sûrement en oublier (surtout que j'ai pas fini de tout corriger).
On commence avec le main :
rech = (CHAR *) malloc (len_argv1 + 1);
rech[len_argv1 + 1] = '\0';
(idem pour path)
C'est faux bien sûr ! tu écris au delà de ce que tu as alloué, la ligne correcte est : rech[len_argv1] = '\0';
Ensuite :
      memcpy (path, argv[2], len_argv2);
      path[len_argv2 + 1] = '\0';
      sprintf (path, "%s.txt", argv[2]);
(passons sur le +1) a quoi ça sert de faire un memcpy() si ensuite tu écrases tout par sprintf() ? Pire ! tu as alloué pour la taille de argv[2] et tu écris 4 caractères de plus, donc tu débordes !
Puis un appel à resolv() en lui passant un const char*, or dans resolv tu as "  gethostname (host, sizeof (host));" donc un coup de page de manuel et je vois que gethostname place le nom d'host dans la chaine qu'on lui file en premier paramètre soit ici un const ! Donc c'est très mal (sous linux ça plante le prog direct), en plus cette fonction (dans ton utilisation) est absolument inutile.

On arrive à la fonction connect () :
int re[MAX_RECV];
  for (i = 0; i <= MAX_RECV; i++)
    re[i] = 1;
Et bam un overflow de plus, si tu alloues x entiers, ils vont de 0 à x-1
donc la ligne correcte est for (i = 0;i < MAX_RECV; i++)
Ensuite tu copies des machins dans buffer:
memcpy (buffer, begin, strlen (begin));
Tu utilises memcpy() mais tu ne recopies pas le caractères '\0' signalant la fin de la chaîne du coup le strcat() suivant va planter.
Et si tu te dis "oui mais j'ai mis memset() à 0 avant" j'expliquerais après pourquoi tes memset() sont faux.
Bon après j'ai viré ton thread pendant le portage vu qu'il est totalement inutile, donc je ne sais pas si cette partie est buggée ou non.
Valgrind m'indique des problèmes dans ton parser mais il est un "peu" trop bordélique pour que je m'y penche.

Donc venons aux erreurs "pas grave mais presque" :
il faut utiliser sizeof() avec des tableaux que s'ils ne sont pas dynamiques, ce qui fait que       rech = (CHAR *) malloc (len_argv1 + 1);
      memset (rech, 0, sizeof (rech));
c'est faux car le sizeof() d'un pointeur c'est 4 (sur une architecture 32 bits). Donc tes memset() ne vont mettre à 0 que 4 octets.

Quelques conseils :
si tu veux vraiment mettre à 0 ta chaine allouée : utilise calloc() qui va le faire très bien (ça va malloc + memset). si tu veux dupliquer une chaine utilise strdup() qui malloc() + strcpy(). Lorsque tu veux copier une chaine n'utilise pas memcpy() mais strcpy() et tu n'auras pas à mettre le '\0' de fin de chaine manuellement. Si tu veux comparer des chaines, ne fait pas caractère par caractère dans un if, utilise strcmp() ou strncmp().

Si tu veux faire une chaine directement intialisée et dans laquelle tu ne copieras pas de données, ne fait pas : char begin[1000] = "GET /search?q="; qui gaspille la mémoire mais tout simplement char begin[] = "GET /search?q="; le compilo mettra la taille tout seul comme un grand.
Ne met pas plein de variables globales ! Les variables globales c'est mal ! Du moins en abuser c'est mal.
Ne déclare pas n'importe où tes variables, en C elles ont des places bien définies pour une portée qui est aussi bien définie donc c'est soit en début de fichier, soit en début de fonction, soit en début de bloc mais pas en plein milieux d'un bloc (cas de wsaData dans ton main).
Pour finir n'utilise pas des threads si elles ne servent à rien, si tu lances un thread c'est pour continuer ensuite l'exécution et non pour attendre qu'il se finisse pour ensuite continuer l'exécution.

Derniers conseils (plus larges) : use et abuse des pages de manuels (surtout qu'elles sont meme en français), passe à linux pour pouvoir utiliser valgrind par exemple, il te permettra de vérifier que ton programme fonctionne correctement sans des bugs cachés.
J'espère que tu n'as pas mal pris mes remarques/conseils/corrections et que tu vas nous mettre à jour ce code par une nouvelle version toute propre et exempte de bugs.
Je te souhaite bon code.
Enjoy,
Thaeron

signaler à un administrateur
Commentaire de sebastienmz le 24/05/2007 11:39:34

Pour l'assembleur ce qui pourrais s'intéresser c'est les protection anti-debugger ou anti-machine virutelle dans du code en C si quelqu'un pourrait me renseigner ça serait sympa

signaler à un administrateur
Commentaire de sebastienmz le 24/05/2007 11:52:53

Donc je vais corriger tous ça mais je comprend pas je calcule la taille des argv et ensuit j'alloue l'espace COMPREND PAS si tu peut un peut approfondir le sujet des malloc car j'ai pas compris
strdup()ça fait un moment que l'on m'en parle mais j'ai pas vraiment compris
Calloc je connais le nom mais rien de plus
A les thread J'ADORE CA C'EST UNE DES MEILLEURS PARTIE DU C, mais en faite j'ai mis des thread pour avoire un time out sur la reception du contenu car quand je l'ai fait je n'étais pas sur une bonne ligne et certain packet prennais trop de temps a arriver.
Pour la requete je vais corriger ça toute suite
Pour linux je suis en multi boot avec aussi plusieur vmware et pour les man je fait GOOGLE man la fonction
je te remercie pour ton aide je vais corriger tout ça ce soire !
MERCI !!!

signaler à un administrateur
Commentaire de Thaeron le 24/05/2007 12:39:56

Quand tu fais : rech = (CHAR *) malloc (len_argv1 + 1);
si len_argv1 vaut 10 par exemple, tu alloues 11 caractères donc de *(rech + 0) à *(rech + 10) ou en encore de rech[0] à rech[10] ; Donc si tu fais rech[len_argv + 1] = '\0' c'est équivalent dans l'exemple à rech[11] = '\0' !
Pour le timeout, 2 conseils : utilise select() pour ne pas bloquer sur recv() (ça te permettra de recevoir les données que lorsqu'il y'en a de disponible et de virer ton thread), et si tu veux détecter la fin de la transmission de la page utilise HTTP/1.0 à la place de HTTP/1.1, le serveur fermera la connexion une fois la page transmise.

Pour stdup() et calloc() les pages de manuels sont tes amies.
Enjoy,
Thaeron

signaler à un administrateur
Commentaire de fagroud le 16/12/2008 00:49:58

s'il vous plait aidez moi
je viens de faire mes premiers pas avec dev c++ , franchemant c'est un bon environnement pour prigrammer sauf moi j'ai l'habitude d'utliser le  c sous dos
j'ai trouvé des difficultés à executer mes programmes qui d'aileurs sont bien compilé mais lors de l'excution j'ai un message d'erreur sous forme d'une fenêtre windows et l'execution s'arrete surtout lorsque je manipule les pointeurs avec reservation de la mémoire avec calloc
voici la source
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int *file;
int ar,ae,drapeau_aj,drapeau_sup,creer,choix,test,dmax;
void  creafile(int *e, int *r, int *v,int n)
{
  
   v=(int *)calloc(n,sizeof(int)))
      
    (*e)=0;
    (*r)=0;

}
int filevide(int *e,int *r,int drapeau)
{
int vide;
if((drapeau==1)&&(*e)==(*r)) vide=1;
else vide=0;
return(vide);
}
int filepleine(int *e,int *r,int drapeau)
{
int pleine;
if((drapeau==1)&&(*e)==(*r)) pleine=1;
else
{pleine=0;}
return(pleine);
}
void ajouter(int *r, int *v,int n)
{
int ajout;
printf("n Merci de preciser la valeur antiere a ajouter dans la file \n");
scanf("%d",&ajout);
v[(*r)]=ajout;
(*r)=(*r)+1;
if((*r)>=n)(*r)=0;
printf("\n valeur %d ajouter avec succes\n",ajout);
}
c'est la partie ou il ya un probléme
pourtant sous l'environnement dos le prigramme s'execute sans aucun probléme
votre aides s'il vous plait

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Recherche [ par victorcoasne ] Je voudrais faire une recherche : Il cherche un mot dans tous les dossiers désirésVous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!Le cr Socket + http [ par Akylon ] Voila je veux recuperer des documents par le protocole http avec la fonction suivante: void traitement(SOCKET client){ int lg; char* requete="GE timeout client Http [ par houssadotcom ] Bonjour,mon programme fait des requetes http avec les classes Atl,mon probleme est que certaine requete http ne reponde pas et je voudrais qu'il y ai timeout client Http [ par houssadotcom ] Bonjour,mon programme fait des requetes http avec les classes Atl,mon probleme est que certaine requete http ne reponde pas et je voudrais qu'il y ai requete http sur www.imdb.com [ par InsAne0 ] Bonjour tout le monde,Je voudrais pouvoir telecharger page du site www.imdb.com tel que http://www.imdb.com/title/tt0062622/ par exemple.Mais je pense Winsock et les accents... [ par fredsor ] Salut a tous, Voila j'ai realisé un projet, celui-ci consiste à récupérer une chaine de caracteres provenant d'une servlet distante.Bon jusque là rien je recherche iphlpapi.lib [ par warmup1992 ] Salut à tous,je fais   appelle a vous car je cherche cette librairie -&gt; iphlpapi.lib...J'ai fais les 10 premières pages de google en tapan "iphlpap identification dans requete http [ par albertoC ] bonjour,je ne suis pas sûr d'être sur le bon forum pour formuler ma question, mais la voilà tout de même :à partir d'un programme c++, je dois me conn Cherche programmeur c-script ou c++ pour simulateur de manèges [ par elkion ] j'aimerai réunir un maximum de personnes sur un projet de création de simulateurs de fete foraine, je représentes le premier site de fetes foraines de Initialisation de Requette http [ par le boulet ] La vie c'est fait à base d'amitiéSalut a tous. Et vi encore moi !J'aurais aimé savoir comment je peux faire pour que dans mon programme je selectionne


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,733 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.