• ベストアンサー

変換できない

現在C言語で簡単な顧客管理システムを作っていますが、どうしても解決できないエラーがありますので、質問させていただきます。 エラー内容は以下のようなものです。 cpp(334) : error C2664: 'strlen' : 1 番目の引数を 'int' から 'const char *' に変換できません。 334行目のソースは、 if(strlen(iBanngou) == 0) です。変数iBanngouは、gets(x)のxをstrlen関数を使って、xの長さをint型のiBanngouに代入したものです。iBanngouをいろいろエラー判定にかけ、何事もなかったらint touroku(DATE *pstr, int *hako, int *hako2)に格納する仕組みになっております。 どのように修正すれば良いか、ご教授していただけるとありがたいです。何卒よろしくお願い致します。

noname#142623
noname#142623

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

こういった質問をする場合 そのエラーになった行のソースのみではなくその前後の数行の関連部分を投稿しましょう ついでに その前後の処理に対するコメントを付け加えましょう 判定をどのように行いたいのかの具体例を明示すると解決が早い場合があります strlenは文字列の長さを返す関数です ココに 整数型などの文字列以外の引数を与えても期待する動作はしません 単に 数値の比較をしたいのであれば if ( iBanngou > 0 ) {   // 文字列x が 1文字以上なら } といった具合になるかと ・・・

その他の回答 (2)

回答No.2

>どのように修正すれば良いか、ご教授していただけるとありがたいです。 エラーメッセージの内容そのまんまですね。 >cpp(334) : error C2664: 'strlen' : 1 番目の引数を 'int' から 'const char *' に変換できません。 「関数の引数として使用できる型が違ってる」と。 strlen()のリファレンスを読んでください。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

>どのように修正すれば良いか、ご教授していただけるとありがたいです。何卒よろしくお願い致します。 いったいどのような動作を期待しているのかわからないので、修正方法もわかりません。 >iBanngouをいろいろエラー判定にかけ とは、具体的にどのようなエラー判定なのでしょうか。

関連するQ&A

  • CStringをwchar_tに変換したい

    CStringをwchar_tに変換したく思い、ネットで探したところ、 http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx のページを見つけたので、下記のプログラムを組んで実行してみましたがエラーになって しまいます。 【プログラム】 CString orig("Hello, World!"); // Convert to a char* const size_t newsize = 100; // Convert to a wchar_t* // You must first convert to a char * for this to work. size_t origsize = strlen(orig) + 1; size_t convertedChars = 0; wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 【エラー】 error C2664: 'strlen' : 1 番目の引数を 'CString' から 'const char *' に変換できません。 error C2664: 'mbstowcs_s' : 4 番目の引数を 'CString' から 'const char *' に変換できません。 &CStrinをconst char *でキャストしてもうまくいきません。 どこがおかしいのでしょうか? 【環境】 WindowsXP+VC++2005

  • CString型からdouble型への変換

    C++は初心者です。VC4.0を使っていますがMFCなどは使っていません。 CString型の変数をint型やlong型への変換はなんとかできたのですが、double型へ変換することができずに困っています。atofを使えばいいのだと思い下記のように記述したのですが、コンパイルするとエラーがでます。   CString sample = "0.234";   double i;   i = atof((const char*)sample); error C2440: 'type cast' : cannot convert from 'class CString' to 'const char *' どう直せば無事にdouble i に0.234を格納できるのでしょうか?よろしくお願いします。

  • CからC#へ

    C#2008を使っています。 以下の昔のソースをC#に置き換える場合、引数のconst部分などでエラーが表示されます。 どのようにすればよいのでしょうか? int check(const char* s) { char msg[256]; // 正しいサイズか short siz = strlen(s); if(64 != siz){ sprintf(msg, "sが64バイトではありません。siz=[%d] s=[%s]\n", siz, s); printf("%s", msg); return 0; } // 正常 return !0; }

  • main の引数には const 付けた方が

    C言語での質問です。 引数を取るような main 関数は int main( int argc, char *argv[]){~} とされていますが、argvの指す文字列を変更する、というのはいくら何でもまずいので、 int main( int argc, const char *argv[]){~} あるいは int main( int argc, const char const * const * argv){~} の方がいいのではないでしょうか? 何故、constを付けない形が出回っているのでしょうか?

  • C++の関数テンプレートで分からないところがあります。

    C++の関数テンプレートで分からないところがあります。 C++の入門書を読んで勉強しているのですが、その演習問題(答えはついてないです)で、以下のような問題がありました。 ----------------------------------------------------- 配列の全要素の最小値を求める関数テンプレートを作成せよ。 teplate <class Type> Type minof(const Type x[], int n); という形で作ること。 なお、最も小さい文字列を求められるようにするために、const char *型に明示的に特殊化したものも合わせて作成すること。 ------------------------------------------------ という問題なのですが、これにたいして僕は以下のように答えました。ヘッダのインクルードなどは省きます。 template<class Type> Type minof(const Type x[], const int n) {     int min = 0;     for(int i = 1; i < n; i++)         if(x[min] < x[i])             min = i;     return x[min]; } template<> const char* minof<const char *>(const char x[][64], const int n) {     int min = 0;     for(int i = 1; i < n; i++)         if(strcmp(x[min], x[i]) < 0)             min = i;     return x[min]; } int main() {     const int n = 5;     int a[n];     char s[n][64];     for(int i = 0; i < n; i++){         cout << i + 1 << "番目---";         cin >> a[i];     }     cout << "文字列\n";     for(int i = 0; i < n; i++){         cout << i + 1 << "番目---";         cin >> s[i];     }     cout << "整数の最小値---" << minof(a, n) << "です\n";     cout << "文字列の最小値---" << minof<const char *>(s, n) << "です\n"; } これをコンパイルすると、エラーで 明示的な特殊化; 'const char *minof<const char*>(const char [][64],const int)' は関数テンプレートの特殊化ではありません と 'minof' : 1 番目の引数を 'char [5][64]' から 'const char *const []' に変換できません。 とでてしまいます。 色々探してみたのですが、解決できませんでした・・。 特に最初のほうのエラーがよくわかりません。ちゃんと特殊化してる気はするのですが・・。 間違っている箇所の正当を載せていただけるとわかりやすくて、ありがたいです。 よろしくお願いします!

  • bsearch関数の呼び出しで

    C言語の深いところまで理解しようとしてます。今まで使わないだろうと思っていた関数へのポインタ なのですが、 2分探索のところで bsearch関数というのが出てきました。 この関数は第5引数に比較関数を引数にするのですが p = bsearch(&ky, x, nx, sizeof(int), (int (*)(const void *,const void *))int_cmp ); という形でサンプルソースには載っています。 この (int (*)(const void *,const void *))int_cmp の部分なのですが、まず戻り値をキャストするなら int (*)ではなく(int *)ではないでしょうか。 それとint_cmpは比較関数なのですが、引数が左側に来る、というところが納得できません。 ちなみにソースファイルをcppのままだとコンパイルできませんでした.cに拡張子を直したらコンパイルできました。 説明が足りないところがあったら指摘してください。お願いします。

  • 文字列リテラルの比較について

    下記のプログラムの疑問点を教えて頂きたい。 (1)mainの実引数(ch[0]は、str_chr関数を呼ぶ場合、intの型変更する理由、 (2)cをキヤストしてchar 型変更した後、再度int C に代入する理由 (3)char型*Sとint 型Cでは、型が違うのに何故比較できる理由 char *str_chr(const char *s, int c) { c = (char)c; while (*s != c) { } main { char ch[2]; str_chr(G,ch[0]) main {

  • ■ 移植性のないポインタ変換について ■

    以下のプログラムは、指定したファイル名の存在を確認し、存在しなければ変数「flg」に「0」を代入するものです。 bcc32コンパイル時に「移植性のないポインタ変換(関数 AB )」と出てしまいます。 コンパイラの引数「-w-rpt」を使った回避以外に解決方法はございますでしょうか? よろしくお願いいたします。 #include <stdio.h> int AB(const char *); void main(void) { char A[] = "ABC.txt"; int flg; flg = AB(A); printf("flg = %d\n", flg); } int AB(const char *A_pt) { return(fopen(A_pt, "r")); }

  • エラーがとれません 助けてください

    エラーがとれません 助けてください http://cs.fit.edu/~mmahoney/dist/eval4.cpp をコンパイルすると eval4.cpp: In member function ‘bool Attack::read(FILE*)’: eval4.cpp:105: error: ‘strlen’ was not declared in this scope eval4.cpp:114: error: ‘strchr’ was not declared in this scope eval4.cpp: In function ‘int main(int, char**)’: eval4.cpp:132: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:133: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:134: warning: deprecated conversion from string constant to ‘char*’ eval4.cpp:183: error: ‘strlen’ was not declared in this scope のようなエラーがでてしまいます。 Ubuntuのg++でコンパイルしています。 なにがまずいのでしょうか?

  • 文字列→数値変換関数

    ・数字文字列を数値化する関数AtoS()を制作する。 書式:short AtoS(char *pStr, int *pRetCode); 引数:char *pStr; 文字列の先頭アドレス    int *pRetCode; 動作の正否を返す 戻り値:pStrを数値化した値 処理: pStrで与えられた文字列をshort型に変換する。 呼び出し側の書式は以下の通りです。 void main(void) {  short val; int code; val = AtoS("1234", & code); printf("%d\n",val); val = AtoS("-789", & code); printf("%d\n", val); } です。専門学校の明日の朝までの課題なのでどうか、どなたか助けて下さい。 

専門家に質問してみよう