Non mi è chiarissimo come funzioni la strtok, ma dovrebbe ritornare un puntatore, quindi assegnerei a un puntatore il puntatore.
Tra l'altro, se chiedo solo di stampare, stampa tutte le stringhe.
Cioè, quetso codice
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 500
#define MAXW 20
int main ()
{
//char str[] ="- This, a sample string.";
char tmp[MAX], *command; //This is the string where I'm putting the line I read from the file.
//char * pch;
char **s, **s1; //This is the pointer to vectors I will allocate
FILE *fin;
int i = 0;
//open input file
fin = fopen("filein.txt", "r");
if(fin == NULL){
fprintf(stderr, "%s", "Unable to open input file\n");
exit(1);
}
//allocation of s as a vector of pointers to pointers.
s = malloc(10*sizeof(char*));
if(s == NULL){
fprintf(stderr, "%s", "Unable to allocate memory, **s\n");
exit(1);
}
while(fgets(tmp, MAX, fin) != NULL) {
command = strtok (tmp," \n");
fprintf(stdout, "%s\n", command);
i = 0;
while (i == 0 || s[i-1]!= NULL){
s[i] = strtok(NULL, " \n");
fprintf(stdout, "%d " "%s\n", i, s[i]);
i++;
}
}
return 0;
}
Stampa:
./strtok
ls
0 -l
1 -a
2 (null)
cat
0 exe6_1.c
1 (null)
mkdir
0 src
1 (null)
cp
0 main.c
1 src/
2 (null)
E quando lo eseguo col codice che ho postato prima, esegue bene ls -l -a e poi si blocca.