0
void funcF(char *outBuffer)
{
        char * inBuffer;
        inBuffer = (char *) malloc(500);
        // add stuff to inBuffer
        strcpy(inBuffer, "blabla");

        outBuffer = inBuffer; //probably this is wrong 
}

int main()
{
    char * outBuffer;

    funcF(outBuffer);

    printf("%s", outBuffer); // i want to get "blabla" as output
    free(outBuffer);
}

私の質問では、データにアクセスできるようoutBufferに、同じアドレスをどのように指定できますか?inBufferinBuffer

4

3 に答える 3

4

現在のコードは、ポインターを値で渡します。これはfuncF、 が呼び出し元のポインターのコピーを操作することを意味します。呼び出し元のポインターを変更する場合は、そのポインターのアドレス (つまり、ポインターへのポインター) を渡す必要があります。

void funcF(char **outBuffer)
{
    char * inBuffer = malloc(500);
    strcpy(inBuffer, "blabla");
    *outBuffer = inBuffer;
}

int main()
{
    char * outBuffer;
    funcF(&outBuffer);
    //    ^

またはfuncFポインターを返すように変更します。

char* funcF()
{
    char* inBuffer = malloc(500);
    strcpy(inBuffer, "blabla");
    return inBuffer;
}

int main()
{
    char * outBuffer = funcF();
于 2013-05-28T15:03:39.220 に答える
-2

これがあなたが望むものかどうかはわかりませんが、

int main() {

const unsigned int MAX_BUFF = 1024

char outBuffer[MAX_BUFF];

funcF(outBuffer);

printf("%s", outBuffer); // i want to get "blabla" as output

/* free(outBuffer); */

}

free() で問題が発生しますが、アイデアは得られます。

于 2013-05-28T15:07:02.393 に答える