#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関数使わなくてはな、ならない場面だなとか、妙に感心しつつ、
修正してました。
ということで、警告も消えました。ありがとう。