-1

任意のタイプのデータを 2 つ連結し、連結の結果である文字列を返す C 関数を作成する必要があります。以下でこの機能を実行しましたが、機能しません。誰か助けてくれませんか?

// void pointer does not store value, is just the address of a memory location
char* concatenate(void* varA, int tamA, void* varB, int tamB)
{
    // char is 1 byte
    char* result;
    char* a,b; // helpers
    result = malloc((tamA+tamB)*sizeof(char)); 

    a = varA; // "a" receives the address pointed to by the pointer varA
    b = varB; // "b" receives the address pointed to by the pointer varB
    *result = *result << tamA + *a;
    *result = *result << tamB + *b;
    result = a;    // let the results point to "a"
    return result; // the result is the pointer "a"
}
4

3 に答える 3

1

私が正しく理解している場合、あなたがやろうとしているのは、varAとがvarB指しているデータを次々に新しいメモリ バッファにコピーし、このバッファに文字ポインタを返すことです。関数を使用すると、これを簡単に実現できmemcpyます。

char *concatenate(void *varA, int tamA, void *varB, int tamB)
{
    char* result = malloc(tamA + tamB); 

    // copy varA to "result"
    memcpy(result, varA, tamA);
    // copy varB to "result" after varA
    memcpy(result+tamA, varB, tamB);

    return result;
}

どんなデータvarAvarBホールドもそのまま使用され、人間が読める表現に変換されないことに注意してください。

于 2013-08-30T13:58:12.870 に答える