4

こんにちは、私は本当にこれについて頭を悩ませることができません。基本的に、出力配列をパラメーターとして渡すことにより、関数から char 配列を返そうとしています。これが私がこれまでに持っているものです:

関数:

int GetComputerName(char *name, char *ip_address){
    *name = "testing";
    return 0;
}

そしてそれを呼び出す:

char comp_name[50];
GetComputerName(&comp_name, serverIP);
printf("\n\n name: %s\n\n", comp_name);

* と & を切り替えて交換して、何が機能するかを確認し、ポインターなどを調べましたが、実際に起こるべきだと思うことと、実際に起こることは2つの非常に異なることであり、今では自分自身を混乱させていると思います.始めた頃!! 笑

誰かが私を助けて、これを行う正しい方法を説明してもらえますか?!

よろしくお願いします=)

4

1 に答える 1

13

この行:

*name = "testing"; 

「testing」へのポインターを名前が指すcharに割り当てるため、無効です。データをバッファにコピーする必要があります。そのはず:

int GetComputerName(char *name, char *ip_address){
    strcpy(name,"testing");
    return 0;
}

またはさらに良い(オーバーフローを避けるため):

int GetComputerName(char *name, size_t buff_len, char *ip_address){
    strncpy(name,"testing", buff_len);
    name[buff_len - 1] = '\0';
    return 0;
}

そしてそれを呼び出します:

GetComputerName(comp_name, sizeof(comp_name), serverIP);
于 2012-05-06T06:14:35.703 に答える