Vous n'êtes pas identifié(e).
Pages : 1
Je l'ai évoqué sur le chat irc et je l'ai nettoyé un peu, plus mis dans une lib séparé pour plus de facilité, la voici:
{ util.h }
[== C++ ==]
/*
* This lib contain the strnsplit function. Just import it and use.
*
* Usage : char* strnsplit ( char* str, char* buffer, int position, int size );
*
* This source code is under GNU GPL v3 license, you can use or modify it but
* please don't forget giving some credits to the author.
*
* by WarLocG
*/
#if defined (__GNUG__) || defined (__cplusplus)
#include <iostream.h>
#include <cstring.h> /* strlen() */
#else
#include <stdio.h>
#include <string.h> /* strlen() */
#endif
#ifndef __BUFFER__
#define __BUFFER__ 255
#endif
char* strnsplit(char* str, char* buffer, int start, int size);
extern char buffer[__BUFFER__]; /* can be imported from other source */
char* strnsplit(char* str, char* buffer, int start, int size){
int i;
/* stopping if
* - size encountered ; str="abc" size=2 result="ab"
* - str length lesser than size ; str="abc" size=6 result="abc"
* - buffer overflow ; strlen(str) > BUFFER && size > BUFFER
*/
for (i = 0; (i<__BUFFER__-1) && (i<size) && (i<strlen(str)); i++){
/*buffer[i] = str[start+i];*/
*(buffer+i) = *(str+start+i);
}
/*buffer[i] = 0; *//* caracter '\0' at end */
*(buffer+i) = 0;
return buffer;
}
J'ai conservé les tableaux scalaires en commentaires pour ceux qui sont plus a l'aise avec des tableaux, mais c'est plus rapide de travailler avec des pointeurs.
Un fichier d'exemple pour le tester ici:
{ example.c }
[== C++ ==]
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> /* isdigit(), atoi() */
#include "util.h" /* la lib a tester */
char buffer[__BUFFER__]; /* redefinissez une variable buffer comme suit pour utiliser la fonction */
int test(char* str){
int i=0;
while (*(str+i)){
if (!isdigit(*(str+i))) return 0; /* sortir avec resultat faux si le caractere n est pas un numerique */
i++;
}
return 1; /* resultat = vrai ; la chaine est composée exclusivement de caracteres numeriques */
}
int main(int argc, char* argv[]){
if (argc != 4 || (!test(argv[2])) || (!test(argv[3]))){
puts("Syntaxe: cmd string position taille");
puts(" exemple: ./run abcdefghijklmnopqrstuvwxyz 13 8");
exit(0);
} else {
printf("resultat : %s\n",
strnsplit(argv[1],buffer,atoi(argv[2]),atoi(argv[3]))
);
}
return 0;
}
Compilation:
gcc -Wall -pedantic -o $votreexecutable example.c util.h
Test:
./$votreexecutable abcdef 2 4
Hors ligne
Et la réponse du test donne quoi ?
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
Hors ligne
Pages : 1