トップページ⇒tech
1001コメント351KB

【初心者歓迎】C/C++室 Ver.44【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/11/03(土) 00:20:13
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1190860744/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0685デフォルトの名無しさん2007/12/01(土) 16:46:05
スレ間違いしてないですよ。C言語の勉強始めたばかりで、for文の
ことを考えていたのです。プログラム自体も初心者なので、専門用語
もよくわかりませんので、妥当そうな言葉使ってすいません

0686デフォルトの名無しさん2007/12/01(土) 16:56:02
>>684
こんな感じかね
#include <stdio.h>
#include <time.h>
int main()
{
 int i = 0, j = 0;
 time_t t = time(NULL);
 for (;;) {
  i++;
  while (difftime(time(NULL), t) < i * 60);
  printf("%d分目 %d\n", i, i);
  j += i;
  if (i % 60 == 0) {
   printf("1時間経った 平均%d\n", (j / 60));
   j = 0;
  }
 }
}
0687デフォルトの名無しさん2007/12/01(土) 17:06:55
おぉありがとうございます。まだプログラム慣れしてないので、複雑そうに
見えるが、頭で思っていたよりいろんな関数が必要なんですね。
whileが必要とは以外でした。for文ですべてできるかと思いました・・・
熟読してみます。
0688デフォルトの名無しさん2007/12/01(土) 17:08:04
C言語で使われてる関数を一覧できるサイトありますか?
0689デフォルトの名無しさん2007/12/01(土) 17:09:35
標準関数ならあるよ
0690デフォルトの名無しさん2007/12/01(土) 17:10:09
>>687
いやforとwhileは可換だからどっち使ってもいいんだけどね
書きやすいとか読みにくいとかその程度の問題だし
0691デフォルトの名無しさん2007/12/01(土) 17:30:57
標準関数で良いのでサイトを教えて頂けないでしょうか?
0692デフォルトの名無しさん2007/12/01(土) 17:34:13
>>691
unkoがのってるよ
0693デフォルトの名無しさん2007/12/01(土) 17:45:59
ttp://en.wikipedia.org/wiki/List_of_C_functions

とかでいいのかしらん。
0694デフォルトの名無しさん2007/12/01(土) 19:12:41
C言語で型の前方参照ってどうやればいいでしょうか?
やりたいことは

typedef struct{
Fuga f;
}Hoge;
typedef struct{
Hoge h;
}Fuga;
ということがしたいのですが2行目で怒られます…よろしくお願いします
0695デフォルトの名無しさん2007/12/01(土) 19:17:21
Fuga f;
f.h.f.h.f.h.f.h.......?
そんな無限ループみたいな構造体は作れません。
06966942007/12/01(土) 19:45:02
うっ、そうなんですか。
C++ではできるのですがCではできないということですか?
2つのオブジェクト(データ)がお互いを指しているような構造は
Cでは実現できないのでしょうか?
0697デフォルトの名無しさん2007/12/01(土) 19:55:04
ポインタ使えば?
06986942007/12/01(土) 19:58:49
ポインタでも結局怒られませんか?

typedef struct{
Fuga* f;
}Hoge;
typedef struct{
Hoge* h;
}Fuga;
0699デフォルトの名無しさん2007/12/01(土) 19:59:04
>>694 は、指してるんじゃなくて含んでるんだよ
指すんなら出来る

typedef struct Fuga Fuga; 
typedef struct Hoge Hoge;
struct Hoge{ 
    Fuga *f;
}; 
struct Fuga{ 
    Hoge *h;
};
0700デフォルトの名無しさん2007/12/01(土) 20:07:33
>>696
> C++ではできるのですが
うそつくなヴォケ
07016942007/12/01(土) 20:11:01
>>695 697 699
ありがとうございました。
私の初めの例が変でした。すみません。
699がまさにやりたかったことでした。重ね重ねありがとうございます。
07026942007/12/01(土) 20:21:12
>>700
すみません
class Hoge;
class Fuga{
Hoge* h;
};
class Hoge{
Fuga* f;
};
ならできますよね?ということが言いたかったんです(ポインタなんですが)
つまり初めの例が変だったんです。
初心者歓迎ということで許してね♪
0703デフォルトの名無しさん2007/12/01(土) 21:00:14
すまんが初心者以前は・・・いやなんでもない
0704デフォルトの名無しさん2007/12/01(土) 22:50:15
> 初心者歓迎ということで許してね♪
なかなか面白いこと吐くじゃねーか
0705デフォルトの名無しさん2007/12/01(土) 23:19:39
どこが笑いどころ?
0706デフォルトの名無しさん2007/12/01(土) 23:25:48
> な
>  ま
>    者
0707デフォルトの名無しさん2007/12/01(土) 23:36:33
現在時刻を表示させるにはどうしたら良い?
0708デフォルトの名無しさん2007/12/01(土) 23:47:23
>>707
#include <stdio.h>
#include <time.h>
int main()
{
time_t t = time(NULL);
struct tm *tm = gmtime(&t);
printf("%s",asctime(tm));
return 0;
}
0709デフォルトの名無しさん2007/12/02(日) 00:26:35
VS2005です
int ymd = 20071201;
int y, m, d;
y = 2007
m = 12
d = 1
のように年月日をそれぞれy m dに取得するいい方法はないですか?
0710デフォルトの名無しさん2007/12/02(日) 00:45:30
y = ymd / 10000;
m = ymd % 10000 / 100;
d = ymd % 100;

こうしたいの?
0711デフォルトの名無しさん2007/12/02(日) 01:23:21
>>710
サンクス、ばっちりです
0712デフォルトの名無しさん2007/12/02(日) 01:38:53
すみません>< 今日初めてプログラムを書きます
仮に {0,1,2,3,4,5,6,7,8,9} という配列が書き込まれているとし、
それが再生される段階でどこかが抜けてしまった場合、
例えば {0,1,2,4,5,6,7,8,9,0} となってしまうプログラムを書きたいんですが、
全然うまくいきません。

以下のものを書きました・・

*****************************************************************

#include<stdio.h>

int main()
{
int i;
int length = 10; //length of the sequence
int start = 3; //start of asynchronous

int Seq1[] = {0,1,2,3,4,5,6,7,8,9};
int Seq2[] = {0,0,0,0,0,0,0,0,0,0};

for(i = start; i < length; i++)
{
Seq2[i] = Seq1[i+1];
};

printf("%3d", Seq2[]);
return(0);
}
0713デフォルトの名無しさん2007/12/02(日) 01:50:31
>>712
>Seq2[i] = Seq1[i+1];
iが9のとき、10番目にアクセスしてアウト。
ってか、何がやりたいのかさっぱり。
startが3だから3が抜けた配列を作りたいの?
for ( i = 0; i < length; i++ ) {
if ( Seq1[ i ] != start ) {
Seq2[ i ] = Seq1[ i ];
}
}
こういうことか?
0714デフォルトの名無しさん2007/12/02(日) 01:51:48
>>712
>それが再生される段階でどこかが抜けてしまった場合
ここを詳しく
0715デフォルトの名無しさん2007/12/02(日) 01:53:31
優しい人の集まるスレですね
俺なら日本語でおkとしか言えない
0716デフォルトの名無しさん2007/12/02(日) 02:12:34
>>714

実はこのプログラムはですね、HDDのある特殊な媒体において、
「再生時に同期が外れて書き込まれている磁化パターンがヘッドで読めないところが出てくる」という現象を作りたいんです。

ABCDEF という系列を挙げると、左が過去です。A→B→C→・・・ という順でヘッドで再生されていくと考えてください。
そこで、どこかでヘッドと媒体の同期が取れなくて、読めないとこが出て、A→B→D→・・・ となる場合があるとしてます。

このプログラムは、ある既存のプログラムに追加したいものなのですが、
とりあえずプログラムを書いたことが無いので、このプログラム単体でビットのシフトを再現したいんです・・・

日本語おkですみません・・
0717デフォルトの名無しさん2007/12/02(日) 02:21:09
抜きたい数字はランダムだとすると

rd

for(i = 0; i < NUM_MAX; i++)
{
07187122007/12/02(日) 02:37:49
>>717
ありがとう 
実際は同期がはずれるのは当然ランダムだから、参考にさせてもらうよ

ところで、結果を表示する 

printf("%3d", Seq2[]);  っておかしいでしょうか?

適当に書いてたらこれがあると構文エラーになって出力できない・・・・orz
俺アホすぎ・・
0719デフォルトの名無しさん2007/12/02(日) 02:58:16
こんなんでいいのかどうかわからんけど
void main ()
{
srand( (unsigned int)time(NULL) );
int i;
const int length = 20;
int index = 0;
int Seq1[length];
int Seq2[length];
for( i = 0; i < length; i++ ){
Seq1[i] = i;
Seq2[i] = 0;
}

// 抜けた数字
int out = rand() % length;
for( i = 0; i < length; i++ ){
if( out != i ){
Seq2[index] = Seq1[i];
index++;
}
}
printf( "抜けた数字:%d\n", out );
for(i = 0; i < length; i++)
printf("%d ", Seq2[i]);
printf("\n");
}
07207122007/12/02(日) 03:17:19
>>719
ありがとう


でもムズイぜ・・・('A`)
0721デフォルトの名無しさん2007/12/02(日) 05:58:57
struct point{
int x;//X座標
int y;//Y座標
};
int main(void)
{
struct Point A[1000],B[1000];


線分A[i]B[i]とA[j]B[j]が交差するか判定していくプログラムで
単に二重for文で一個ずつ判定していくんじゃなくて(n-1)^2/2回の判定で済むようなプログラムの書き方を
ご教授願いたいのですが

0722デフォルトの名無しさん2007/12/02(日) 11:13:41
単純に for 文で1個ずつ判定していけば
n(n-1) / 2 回の判定で行けるんじゃないの?
0723デフォルトの名無しさん2007/12/02(日) 11:16:56
>>721
for(i=0;i<n;++i){
for(j=i+1;j<n;++j){
//処理
}
}
こういうこと?
多分n(n-1)/2だが。
0724デフォルトの名無しさん2007/12/02(日) 11:18:32
nC2=n(n-1)/2
(n-1)^2/2回じゃ全て網羅しきれない
0725デフォルトの名無しさん2007/12/02(日) 14:59:42
この場合n=1000で
一回目…A[0]B[0]に対して残り全部の照合1000-1回
二回目…A[1]B[1]に対してA[0]B[0]を除いた1000-2回
   ・
   ・
   ・
1000回目…A[1000]B[1000]に対して0回
for文は使わないという意味じゃなくて
for(i=0;i<n:i++){
for(j=0;j<n:j++){
と単にするだけじゃなくてもっと効率よくするという意味です。
分かり辛くてすいません。
07266362007/12/02(日) 15:44:54
すません質問です。
皆様のお陰で、文字列の抜き出し、結合は出来るようになりました。
今度は、抜き出した文字列の分離をしたいんですが、そんな関数有りますでしょうか?
具体的には
argv[1] = "/usr/boku/graphics/1234.jpg
から、"/usr/boku/graphics/1234"を抜き出して
hoge[40] = "/usr/boku/graphics/1234"
meso[] = "ero.jpg"
strcat(hoge, meso);
でhoge[40] = "/usr/boku/guraphics/1234ero.jpg"
にすることは出来たんです。
それでこんどはまた、
hoge[40] = "/usr/boku/guraphics/1234ero.jpg"
から"/usr/boku/graphics/1234"を抜き出して、
masaru [] = "eroero.jpg"
strcat(hoge, meso)
でhoge[40] = "/usr/boku/guraphics/1234eroero.jpg"
にしたいんです。
抜き出す時点で、
hoge[40] = "/usr/boku/graphics/1234"
hoge1[40]
strcpy(hoge1, hoge);
で後は、strcpyでhoge1を使い回せば良い気もするんですが、もっと良い方法はないでしょうか?
0727デフォルトの名無しさん2007/12/02(日) 15:49:13
>725
それは >723 な気がするが。

もうちょっと工夫するなら

・A[i].x <= B[i].x となるように必要があれば A[i] と B[i] を交換
・A[i].x で昇順ソート

しておけば、B[i].x < A[j].x になった時点で内側の j のループを break できるので、短い線分が広い範囲にばらばら存在してるケースでは比較回数が削れると思う。

まじめにやるんだったら平面走査法になると思うけどいい参考ページがちょっと見つからなかった……
0728デフォルトの名無しさん2007/12/02(日) 15:53:17
>726
hoge[40] = "/usr/boku/graphics/1234" になってる時点で、
char *begin = hoge + strlen(hoge);
しておいて、
strcpy(begin, masaru);
07296362007/12/02(日) 16:29:19
>>728
なるほど。
こんなことが出来たのは感激。さすがC言語って感じ。
char *begin = hoge + strlen(hoge);
で*beginにhoge[40] = "/usr/boku/graphics/1234"以降の空白の配列のポインタを代入して、
strcpy(begin, masaru);で結果として、/usr/boku/graphics/1234eroero.jpgが出来ると。
char masaru[] = "ero.jpg";
char meso[] ="eroero.jpg";
char hoge[40] = "/usr/boku/graphics/1234" ;
int i = strlen(hoge);
char *begin = hoge + i;
strcpy(begin, masaru);
printf("%s¥n",hoge);
begin = hoge + i;
strcpy(begin, meso);
printf("%s¥n",hoge);
これだったら、確かに"/usr/boku/graphics/1234"が使い回せますね。
でも、こんなプログラム書いたらコメントしてないと後で何してるのかわからなくなりそう。
0730デフォルトの名無しさん2007/12/02(日) 16:40:38
>>726
>hoge[40] = "/usr/boku/guraphics/1234ero.jpg"
>から"/usr/boku/graphics/1234"を抜き出して、
ディレクトリ変わってるのはtypoよな?

>今度は、抜き出した文字列の分離をしたいんですが、そんな関数有りますでしょうか?
ない

具体的なコードの流れとか関数の切り分け方とか
分からんとどうするのが良いとか何とも言えないけど、
個人的な好みだと、
hoge[40] = "/usr/boku/graphics/1234" の段階でstrcatは使わずに
hoge1[40]、hoge2[40]を用意してそれぞれ
sprintf(hoge1, "%s%s", hoge, meso);
sprintf(hoge2, "%s%s", hoge, masaru);
とすると思う。

どうしても切り出す必要があるなら、前提条件が揃えばstrstrを使うとか
hoge[strlen(hoge)-strlen(meso)] = '\0'とか、まぁ色々あると思うけど。
0731730 2007/12/02(日) 16:42:12
うぇwww質問主の返事の方が早かったw
でしゃばってすんまへん
07326362007/12/02(日) 16:45:39
>>730
いえいえ、そんな。
本当にありがとうございます。
ここの人達はめっちゃ紳士だから大好きだ。
0733デフォルトの名無しさん2007/12/02(日) 16:56:33
>めっちゃ紳士
失礼な!
0734デフォルトの名無しさん2007/12/02(日) 17:49:49
Visual C++ 2005 Express EditionをC言語のコンパイラーとして 使いたいけど そのまま打ち込めばちゃんとコンパイルされますか?
0735デフォルトの名無しさん2007/12/02(日) 18:05:21
いいえ、正しい手順に則って打ち込まないとコンパイルしてくれません
0736デフォルトの名無しさん2007/12/02(日) 18:44:08
735さん ありがとうございます。 わざわざ他のをインストールしてやるより楽でいいかなと思ったですが、 C言語とどういう点で違うかわかりますか? 初歩的なレベルのC言語をやる程度です
0737デフォルトの名無しさん2007/12/02(日) 19:33:37
厳密にCとC++を区別する必要がないなら今は気にしなくていいよ。
参考書等を頼りに勉強して、不明点が出てきたらまた聞きに来るといい。
0738デフォルトの名無しさん2007/12/02(日) 19:35:01
とりあえず拡張子を.cにすればコンパイラがよしなにはからってくれるんじゃね?
0739デフォルトの名無しさん2007/12/02(日) 20:12:12
マクロを全く同じ名前/内容の関数に置き換えたいのですが、
そういうことってできますか?
0740デフォルトの名無しさん2007/12/02(日) 20:20:10
例えば?
0741デフォルトの名無しさん2007/12/02(日) 20:25:58
>>739

ケースバイケース。
Cの場合、使われてる場所で引数の型が異なると無理。
C++だと、テンプレートにすれば大概OK。
引数の型が一緒なら、どっちでもできるはず。
0742デフォルトの名無しさん2007/12/02(日) 21:06:06
## を使ってるマクロなら駄目そうだ。
0743デフォルトの名無しさん2007/12/02(日) 22:44:59
#define func(f,x) f(x)

int foo(int x){
return x+1;
}

int main(){
return func(foo,-1);
}
0744デフォルトの名無しさん2007/12/02(日) 22:48:24
typedef int (*p_func)(int);

int func(p_func f,int x){
return f(x);
}

int foo(int x){
return x+1;
}

int main(){
return func(f,-1);
}
0745デフォルトの名無しさん2007/12/02(日) 22:49:14
int main(){
return func(f,-1);
}
↓
int main(){
return func(foo,-1);
}
0746デフォルトの名無しさん2007/12/02(日) 23:31:04
BCC Developerで多倍長精度の計算をするgmpライブラリは使えますか?
0747デフォルトの名無しさん2007/12/02(日) 23:33:28
int *aとint* aの違いって何ですか?
0748デフォルトの名無しさん2007/12/02(日) 23:36:10
見た感じが違う
0749デフォルトの名無しさん2007/12/02(日) 23:37:58
スペースの空き方が違う
0750デフォルトの名無しさん2007/12/02(日) 23:40:42
int *a; //アスタリスクが修飾するのは型ではなく変数名の方だと言う事を確り分かっている普通の書き方
int* a; //「型が変化するのに修飾対象が変数名だなんておかしい」と現実に目を向けない人可哀相な人がよくする書き方。
0751デフォルトの名無しさん2007/12/02(日) 23:48:52
またそんな燃料投下しなくても・・・
別にどっちだっていいよ、プロジェクト等ならコーディング規約に沿えばいい。
個人なら自分がいいと思うほうにすればいい。
何でこの話題で荒れるか知りたければCFAQとか見ればいい。
0752デフォルトの名無しさん2007/12/02(日) 23:49:02
前者はC、後者はC++でよく見かける。
0753デフォルトの名無しさん2007/12/02(日) 23:51:53
じゃ、int*a がBestなのですね。 有難うございました。
0754デフォルトの名無しさん2007/12/02(日) 23:57:46
両方くっつけるのは全然見ない
0755デフォルトの名無しさん2007/12/02(日) 23:58:07
int * a;
0756デフォルトの名無しさん2007/12/02(日) 23:58:29
新しいなw
まぁ俺も「int * a」派だから似たようなもんかw
0757デフォルトの名無しさん2007/12/03(月) 00:02:40
LPINT a;
0758デフォルトの名無しさん2007/12/03(月) 00:11:06
そいつぁ#defineの臭いがするぜ
0759デフォルトの名無しさん2007/12/03(月) 00:11:35
テンプレートを考えたら int* を型として扱ってるから * は int 寄りだろうな。
0760デフォルトの名無しさん2007/12/03(月) 00:21:47
結論は、貴方が
Cをしているなら: int *a
C++をしているなら: int* a
どちらか不明な場合は: int * a
ちょうど初心者なら: int*a
と書くのが良いと思われます。
0761デフォルトの名無しさん2007/12/03(月) 01:53:37
常に int *a がいいと思うけどな
まぁ好みでどうぞ
0762デフォルトの名無しさん2007/12/03(月) 01:55:43
int* *a
みたいなw
0763デフォルトの名無しさん2007/12/03(月) 04:09:41
C++の場合、使い込んでいくうちに、
ポインタは「イテレータと呼ばれる型」の一形態で、ポインタのデリファレンスはoperator*の一形態、
という意識がどんどん支配的なっていく。
昔ながらの下位概念側から比較的新しい上位概念を見る、のではなく、その逆の見方になる。
イテレータやスマートポインタを自作したりすると、特に。

そういう意識の中で int *a; という書き方を見ると、ちょいと異物感があるというか、
自分の「C++スタイルの深まり」との協調性に欠けていると感じる、ってのはあるかな。
もちろん、こんなのは小さなこと・・・っていうか、極端にいえば単なる「気分」の話であって、
実際には読み書き両面において、あらゆる書き方に慣れているべきなわけだけど。

結論:どっちでもいい。ただ、どんなスタイルであれ、それなりに理由があって生まれているから、
    語り出すと長いしウザいw
0764デフォルトの名無しさん2007/12/03(月) 04:12:57
ポインタを返す関数の例:
T* f()
T *f()
dotch?

A:
pointer<T> f()
よs(ry
0765デフォルトの名無しさん2007/12/03(月) 07:12:16
int* と書いて問題になる場面ってあまりないけどね。
ショートコード大好きな人には大問題なのかもしれないけど。
0766デフォルトの名無しさん2007/12/03(月) 09:50:34
問題は二つ以上の変数を同時に宣言したいときだよな
0767デフォルトの名無しさん2007/12/03(月) 10:16:34
そこでD言語ですよ
0768デフォルトの名無しさん2007/12/03(月) 12:21:17
変数を宣言する場合は、文法に沿って
int *hoge
型を表すだけの場合は、文法に沿って
int*
0769デフォルトの名無しさん2007/12/03(月) 15:15:56
ICカードに情報を書き込むプログラムを作成しています。
もともとのサンプルプログラムに指定した情報を書き込めるようにしようと以下のプログラムを加えました。
以下実際に自分が加筆した部分を含んだソースコードのURLと自分で加筆した部分です。
ソースコード:ttp://www.uploda.org/uporg1141577.zip.html
以下実際に書き込んだ部分
/*----------------加筆部分ここから----------------*/
//自分で書き込むデータを指定する場合
unsigned char write_block_data[16];
//gets()の引用数、\0+1のサイズを設定
char str[80];
char strlen;
size_t len;
fprintf(stdout,"書き込むデータの入力(16バイト以下)");
gets(str);
//16バイト以上を入力してしまった場合
while(len = strlen(str)>16){
fprintf(stdout,"文字数が多すぎます。もう一度入力してください。");
gets(str);
}
//i文字目がNULLにならない間一文字ずつ入力
for(int i=0;str[i]!='\0';i=i+1)
write_block_data[i] = str[i];
//文字数が少ない間
while(i < 16)
//文字数が少ない場合はゴミを表示しないようにする。
write_block_data[i++] = ' ';

input_write_block_without_encryption.block_data = write_block_data;
/*----------------加筆部分ここまで----------------*/
07707692007/12/03(月) 15:18:31
>>769です。
そのあとコンパイルをしたら
1>sample_09.cpp
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(77) : warning C4996: 'gets' が古い形式として宣言されました。
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(270) : 'gets' の宣言を確認してください。
1> メッセージ: 'This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(79) : error C2064: 1 引数を取り込む関数には評価されません。
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(79) : fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1>ビルドログは "file://c:\Documents and Settings\ユーザー1\My Documents\Visual Studio 2005\Projects\felica\felica\Debug\BuildLog.htm" に保存されました。

と表示されました。
error C2064: 1 引数を取り込む関数には評価されません。
というものの対処法をぐぐっても意味がわからないのでどうやって解決していいのかもわかりません。
もしよろしければこれらのエラーの解決方法を教えていただけないでしょうか。

環境は
Windows XP Professional SP2
Microsoft Visual C++ 2005 Express Edition
です。
よろしくお願いします。
長文失礼しました。
0771デフォルトの名無しさん2007/12/03(月) 15:27:02
>>770
#include <cstring>
0772デフォルトの名無しさん2007/12/03(月) 15:31:42
>>770
原因は寧ろこれ。
>char strlen;

つーか、突っ込みどころ多すぎだろ。
0773デフォルトの名無しさん2007/12/03(月) 15:33:00
>>769
fgets使え
0774デフォルトの名無しさん2007/12/03(月) 15:35:28
// 加筆部分はこれでいいよ
unsigned char write_block_data[17];
char str[sizeof(write_block_data + 1];
fprintf(stdout, "...");
fgets(str, sizeof(str), stdin);
char * p = strchr(str, '\n');
if (p) * p = '\0';
sprintf(write_block_data, "%16.16s", str);
// 最後の一行コピペすんのめんどくせ
07757692007/12/03(月) 15:37:25
>>769です。
レスありがとうございます。
>>771
先頭につけてもエラーはかわりませんでした。
>>772
char strlenというものをつけないでやってみたのですが、そのときは
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(80) : error C3861: 'strlen': 識別子が見つかりませんでした
というエラーが出てしまいました。
>>773
fgetsですか。
getsとかいてある部分をfgetsになおせばいいのでしょうか。
07767692007/12/03(月) 15:40:02
>>774
最後の一行は
input_write_block_without_encryption.block_data = write_block_data;
ですよね?
F5を押してコンパイルしたら
1>sample_09.cpp
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(94) : error C2143: 構文エラー : ')' が ']' の前にありません。
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(97) : error C3861: 'strchr': 識別子が見つかりませんでした
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(99) : error C2664: 'sprintf' : 1 番目の引数を 'unsigned char [17]' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(119) : error C3861: 'print_vrctor': 識別子が見つかりませんでした
というエラーが出てきました。
07777692007/12/03(月) 15:43:51
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(94) : error C2143: 構文エラー : ')' が ']' の前にありません。
というのは
char str[sizeof(write_block_data + 1]; を
char str[sizeof(write_block_data + 1)]; に変更したらエラーがなくなりました。

識別子が見つかりませんというエラーは例えばintやcharの宣言が必要という意味なのでしょうか。
0778デフォルトの名無しさん2007/12/03(月) 15:48:04
code plz.
07797692007/12/03(月) 15:50:55
>>778
ttp://www.uploda.org/uporg1141602.zip.html
ヘッダーとファイルをうpしました。
0780デフォルトの名無しさん2007/12/03(月) 15:52:58
>>777
char str[sizeof(write_block_data) + 1]
07817692007/12/03(月) 15:54:53
>>780
()の部分を訂正しました。
0782デフォルトの名無しさん2007/12/03(月) 16:05:46
これって C++ か…限りなく C に近いコードだな。
07837692007/12/03(月) 16:07:19
>>782
C言語だと思っていたのですが*.cppファイルだからC++なんじゃないのかと思ってますw
といってもサンプルプログラムの入っていたフォルダの名前がCになっていたのでC言語だとは思うのですが・・・。
07847692007/12/03(月) 16:22:12
ファイルの先頭を
//#include "stdafx.h"
#include <cstdio>
#include <cstdlib>
#include <conio.h>
#include <cstring>

#include "felica.h"

としてみたらエラーが2つになりました。

1>コンパイルしています...
1>sample_09.cpp
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(99) : error C2664: 'sprintf' : 1 番目の引数を 'unsigned char [17]' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\documents and settings\ユーザー1\デスクトップ\rfid_system\sdk.for.felica.sample.code+header\c\sample_09.cpp(119) : error C3861: 'print_vrctor': 識別子が見つかりませんでした
■ このスレッドは過去ログ倉庫に格納されています