[英]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 declaration
和assignment 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.