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, 19:17
Membre d'honneur
User avatar
Offline
 
Posts: 94
 
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
Quote
michel
Post subject:
Posted: 25 May, 20:34
Administrateur
User avatar
Offline
 
Posts: 2845
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


Top
Quote
Ptigiloo
Post subject:
Posted: 25 May, 20:54
Membre d'honneur
User avatar
Offline
 
Posts: 94
 
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
Quote
Nnay
Post subject:
Posted: 26 May, 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, 15:06, edited 1 time in total.

Top
Quote
Ptigiloo
Post subject:
Posted: 26 May, 14:25
Membre d'honneur
User avatar
Offline
 
Posts: 94
 
Ok merci du coup de main :)


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


Top
Quote
inico
Post subject:
Posted: 27 May, 16:19
Membre inscrit
User avatar
Offline
 
Posts: 77
 
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
Quote
Nnay
Post subject:
Posted: 27 May, 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, 19:17
Membre d'honneur
User avatar
Offline
 
Posts: 94
 
1er Argument -> L'appel du programme
exemple: input
2e Argument -> Le nom de la variable...
exemple: variable

Ainsi on a bien 2 arguments...


Top
Quote
JorgePereira
Post subject:
Posted: 29 May, 01:40
Membre inscrit
User avatar
Offline
 
Posts: 38
Retro PC: Hp Compaq nc6120
 
ç'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-2023.
https://github.com/Furtif


Top
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: