Correction : Les doubles tableaux
Correction Exercice 2 :
Objectif : créer une fonction qui affiche le contenu d'un double tableau.
main.c
#include <stdlib.h>
#include <stdio.h>
#include "str_cpy.h"
#include "print_tab.h"
int main()
{
char ** str_tab = malloc(4 * sizeof(*str_tab));
str_tab[3] = NULL;
str_tab[0] = str_cpy("La vie");
str_tab[1] = str_cpy("l'univers");
str_tab[2] = str_cpy("et tout le reste.");
print_tab(str_tab);
int i = 0;
while(str_tab[i] != NULL)
{
free(str_tab[i]);
i = i + 1;
}
free(str_tab);
exit(0);
}
print_tab.c (version courte)
#include <stdio.h>
int print_tab(char **tab)
{
int i = 0;
while(tab[i] != NULL)
{
printf("%s\n", tab[i]);
i++;
}
return 0;
}
print_tab.c (version plus décomposée)
#include <stdio.h>
int print_tab(char **tab)
{
int i = 0;
while(tab[i] != NULL)
{
int j = 0;
while(tab[i][j] != '\0')
{
printf("%c", tab[i][j]);
j++;
}
printf("\n");
i++;
}
return 0;
}
print_tab.h
#ifndef __PRINT_TAB_H__
#define __PRINT_TAB_H__
int print_tab(char **tab);
#endif
str_len.c
int str_len(char *str)
{
int i;
int len;
i = 0;
len = 0;
while(str[i] != '\0')
{
i++;
len++;
}
return(len);
}
str_len.h
#ifndef __STR_LEN_H__
#define __STR_LEN_H__
int str_len(char *str);
#endif
str_cpy.c
#include <stdlib.h>
#include "str_len.h"
char *str_cpy(char * str)
{
char *cpy = NULL;
int length = str_length(str);
cpy = malloc(length * sizeof(char));
int i = 0;
while(str[i] != '\0')
{
cpy[i] = str[i];
i = i + 1;
}
return(cpy);
}
str_cpy.h
#ifndef __STR_CPY_H__
#define __STR_CPY_H__
char *str_cpy(char * str);
#endif
Makefile
# Makefile
NAME = ex-2
SRCS = main.c \
str_len.c \
str_cpy.c \
print_tab.c
all : $(NAME)
$(NAME): $(SRCS)
gcc $(SRCS) -o $(NAME)
fclean:
rm -f $(NAME)
re: fclean all
16 October 2025