C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

互換性につきまして


(過去ログ 3 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■3051 / inTopicNo.1)  互換性につきまして
  
□投稿者/ てこな 二等兵(7回)-(2006/04/07(Fri) 22:03:33)

分類:[VC++] 


分類:[VC++] 

こんばんは、てこなです。

初歩的な質問なのかもしれませんが、
宜しければアドバイスなど頂ければ幸いかと存じます。
また、管理人さま
前回この掲示板で質問しみなさまにいろいろアドバイスをいただくことができ、
とてもうれしく思いつつも自分の未熟さを痛感いたしました。
業務とは別にプログラミングをやっているので、
業務の都合=てこなの勝手な都合で
前回のように返信間隔が開いてしまうかもしれません。

故、このBBS参加者として不適切とご判断された場合、
まことにお手数かとは思いますが、削除等お願い致します。


<環境>
OS :WindowsXP SP1
Soft:Visual C++ 6.0 (今回はそれ以前の問題のような・・・・ごめんなさい)

<前提>
入力ファイルを読み込んで必要項目を表示するのですが、
入力ファイルは以下のようになっています。
1ファイル50人います。
1人につき普通は1レコードなのですが、2レコード持っている人がいます。
人それぞれでキーが異なっているんですが、
2レコード持っている場合、1レコード目と2レコード目のキーは同じです。
同じ人の場合は同じキーで、違う人の場合は異なったキー。

そこで、以下のような方法を考えてみました。
@ファイルから1回読む→ここには複数レコード持っている人でも必ず
            1レコード目がきます。⇒oya1_dat
Aファイルから次を読む→退避エリアに退避しておきます。⇒oya3_dat
B退避エリアのキーと@で読んだレコードのキーが一致していれば、
 退避エリアのデータを2レコード目のデータとして扱います
 ⇒ oya3_datをoya2_datへ格納

<お伺いしたいところ>
下記ソース(略)の★印の部分で、
退避エリアから2レコード目の構造体?に格納しているところで、
次のようなエラーを取り除くことが出来ませんでした。

<エラー>
'function' : 互換性のない型が含まれています。
'strncpy' : の型が 1 の仮引数および実引数と異なります。

エラー部分の「C〜」を選択してF1でヘルプを参照してみたのですが、
「型」が違う・・・同じ「unsigned char」でレコード長も同じなのですが、
着眼点が違うみたいで・・・・根本的にスキルが足りてないのに
C言語触っている時点で問題外なのかも・・・しれないです。

<同様の事象が出るソース(一部)>
<oyako.h>
typedef struct
{
/* おや1(11) */
unsigned char b[2];
unsigned char a[4];
unsigned char c;
unsigned char crc[2];
unsigned char crlf[2];

} _OYA1;

typedef struct
{
/* おや2(11) */
unsigned char w;
unsigned char q[4];
unsigned char e[2];
unsigned char crc[2];
unsigned char crlf[2];

} _OYA2;

<main.c>
/*---------------------*/
_OYA1 oya1_dat;/* 1レコード目 */
_OYA2 oya2_dat;/* 2レコード目 */
_OYA1 oya3_dat;/* 退避エリア */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "oyako.h"

途中省略

read_oya = fread( &oya1_dat, (sizeof(oya1_dat)-1), 1, fpoya);
read_oya = fread( &oya3_dat, (sizeof(oya3_dat)-1), 1, fpoya);

if( strncmp( oya1_dat.a, oya3_dat.q, 4 ) == 0 ) {
strncpy( oya2_dat, oya3_dat, (sizeof(oya3_dat)-1) ); ★
memset ( &oya3_dat, 0x20, (sizeof(oya3_dat)-1) );
}else{
oya3_set_fg = '1';
/* 退避(oya3)→oya1へコピー or freadする */
}

途中省略

<根本>
てこなが、本質を理解しきれていないことが大きな原因かもしれません。
他の質問内容とは比べ物にならないくらい初歩的なことかもしれません。
今のてこなにとってはおおきな壁ですが・・・

もし宜しければ、アドバイスを頂ければ幸いかと思います。
但し、上級者向けの掲示板にこのような質問を記してしまって、
気分を害されていないか、とても心配です。
その時は謹んでお詫び申し上げると共に、
2度と気分を害されないようにしたいと思います。

長くなってしまいまことに申し訳ございません。
特に急いでいるわけでもないので、
お手すきの際にでも一言でもかまいませんので
ご指導していただけるとうれしいです。

以上



0
引用返信 編集キー/
■3055 / inTopicNo.2)  Re[1]: 互換性につきまして
□投稿者/ Blue 二等兵(17回)-(2006/04/08(Sat) 01:36:35)

分類:[VC++] 

>strncpy( oya2_dat, oya3_dat, (sizeof(oya3_dat)-1) ); ★
strncpy( ( char* )&oya2_dat, ( char* )&oya3_dat, sizeof( oya3_dat ) - 1 );
oya3_datが文字列であるという前提でないのであれば、memcpy関数を使いましょう。
memcpy( &oya2_dat, &oya3_dat, sizeof( oya3_dat ) - 1 );


丸付き数字は「機種依存文字」と呼ばれる文字で、どの機種から閲覧されるかわからない
Web上の掲示板等では使わないほうが良いです。


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -