0
私が受け取った配列をstrtok()
を使って関数で引数として分割しようとしていて、単に期待通りに機能しません。 たとえば、私はこの文字列を受け取ります:"ls -l"
と私は"ls"
を得ました。 さらに、トークンを文字列の配列に格納したいと思います。ここ は、私がこれまでにやっていることです:Strtok()が適切に配列を分割しない
int mysystem(char *s) {
int i;
char *tok , *aux;
int conta = 0;
int pid, status;
int j = 0;
tok = strtok(s , " ");
while (tok != NULL) {
tok = strtok(NULL, s);
conta++;
}
char *store[conta];
i = 0;
aux = strtok(s ," ");
while (aux != NULL) {
store[i] = aux;
aux = strtok(NULL, s);
i++;
}
pid = fork();
if (pid == 0)
execvp(store[0], store);
while (j != conta) {
wait (&status);
j++;
}
return 0;
}
は、これは私が私の関数に文字列を渡しているところの主である:
int main(int args, char **arg) {
int i;
int s;
int f = 0;
if (args >= 2) {
int length = 0;
for (i = 1; i < args; ++i) {
length += strlen(arg[i]);
}
char *output = (char*)malloc(length + 1);
char *dest = output;
i = 1;
while (i < args) {
dest = strcat (dest,arg[i]);
i++;
if (i < args) {
dest = strcat (dest," ");
}
}
dest = strcat(dest, "\0");
s = mysystem(dest);
free(output);
return s;
}
}
'argv [i]'に空白( ''' ')が含まれていると、あなたのプログラムは予期せぬ動作をします。 – alk
"*トークンを文字列の配列に格納したい*"そうして、現在はコードはありません。char * store [conta];は 'char'へのポインタの配列です。 – alk
コードを一貫してインデントする方法を学びます。 – chqrlie