Să se scrie o aplicaţie C/C++ care alocă dinamic memorie pentru "n" şiruri de
caractere, care se vor citi de la tastatură.
Răspunsuri la întrebare
Răspuns:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
// Citim numarul de siruri de caractere
int n;
printf("Numarul de siruri de caractere: ");
scanf("%d", &n);
// Alocam memorie pentru "n" siruri de caractere
char **strings = (char **)malloc(n * sizeof(char *));
if (strings == NULL) {
printf("Eroare la alocarea memoriei pentru vectorul de siruri de caractere.\n");
exit(1);
}
// Citim sirurile de caractere de la tastatura
for (int i = 0; i < n; i++) {
char buffer[100];
printf("Sirul %d: ", i+1);
scanf("%s", buffer);
// Alocam memorie pentru sirul de caractere
int len = strlen(buffer);
strings[i] = (char *)malloc((len+1) * sizeof(char));
if (strings[i] == NULL) {
printf("Eroare la alocarea memoriei pentru sirul de caractere %d.\n", i+1);
exit(1);
}
// Copiem sirul de caractere in locatia de memorie alocata
strcpy(strings[i], buffer);
}
// Afisam sirurile de caractere
printf("Sirurile de caractere sunt:\n");
for (int i = 0; i < n; i++) {
printf("%s\n", strings[i]);
}
// Eliberam memoria alocata
for (int i = 0; i < n; i++) {
free(strings[i]);
}
free(strings);
return 0;
}
Explicație:
În această implementare, am alocat dinamic memorie pentru un vector de "n" şiruri de caractere, apoi am citit "n" siruri de caractere de la tastatură şi le-am stocat în vectorul respectiv. Am alocat dinamic şi pentru fiecare şir de caractere, astfel încât să avem suficientă memorie pentru a stoca şirurile respective. La final, am afişat şirurile de caractere şi am eliberat memoria alocată.