私はコマンドラインのargs int main(int argc, char *argv[])
と同様の方法でキーボードからコマンドを取得しようとしていますが、別の機能です。私が解析してgetCmd()
の機能の範囲内でそれらを印刷すると、すべての外観と動作が意図どおりに行われますが、メイン関数に戻るとすぐにゴミの束になります。私の質問はコードの下にあります。参照の配列の配列を渡す
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
void getCmd(char *cmd, char *args[])
{
char input[81] = { 0 };
char *next_token = NULL;
printf("$ ");
fgets(input, 81, stdin);
input[strcspn(input, "\n")] = 0;
cmd = strtok_s(input, " ", &next_token);
if (!strcmp(cmd, "mv"))
{
args[0] = strtok_s(NULL, " ", &next_token);
args[1] = strtok_s(NULL, " ", &next_token);
printf("\n\n%s\n%s\n%s\n\n", cmd, args[0], args[1]);
}
}
int main(void)
{
char *cmd = NULL, *args[5];
cmd = (char *)calloc(20,sizeof(char));
for (size_t i = 0; i < (size_t)5; i++)
{
args[i] = (char *)calloc(20,sizeof(char));
}
getCmd(cmd, args);
printf("\n\n%s \n%s\n%s", cmd, args[0], args[1]);
return 0;
}
私は、その関連するとは思わないが、私は、64ビットプロセッサ上のVisual C++コンパイラを使用してWindows 7 OSをVS 2015コミュニティを使用しています。
私の質問は:
- は、どのように私は、参照することにより、CMDとargs []を渡す必要がありますか?
- このような状況に対応する広く受け入れられているイディオムはありますか?
私は似質問の谷の数を見てきたし、質問が重複している場合は、この文脈で働く解決策を見つけるを教え、私はit.Since Iを閉じますができませんでしたどのような質問の書式設定のヒントをいただければ幸いです。乾杯! (:。。。ここでは、パースのバッファへの
間接参照の別のレベルを導入します。 – alk
誰も参照によってポインタを渡すのはなぜですか? – farukdgn
@farukdgn:関数内でメモリを割り当て、アクセスは呼び出し元の内部にあります。 – alk