#include <iostream>
#include <vector>
using namespace std;
class Board {
    static const int BOARD_SIZE = 8;
  	vector< vector<int> > Array;
public:
    // コンストラクタ
    Board()
    {
    	// array resize
    	Array.resize( BOARD_SIZE );
    	for(int i = 0; i<BOARD_SIZE; ++i){ Array[i].resize( BOARD_SIZE ); }
    	// set data
    	for(int y=0; y<BOARD_SIZE; ++y) {
    		for(int x=0; x<BOARD_SIZE; ++x) {
    			Array[y][x] = 0;
    			}
    		}
    	Array[3][3] = 1;
    	Array[4][4] = 1;
    	Array[3][4] = 2;
    	Array[4][3] = 2;
    	}
    // デストラクタ
    ~Board(){}
    char *VectorToArray();
};
class TcpServer {
	char buf[1024];
public:
	Board board;
	// コンストラクタ
	TcpServer()
	{
	}
	// デスクトラクタ
	~TcpServer(){}
	void GetBuffer();
};
char *Board::VectorToArray()
{
  	char buf[1024];
  	memset(buf, '0', 1024);
  	char *pbuf;
	pbuf = buf;
	int x, y;
	for(x = 0; x<8; ++x) {
		cout << endl;
		for(y = 0 ; y<8; ++y) {
			sprintf(pbuf, %d, Array[x][y] + '0');
			++pbuf;
			}
		}
	return pbuf;
}
void TcpServer::GetBuffer()
{
	memset(buf, '0', 1024);
	strcpy(buf, board.VectorToArray());
	cout << buf << endl;
}
int main()
{
	TcpServer tserv;
	tserv.GetBuffer();
	return 0;
}
失礼しました、質問が抜けていました
お世話になります、ボードゲームの配列処理で期待通りの動作ができません
よろしくお願い致します。
Boardクラスで、int型の二次元配列をvectorで生成し、その値を、Boardクラスの一次元
配列、bufにコピーしたいのですが
思ったように配列が、埋まりません、間違い、勘違いをしている処を、ご指摘ご教示願え
ないでしょうか。
グダグダになってます、重ね重ねすみません。
×
Boardクラスで、int型の二次元配列をvectorで生成し、その値を、Boardクラスの一次元
配列、bufにコピーしたいのですが
○
Boardクラスで、int型の二次元配列をvectorで生成し、その値を、TcpServerクラスの一次元
配列、bufにコピーしたいのですが
> char *Board::VectorToArray()
- automatic変数のポインタを返してはいけません。
  static char buf[1024]; が正解。
- 返すのはpbufではなくbufです。
επιστημηさん、ありがとうございました
関数のプロトタイプはそのままにして、bufを返却することで、期待通りの動作となりま
した。
>automatic変数のポインタを返してはいけません。
なるほど、そういうものなのですね。仕様として理解しました
>返すのはpbufではなくbufです。
C言語に於いて、配列は戻り値として、指定出来ないものかと、思っていました。
警告: address of local variable ‘buf’ returned
警告がでますが、思い通りの動作となりました、向学のために
他に方法があれば、教えて頂きたいのですが。
> 他に方法があれば、教えて頂きたいのですが。
C++なら std::string 使います。
ありがとうございます。
std::stringなら、操作も楽そうなのでなお、良しですね。
> 警告: address of local variable ‘buf’ returned
コンパイラは何を使っているのか分かりませんが、その警告は気になりますね。
επιστημηさんが指摘したように、bufをstatic変数にしてもこの警告が出たので
しょうか。
エビさんお世話になります
>コンパイラは何を使っているのか分かりませんが、その警告は気になりますね。
コンパイラはgccです
勘違いをしていました。というか、良く読んでおらず、本質を見失い
staticを付加するのを忘れていました、掲示したコードは、要点だけを抜粋したものなので
作成中の、プログラムを修正するのが大変でした、(^^;
そんな感じで、修正しながら、実際作成中のプログラムの中でchar* bufは、サーバーか
らマルチクライアントへメッセージを返す際の、クラスの中で、一意に決まらなければな
らない変数だったので、
いろんなchar* bufが存在したら、矛盾が生じ、バグになりそうな部分だなとか、
こういう時こそ、static関数使わなくてはな、ならない場面だなとか、妙に感心しつつ、
修正してました。
ということで、警告も消えました。ありがとう。
