簡體   English   中英

C:Malloc字符串數組混亂

[英]C: Malloc String Array Confusion

我試圖分配足夠的空間來容納以相反順序分配給數組arg_list所有命令行參數。

char* arg_list[6];
arg_list = malloc((sizeof(char*)) * argc);
for (i=argc; i < 0; i--)
{
    arg_list[i]=argv[i];  
}

我的理論是在malloc上獲取char*sizeof ,然后將其乘以給出的參數個數, argc給出所需的總空間量。

然后使用for循環,將i從元素數量argc ,例如說5,然后將argv的第5個元素放入arg_list的第5個位置,並執行直到達到0。

我收到警告,提示incompatible implicit declarationassignment to expression with array type的錯誤,並且不確定我要去哪里。 另外,我已經使用C大約一天半了,因此,如果可以的話,請盡可能使所有內容變得愚蠢! 我真的很感激!

編輯:麻煩打印出反向數組代碼:

    char** arg_list = malloc((sizeof(char*)) * argc);

/** arg_list points to the command-line arguments in the */
/**     reversed order */
for (i=argc-1; i >= 0; i -=1)
{
    arg_list[i]=argv[i];  
}

/** print the content of arg_list */
/** fill here */
for (i=0; i<argc; i++)
{
    printf(arg_list[i]);
    printf("\n");
}

我對如何打印反向訂單感到困惑。 每當我打印時,它都以正常順序打印,而不是反向打印。 我對如何以正常順序而不是相反的順序將其放入arg_list感到困惑。 謝謝!

一旦聲明

char* arg_list[6];

您不能將任何東西分配給arg_list 您只能分配給它的元素。 因此,

arg_list = malloc(...);

是錯的。 您可以使用:

arg_list[0] = malloc(...);

但這不是你所追求的。

您需要使用:

char** arg_list = malloc((sizeof(char*)) * argc);

您需要char **arg_list;

另外,對於argc項目,最大下標為[argc - 1],因此您將需要調整該循環。

我正在回答的編輯版本已經包含其他答案和評論的更正。

靠邊看看

for ...
    arg_list[i] = argv[i];

所以,你在位置的指針分配[i]指針在位置[i]

arg_list[argc-1] = argv[argc-1];
...
arg_list[1] = argv[1];
arg_list[0] = argv[0];

現在想想反向意味着什么...

試着跟着我。 如果完成(成功與否),請發表評論,我將提供完整的解決方案。 但是請先嘗試一下,它確實非常簡單,並且比完整介紹的解決方案有更多幫助。


解決方法:您必須從不同方向為兩個數組建立索引:

for (int i = 0 ; i < argc ; i++ )
    arg_list[i] = argv[ argc - 1 - i];

由於方向無關緊要,我將循環更改為更明顯的遞增循環。

請注意,最上面的條目的索引是argc - 1 ,而不是argc ,就像C-像大多數編程語言一樣-索引從0開始運行。


警告:打印變量數據時, 始終應為printf &family使用格式字符串。 當重整外部提供的數據(例如命令行參數)時,這是強制性的。 不能廣泛執行將打開一個安全漏洞。 只需考慮提供%s作為參數即可。 有效地導致:

printf("%s");

請注意,您沒有提供必需的字符串參數,但printf嘗試讀取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM