-2

私のCプログラムでは、strtok()コマンドを使用して、内のすべてのトークンをループしますstring。各反復で、各トークンへのポインターが表示されます。

argv配列がmain関数の引数のようになり、execvpコマンドで使用できるように、ポインターを配列に格納するにはどうすればよいですか?

4

2 に答える 2

0
char *array[MAX_POINTERS];
char *str;


array[0] = str;

str ポインターがそれが指しているメモリを失うか、その内容が変更され、そのコピーを取得したい場合は、使用できますstrdup

array[0] = strdup(str);

そして、それarray[0]が役に立たなくなったら、それを解放する必要があります

free(array[0]);

注:コマンドarrayで使用できます。execvp

于 2013-01-18T17:19:06.253 に答える
0

取得するトーク数がわかっている場合は、文字列へのポインターのベクトルを作成することでそれを行うことができます。それ以外の場合は、動的構造を使用する必要があります。

サイズがわかっている場合は、次のようになります。

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;

お役に立てれば。

于 2013-01-18T17:38:51.970 に答える