データベースへの入力を処理するために作成した tcp サーバーを使用しています。別のLinuxサーバーにあるtcpサーバーにファイル名を送信するサーバーにtcpクライアントがあります。ファイル名が受信されると、Linux サーバーは共有フォルダーに入り、ファイルをプルしてデータベースに挿入します。
私の問題は、バッファを正しく宣言してクリアし、意味不明なものを追加したり削除したりせずに正しいファイル名を取得することです。
現在、次のように機能しています。
char data[1024];
これは問題ありませんが、自動的にバッファを完全に削除するわけではないため、次のような「データ」に暗黙的にメモリを割り当てようとしました。
char *data = (char*) malloc(1024 * sizeof(char));
...
free(data);
また
char *data = new char[1024];
...
delete[] data;
何らかの理由で、上記の 2 つの宣言はサイズ =8 のバッファーを宣言しています。
sizeof(data);
また、私が受け取っているのはわずか 8 文字の長さです。なぜこれを行っているのかわかりませんが、助けはありますか??
編集
char *data = (char*)malloc(1048 * sizeof(char));
if(data==NULL) exit(1);
cout << "DATA Size: " << sizeof(data) << "\n";
int msglen = read(conn, data, sizeof(data));
cout << "Server got " << msglen << " byte message: " << data << "\n";
if(write(conn, &msglen, sizeof(msglen))<0){
cout << "Failed to write back to the client " << strerror(errno);
}
free(data);
close(conn);