私のCプログラムでは、strtok()
コマンドを使用して、内のすべてのトークンをループしますstring
。各反復で、各トークンへのポインターが表示されます。
argv
配列がmain関数の引数のようになり、execvpコマンドで使用できるように、ポインターを配列に格納するにはどうすればよいですか?
私のCプログラムでは、strtok()
コマンドを使用して、内のすべてのトークンをループしますstring
。各反復で、各トークンへのポインターが表示されます。
argv
配列がmain関数の引数のようになり、execvpコマンドで使用できるように、ポインターを配列に格納するにはどうすればよいですか?
char *array[MAX_POINTERS];
char *str;
array[0] = str;
str ポインターがそれが指しているメモリを失うか、その内容が変更され、そのコピーを取得したい場合は、使用できますstrdup
array[0] = strdup(str);
そして、それarray[0]
が役に立たなくなったら、それを解放する必要があります
free(array[0]);
注:コマンドarray
で使用できます。execvp
取得するトーク数がわかっている場合は、文字列へのポインターのベクトルを作成することでそれを行うことができます。それ以外の場合は、動的構造を使用する必要があります。
サイズがわかっている場合は、次のようになります。
char **mytokens = malloc(MAXSIZE*sizeof(char*)); /*Allocation of a vector of pointers to strings*/
while(there_are_tokens && counter < MAXSIZE){
mytokens[counter] = strtok(NULL,mystring); /*Assuming you did strtok with delims before*/
counter++;
}
動的な実装については、いくつかのドキュメント/チュートリアルを読む必要があります ( 1 / 2 / 3 )
しかし、このような構造体は私がやろうとしている方法です:
typedef struct _tokens{
char *token;
struct _tokens *next;
}tokens;
お役に立てれば。