ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

CとC++コミュのエラーの解決方法がわかりません。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
株価情報は,カンマ区切りテキストCSV ファイル形式で用意されています.1行目に証券コード,2行目に銘柄名があり,
3行目からLOG 行分は過去の株価で,それ以降のDATE 分が未来の株価となるみたいなので

1行目を読み取る
2行目を読み取る
3列目以降を読み取るというものです。


kabusim1.csvの中身です。

6326 6471 6301 6503 6991 6502
クボタ 日本精工 コマツ 三菱電機 松下電工 東芝
328 309 402 279 748 385
329 327 401 282 745 389
324 362 390 276 727 381
323 344 391 268 727 370
323 345 391 268 716 366
333 363 401 270 713 379
337 358 429 312 731 394
338 368 411 303 730 390
339 364 429 329 724 415


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
typedef struct _KABUKA
{
int Value;
struct _KABUKA* pNext;
}KABUKA;

typedef struct _KABU_DATA
{
int Code;
char Name[128];
KABUKA* Kabuka;
}KABU_DATA;

void ReleaseKABUDATA( KABU_DATA* pdata )
{
KABUKA* p;
while( pdata->Kabuka ){
p = pdata->Kabuka;
pdata->Kabuka = p->pNext;
free( p );
}
}


KABUKA *GetKabuka(KABU_DATA* pdata, int date )
{
int i;
KABUKA *p;
p = pdata->Kabuka;
for( i = 0 ; i < date ; i++ ){
if( !p )return NULL;
p = p->pNext;
}
return p;
}

void PushEnd( KABU_DATA* pdata, KABUKA* p_new )
{
KABUKA* p;
p = pdata->Kabuka;
if( !p ){
pdata->Kabuka = p_new;
}else{
while( p->pNext )p = p->pNext;
p->pNext = p_new;
}
}

char* GetLine( char* src, char* dst )
{
if( !src )return NULL;
while( 1 ){
if( *src == '\0' ){
src = NULL;
break;
}
if( *src == '\n' ){
src++;
break;
}
if( *src == '\r' ){
src++;
continue;
}
*dst = *src;
src++;dst++;
}
*dst = '\0';
return src;
}
char* DivText( char* src, char* dst )
{
if( !src )return NULL;
while( *src == ' ' )src++;
while( 1 ){
if( *src == '\0' ){
src = NULL;
break;
}
if( *src == ' ' )break;
*dst = *src;
src++;dst++;
}
*dst = '\0';
return src;
}

char* ReadData( const char* filename )
{
char* pBuffer;
int size = 0;
FILE* fp;
fp = fopen( filename, "rb" );
if( !fp )return NULL;
fseek( fp,0, SEEK_END );
size = ftell( fp );
fseek( fp, 0, SEEK_SET );

pBuffer = (char*)malloc( size+1 );
fread( pBuffer, size, 1, fp );
pBuffer[size] = '\0';
fclose( fp );
return pBuffer;
}

int main( int argc, void* argv[] )
{
char* buffer;
int i;
int n;
char buf_line[256];
char buf_div[256];
char* ptr1;
char* ptr2;
KABU_DATA data[256];
int data_num;
int date_max;
KABUKA* pkabuka;
buffer = ReadData( "kabusim1.csv" );
if( !buffer ){
exit( 0 );
}
ptr1 = buffer;
{// 一行目
ptr1 = GetLine( ptr1, buf_line );
ptr2 = buf_line;
i = 0;
while( ptr2 ){
ptr2 = DivText( ptr2, buf_div );
if( strlen(buf_div) > 0 ){
data[i].Code = atoi( buf_div );
data[i].Kabuka = NULL;
i++;
}
}
data_num = i;
}
{// 二行目
ptr1 = GetLine( ptr1, buf_line );
ptr2 = buf_line;
i = 0;
while( ptr2 ){
ptr2 = DivText( ptr2, buf_div );
if( strlen(buf_div) > 0 ){
strcpy( data[i].Name, buf_div );
i++;
}
}
}
{// 三行目以降
date_max = 0;
while( ptr1 ){
ptr1 = GetLine( ptr1, buf_line );
if( strlen(buf_line) == 0 )continue;
ptr2 = buf_line;
i = 0;
while( ptr2 ){
ptr2 = DivText( ptr2, buf_div );
if( strlen(buf_div) > 0 ){
pkabuka = malloc(sizeof(KABUKA));


pkabuka->Value = atoi( buf_div );
pkabuka->pNext = NULL;
PushEnd( &data[i], pkabuka );
i++;
}
}
date_max++;
}
}
// 以下表示
for( i = 0 ; i < data_num ; i++ ){
printf( "%d ", data[i].Code );
}
printf( "\n" );
for( i = 0 ; i < data_num ; i++ ){
printf( "%s ", data[i].Name );
}
printf( "\n" );
for( n = 0 ; n < date_max ; n++ ){
for( i = 0 ; i < data_num ; i++ ){
pkabuka = GetKabuka( &data[i], n );
if( pkabuka ){
printf( "%d ", pkabuka->Value );
}
}
printf( "\n" );
}
for( i = 0 ; i < data_num ; i++ ){
ReleaseKABUDATA(&data[i] );
}
free( buffer );
return 0;
}

エラーが


>pkabuka = malloc(sizeof(KABUKA));
'=' : 'void *' から 'KABUKA *' に変換できません。
と表示されているんですが、解決方法がわかりません。
教えてください。キャストをどう変更したら良いのか。

コメント(6)

pkabuka = (KABUKA *)malloc(sizeof(KABUKA));
とか
pkabuka = static_cast<KABUKA *>(malloc(sizeof(KABUKA)));
とか
CSV といいつつ入力データがカンマ区切りでないのが原因じゃないでしょうか。XML にすると解決するかも!
漏れはキャストの方法が判らんのにどうやってここまで構造体を決めてコードを書けた理由を知りたいです(;´ω`)
プログラムを書いた人は ほかのコンパイラを使っていたんでしょうね。
プログラム書いてくれた人にエラーを報告すれば、すぐ教えてもらえそうな気がするけど。。
そのエラーメッセージは、、、。

たぶんもう見ていないと思うけど
Cとしてコンパイルしたら通るんじゃないの?
実際gccだとコンパイルできるよ。
g++だと同じ内容のエラーメッセージで怒られる。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

CとC++ 更新情報

CとC++のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング