Der Knackpunkt sind diese Zeilen:
Code: Alles auswählen
while(fscanf(try,"%s",in[i]) != EOF) /* 1 */
{
printf("%s",in[i++]); /* 2*/
}
Die mit 1 und 2 markierten Zeilen erwarten (in der hier verwendeten Konstellation) als letzten Parameter einen Pointer auf den Typ char.
Du übergibst aber in beiden Fällen einen char und keinen Pointer auf einen char.
Was dann passiert ist, daß der C-Code den übergebenen Wert als Pointer deutet. Und der zeigt entweder auf 0 (wenn das char-Array mit 0 initialisiert wurde, was der Compiler AFAIK aber nicht machen muß) oder an eine zufällige Stelle im Speicher. Ersteres führt garantiert, zweiteres höchstwahrscheinlich zu einem segfault.
Du könntest stattdessen
Code: Alles auswählen
while(fscanf(try,"%s",&in[i]) != EOF)
{
printf("%s",&in[i++]);
}
schreiben, dann wird der Code (zumindest bei kleinen Dateien) nicht mehr abstürzen, aber er macht auch nicht das, was Du wahrscheinlich möchtest, da fscanf(fp,"%s", pchar) nicht nur ein Zeichen einliest, sondern bis zum nächsten Whitespace.
Wenn Du ein fscanf auf "eins zwei" losläßt, dann steht in i[0] - i[4] das Wort "eins" (also i[0]='e', i[1]='i', ..., i[4]='\0'). Beim nächsten Schleifendurchlauf würdest Du das nächste Wort ab i[1] einlesen. Dann stände von i[1] - i[5] das Wort "zwei", im gesamten Array das Wort "ezwei".