Vì bạn đã xem strtok
chỉ cần tiếp tục xuống cùng một đường và chia chuỗi của bạn bằng cách sử dụng dấu cách (' '
) làm dấu phân tách, sau đó sử dụng thứ gì đó là realloc
để tăng kích thước của mảng chứa các phần tử được chuyển đến execvp
.
Xem ví dụ bên dưới, nhưng hãy nhớ rằng strtok
sẽ sửa đổi chuỗi được truyền cho nó. Nếu bạn không muốn điều này xảy ra, bạn được yêu cầu tạo một bản sao của chuỗi gốc, sử dụng strcpy
hoặc chức năng tương tự.
char str[]= "ls -l";
char ** res = NULL;
char * p = strtok (str, " ");
int n_spaces = 0, i;
/* split string and append tokens to 'res' */
while (p) {
res = realloc (res, sizeof (char*) * ++n_spaces);
if (res == NULL)
exit (-1); /* memory allocation failed */
res[n_spaces-1] = p;
p = strtok (NULL, " ");
}
/* realloc one extra element for the last NULL */
res = realloc (res, sizeof (char*) * (n_spaces+1));
res[n_spaces] = 0;
/* print the result */
for (i = 0; i < (n_spaces+1); ++i)
printf ("res[%d] = %s\n", i, res[i]);
/* free the memory allocated */
free (res);
res[0] = ls
res[1] = -l
res[2] = (null)
Nguồn
2012-06-25 23:03:21
Nếu bạn muốn chia nhỏ dựa trên không gian, tại sao bạn đã chỉ định ';' làm dấu phân cách? –
Ví dụ: string = "ls -l; date; set + v" – Jordan