Win3x.Org

Windows & DOS Community

[Résolu] Input: la fonction manquante du dos.

Post Reply   Page 1 of 2  [ 16 posts ]
Jump to page 1 2 »
Author Message
Ptigiloo
Post subject: [Résolu] Input: la fonction manquante du dos.
Posted: 25 May 2004 19:17
Membre d'honneur
User avatar
Offline
 
Posts: 166
Joined: 14 Jan 2003 17:54
 
Voila, je suis en train de créer en C une belle petite application Input, qui sert à faire rentrer une variable à l'utilisateur.
Cette petite application se compile bien, mais malheureusement, elle plante. Je vous met la source actuelle du fichier Input.C et du fichier Input.H

Input.C
/*
	input.c: voila, c'est un petit programme en C
	destin? ? placer une variable DOS que l'utilisateur
	aura compl?t?e.

	syntaxe: input variable
	o? variable est le nom de la variable a rentrer.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Les Prototypes*/
#include "\BORLANDC\input.h"


/*Bon passons maintenant ? la fonction principale*/
int main(int argc, char * argv[])
{
	int retour;
	char * var ="";
	if(argc!=2)
	{
		utilisation();
		return 1;
	}
	printf("%s: ",argv[1]);
	gets(var);
	retour=variable(argv[1],var);
	return retour;
}

void utilisation()
{
	printf("input.exe, une cr?ation du PCiste.Anonyme\n");
	printf("?crit en C sous license GNU/GPL\n");
	printf("La syntaxe est la suivante:\n");
	printf("\tinput variable\n");
	printf("o? variable est le nom de la variable ? attribuer\n");
	printf("\nen cas de succ?s, input renvoie 0, sinon 1\n");
}

int variable(char * var,char * setting)
{
	int retour;
	char * appeldos="";
	strcat(appeldos, "SET ");
	strcat(appeldos, var);
	strcat(appeldos, "=");
	strcat(appeldos, setting);
	strcat(appeldos, "\n\0");
         retour=system(appeldos);
	return retour;
}
Input.H
/* 
	input.H
	Prototypes des fonctions du fichier Input.c
*/
void utilisation();
int variable(char * var,char * setting);
Je m'en remet à vous: Quelqu'un vois-t-il quelque chose qui ne va pas?
(Je précise que j'utilise Borland C++ 3 sous Dos...)


Top
Profile Quote
michel
Post subject: Ré:
Posted: 25 May 2004 20:34
Administrateur
User avatar
Offline
 
Posts: 3357
Joined: 07 Feb 2003 19:46
Retro PC: IBM - PS2 Modèle 85 (carte mère en panne)
 
Pour faire rentrer une variable où ? Parce qu'il existe déjà la commande SET :D

_________________

clikicitoraleur


Top
Profile Quote
Ptigiloo
Post subject:
Posted: 25 May 2004 20:54
Membre d'honneur
User avatar
Offline
 
Posts: 166
Joined: 14 Jan 2003 17:54
 
Je vois plutôt cette fonction utilisée dans un batch:
A moment donné, on a bseoin d'une donnée, et bien du coup avec ce input on pourrait faire rentrer à l'utilisateur cette donnée et la stocker comme variable dos.

Il faut remarquer que de tout façon, j'utilise la commande set, donc pour faire un clone de command set, c'est pas le top...
La en fait, on tape input variable,
variable étant le nom de la variable et input demande une entrée clavier.

Je vois cette commande un peu comme un équivalent de la commande input du Basic.


Top
Profile Quote
Nnay
Post subject:
Posted: 26 May 2004 14:09
 
 
C très simple: 1 pointeurs de chaînes de caractères fait planter le programme quand il voit sa taille changer:
exemple:
char *text;
char *otretext;
text="Ca va ";
otretext="planter!";
strcat(text,otretext); //text va dépasser sa capacitée pour rentrer, dans otretext
Le solution: donner une taille aux pointeurs( 255 est le maximum sous DOS pour une commande il me semble donc...)

Last edited by Nnay on 26 May 2004 15:06, edited 1 time in total.

Top
Quote
Ptigiloo
Post subject:
Posted: 26 May 2004 14:25
Membre d'honneur
User avatar
Offline
 
Posts: 166
Joined: 14 Jan 2003 17:54
 
Ok merci du coup de main :)


Top
Profile Quote
fosco
Post subject:
Posted: 26 May 2004 15:56
Membre d'honneur
Offline
 
Posts: 20
Joined: 14 Apr 2003 20:44
 
ouais, il faut que tu alloue une taille à ton char * :) (malloc)


Top
Profile Quote
inico
Post subject:
Posted: 27 May 2004 16:19
Membre inscrit
User avatar
Offline
 
Posts: 77
Joined: 17 Apr 2004 17:24
 
Faut aussi verifier toutes les entrés car meme si ce n'est pas une application serveur , on pourrait faire un debordement de tampon .
Cela ne servirait à rien en temps normal mais si la machine est public et que quelqu'un veut avoir un acces à $comspec$ dessus , ca lui plaiarait .


Top
Profile Quote
Nnay
Post subject:
Posted: 27 May 2004 17:10
 
 
Sinon,le :
printf("%s:",argv[1]);
est pas très éstethique: les noms de variable sont pas souvents explicite.
Sinon,
if(argc!=2)utilisation();
risque de faire planter le prog. car il faut un argument, pas 2.


Top
Quote
Ptigiloo
Post subject:
Posted: 27 May 2004 19:17
Membre d'honneur
User avatar
Offline
 
Posts: 166
Joined: 14 Jan 2003 17:54
 
1er Argument -> L'appel du programme
exemple: input
2e Argument -> Le nom de la variable...
exemple: variable

Ainsi on a bien 2 arguments...


Top
Profile Quote
JorgePereira
Post subject: RE
Posted: 29 May 2004 01:40
Membre inscrit
User avatar
Offline
 
Posts: 26
Joined: 07 Feb 2003 19:53
 
ç'est simples sans programmer un truc a part que t'utilise (comme dans delphi TYPE xxxx=record;) pour agrouper plein des variables sinon on utilise

SET MAVARIABLE=6000
IF ERRORLEVEL 1 GOTO ERROR
ECHO %MAVARIABLE%
GOTO FIN
:ERROR
ECHO Espace d'environement insufisant pour votre truc
:FIN
REM Fin de programme...

On peut pour cella faira un truc %COMSPEC% /E:1024 pour pas avoir des surprises avec des variables..

A+

_________________

--=FurtiF™=-- - WebMasters Associés® - RocketBot2 - NecroBot2 - Account Manager ©2001-2019.


Top
Profile Quote
Display: Sort by: Direction:
Post Reply   Page 1 of 2  [ 16 posts ]
Return to “Questions et problèmes résolus” | Jump to page 1 2 »
Jump to: