Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int readwordlist(char **wordarray, char *listfilename);
/* start main */
int main(int argc, char **argv)
{
/* char *prog=argv[0]; */
char *wordlist=argv[1];
int wordnumber;
char **words;
wordnumber=readwordlist(words, wordlist);
fprintf(stdout, "Es wurden %d Woerter eingelesen.\n", wordnumber);
return 0;
}
/* end main */
int readwordlist(char **wordarray, char *listfilename)
{
FILE *fp;
char c;
char buf[100]; /* Maximale Wortlaenge */
int index=0;
int number=0; /* Die Anzahl der eingelesenen Woerter */
if((fp=fopen(listfilename, "r")) == NULL)
{
fprintf(stderr, "Wortliste %s konnte nicht gelesen werden.\n", listfilename);
exit(5);
}
/*TODO: Vielleicht mit Zeigern arbeiten */
while((c=getc(fp)) != EOF)
{
if(index == 100)
{
fprintf(stderr, "Wortliste %s enthaellt zu langes Wort.\n", listfilename);
exit(6);
}
if( (c == ' ' || c == '\t' || c == '\n') && index > 0)
{
buf[index]='\0';
/* Speicher freigeben und puffer in *wordarray kopieren */
if(( wordarray=malloc((index+1)*sizeof(char)) ) == NULL)
{
fprintf(stderr, "Speicher konnte nicht freigegeben werden.\n");
exit(8);
}
/* FUNKTIONIERT: *wordarray="TEST"; */
fprintf(stdout, "In buf liegt: \"%s\".\n", buf);
fprintf(stdout, "Index=%d.\n", index);
fprintf(stdout, "**wordarray hat die Groesse %d.\n", sizeof(**wordarray));
fprintf(stdout, "*wordarray hat die Groesse %d.\n", sizeof(*wordarray));
fprintf(stdout, "wordarray hat die Groesse %d.\n", sizeof(wordarray));
/* NOTE: LOEST SEGMENTATION FAULT AUS: */ strncpy(*wordarray, buf, index+1);
wordarray++;
number++;
index=0;
}
else
{
buf[index]=c;
index++;
}
}
fclose(fp);
if(number == 0)
{
fprintf(stderr, "Es konnte kein Wort aus %s eingelesen werden. Datei leer?\n", listfilename);
exit(7);
}
return number;
}
Code: Select all
fprintf(stdout, "**wordarray hat die Groesse %d.\n", sizeof(**wordarray));
fprintf(stdout, "*wordarray hat die Groesse %d.\n", sizeof(*wordarray));
fprintf(stdout, "wordarray hat die Groesse %d.\n", sizeof(wordarray));
**wordarray hat die Groesse 1.
*wordarray hat die Groesse 4.
wordarray hat die Groesse 4.
ist. (also **wordarray ist klar, weil's halt char ist.)
Befehle wie " **wordarray='t'; " brechen ebenfalls mit einem seg fault ab.