Programmation bas niveau (BNV) Help

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