[ C ] copier ds un tableau apres un read?

lcstriker Messages postés 1 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 25 novembre 2004 - 25 nov. 2004 à 14:47
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005 - 29 nov. 2004 à 07:53
bonjour!!!

g un leger probleme, que je suis sur vous serai nombreux a pouvoir resoudre:

#include <fcntl.h>
#define BUFF_SIZE 42

int main(int ac, char **av)
{
char *temp;
int nb_read;
char buffer_read[BUFF_SIZE];
int fd;

if (ac == 1)
my_putstr("et le fichier boulet!!!\n");
if (ac == 2)
{
fd = open(av[1], O_RDONLY);
while (nb_read = read(fd, buffer_read, 1))
{
my_putstr(buffer_read);
}
}
}

j'aimerai (a la place du my_putstr), copier le buffer_read dsa un tableau ou un char *?

merci de votre aide.

3 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 nov. 2004 à 14:59
si null terminated string, strcpy par exemple
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
27 nov. 2004 à 19:24
préférer strncpy.....évite le risque de stackoverflow
0
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
29 nov. 2004 à 07:53
int my_putstr ( int read_buf_len, char *read_buf, char *table){
// Je passe la longueur de read_buf pour eviter tout debordement
// ne pas oublier que read peu retourner -1 en cas d'erreur ( la condition du while est toujours vraie -):

// je passe aussi le pointeur sur le read buffer
// enfin le pointeur sur la table de reception

if (read buf_len > 0)
// check la longueur est strictement superieure a 0

// strncpy ne serait pas utile dans cet example vu que le read est de 1 mais il rend la fonction plus generique
if strncpy ( table, read_buf,read_buf_len ) > 0 ) return 0;

// sans strncpy
table = read_buf ; return 0;
return -1;
}

// la connexion avec ton code serait ainsi :
// cas du char *
char my_table[BUF_SIZE] ;
// cas du char ** le tableau
char *my_table[BUF_SIZE] ;

int n = 0;
while ((nb_read = read(fd, buffer_read, 1)) && ( n < BUF_SIZE))
{
// cas d'un char *
if (( my_putstr(1,buffer_read, &table[n++]) < 0 ) exit 1;
// cas d'un char **
// penser a "malloquer" la table
if (( my_putstr(nb_read,buffer_read, table[n++]) < 0 ) exit 1;
}

Amicalement
Yves
0
Rejoignez-nous