cuốn sách gpt4 ai đã làm

c - Điều chỉnh argVector

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:34:01 28 4
mua khóa gpt4 Nike

Một phần chương trình của tôi trông như thế này:

char *argVector[] = {"./doTasks","0", "1", "3", NULL};
int numChild = 3;
int tạm thời;
chuỗi ký tự [100];

cho (int i = 0; i < numChild; i++)
{
temp = sprintf(tempstring, "%d", i);
argVector[1] = chuỗi temp;
temp = sprintf(tempstring, "%d", 1 + i*3);
argVector[2] = chuỗi temp;
printf("argVector bây giờ là: %s %s %s %s %s\n", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}

Sản lượng dự kiến ​​​​của tôi là như sau:

Vòng lặp đầu tiên:

argVector[] = {"./doTasks", "0", "1", "3", NULL}

Vòng lặp thứ hai:

argVector[] = {"./doTasks", "1", "4", "3", NULL}

Vòng lặp thứ ba:

argVector[] = {"./doTasks", "2", "7", "3", NULL}

Nhưng trên màn hình giao diện điều khiển thực tế tôi nhận được:

Vòng lặp đầu tiên:

argVector[] = {"./doTasks", "1", "1", "1", NULL}

Vòng lặp thứ hai:

argVector[] = {"./doTasks", "4", "4", "4", NULL}

Vòng lặp thứ ba:

argVector[] = {"./doTasks", "7", "7", "7", NULL}

Chương trình hiện tại của tôi là về đa xử lý trong Linux (chuyển một argVector cho tiến trình con thông qua execvp(); doTasks.c là một chương trình C khác để tiến trình con triển khai). Dù sao, trước khi đi quá xa, bây giờ tôi đang mắc kẹt trong việc thao tác argVector. Ai đó có thể giải thích đầu ra kỳ lạ? Cảm ơn bạn rất nhiều!

câu trả lời hay nhất

Lưu ý rằng không giống như các ngôn ngữ khác, C không có kiểu chuỗi thực.

char *argVector[] Không phải là một chuỗi các chuỗi, mà là mộtcon trỏmảng.

Bạn muốn điều này:

#include 

int main()
{
char *argVector[] = { "./doTasks","0", "1", "3", NULL };
int numChild = 3;
chuỗi ký tự1[100];
chuỗi ký tự2[100];

cho (int i = 0; i < numChild; i++)
{
sprintf(string1, "%d", i);
argVector[1] = string1;
sprintf(string2, "%d", 1 + i * 3);
argVector[2] = string2;
printf("argVector bây giờ là: %s %s %s %s %s\n", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}
}

Tôi cũng đã xóa int tạm thời;, vì nó vô dụng ở đây.

Một khả năng khác là sử dụng ký tự một mảng hai chiều thay vì trỏ tới ký tự Mảng con trỏ:

#include 

int main()
{
char argVector[5][20] = { "./doTasks","0", "1", "3", NULL };
int numChild = 3;

cho (int i = 0; i < numChild; i++)
{
sprintf(argVector[1], "%d", i);
sprintf(argVector[2], "%d", 1 + i * 3);
printf("argVector bây giờ là: %s %s %s %s %s\n", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}
}

Bằng cách này chúng ta thậm chí không cầnchuỗi1, chúng ta có thể "in" trực tiếp tớiargVector.

đây argVector Ít nhiều là một mảng gồm 5 chuỗi, mỗi chuỗi có tối đa 20 ký tự, bao gồm cả dấu kết thúc NUL.

Về c - điều chỉnh argVector, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/52611571/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress