2

さて、次のコードがあります。

char** args = (char**)malloc(10*sizeof(char*));
memset(args, 0, sizeof(char*)*10);

char* curToken = strtok(string, ";");

for (int z = 0; curToken != NULL; z++) {
    args[z] = strdup(curToken);
    curToken = strtok(NULL, ";")
}

すべてをcharの配列にキャストしたいarg[z]- char string [100] - そして、私が従うアルゴリズムで処理します。Everyarg[z]は、ある時点で変数文字列にキャストする必要があります。私はポインターに混乱していますが、徐々に上手になってきています。

編集:

char string[100] = "ls ; date ; ls";

arg[0]上記のコードの後に​​、ls arg[1]、date、およびlsになります。arg[2]

各引数を char string[100] に戻し、アルゴリズムで処理したいと考えています。

4

3 に答える 3

1

最も簡単な方法の 1 つは、一時変数に元の文字列のバックアップを保持することです。

char string[100] = "ls ; date ; ls"; 
char temp_str[100] = {0};
strcpy (temp_str, string);

別の方法は、 で行うことstrcatです。z引数の数があります。

memset(string, '\0', 100);
for (i = 0; i < z; i++)
{
    strcat(string, args[i]);
    if (i != (z - 1))
    {
        //if it is last string dont append semicolon
        strcat(string, ";");
    }
}

注意 : 境界条件チェックに注意してください

于 2012-06-22T06:45:33.190 に答える
0

文字列の一部を固定長の文字列[100]にコピーする場合は、ループ内の各args []に対して100文字をmallocし、strtokの結果をstrncpy()する必要があります。strdupは、指定された文字列の実際の長さ(プラス\ 0)に十分なメモリのみを割り当てます。

于 2012-06-19T15:19:36.950 に答える
0

これ:

char** args = (char**)malloc(10*sizeof(char*));
memset(args, 0, sizeof(char*)*10);

壊れたコードです。malloc()まず、の戻り値をキャストしないでください。2 つ目argsは、への 10 個のポインターへのポインターcharです。それらをNULLusingmemset()に設定することはできません。「すべてのバイトがゼロ」が と同じであるという保証はありませんNULL。ループを使用する必要があります。

于 2012-06-19T15:25:02.463 に答える