Cześć wszystkim,
Dość dziwne rzeczy dzieją się w moim programie wczytującym słownik "English.txt" (w załączniku) do tablicy dynamicznej. Podczas zapisywania słów w tablicy pomijam '/n', tak więc według mnie każdy wiersz tablicy dynamicznej powinien się składać ze słowa oraz '/0' tuż po nim. Pomimo tego, funkcja strlen twierdzi, że słowo w pierwszej linijce ma 4 znaki (w rzeczywistości 3, jest to słowo "AAA"). Ponadto nie mogę wyświetlić 8 pierwszych wyrazów, jeśli nie użyję '\n' po wyświetleniu każdej linijki (po odkomentowaniu linii "// printf("\n");" działa OK). Czy ma ktoś pomysł co może być tego przyczyną?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main()
{
FILE *fp;
char wczytane[32];
int r;
int n;
int i,j;
if ((fp = fopen("English.txt", "r")) == NULL)
{
perror("Nie udalo sie otworzyc pliku English.txt");
return 1;
}
n = 0;
while ((r = fscanf(fp, "%*40s")) != EOF)
n++;
if (ferror(fp) != 0)
{
fprintf(stderr, "error: read file" "\n");
fclose(fp);
return 1;
}
if (n == 1)
printf("Slownik ma %d slowo." "\n", n);
else
printf("Slownik ma %d slow." "\n", n);
char** slow_ang = (char**)malloc(n * sizeof (*slow_ang)); /* 1 */
for(i=0; i<n; ++i) /* 2 */
{
slow_ang[i]= (char*)malloc(32 * sizeof (**slow_ang));
}
rewind(fp);
for(i=0; fgets(wczytane, sizeof wczytane, fp); i++)
{
for(j=0; wczytane[j]!='\n'; j++)
slow_ang[i][j]=wczytane[j];
}
// wyswietlanie 8 pierwszych wyrazów
for(i=0; i<8; i++)
{
for(j=0; slow_ang[i][j]!='\0'; j++)
printf(",%c", slow_ang[i][j]);
// printf("\n");
}
printf("\nPierwsze slowo ma dlugosc: %zu", strlen(slow_ang[0]));
for(i = 0; i < n; ++i)
free(slow_ang[i]);
free(slow_ang);
}