• ベストアンサー

Cランタイムライブラリのヘッダでエラーが出る

文字列クラスを作成しているのですが、コンパイルしたところ、 以下の様なエラーが出ました。 エラー E2268 C:\bcc55\Include\tchar.h 641: 未定義の関数 'strlen' を呼び出した(関数 _strncnt(const char *,unsigned int)) これはどういうことなのでしょうか。なぜ「tchar.h」でエラーが出るのでしょうか。どなたか原因が分かる方はいらっしゃらないでしょうか。 ちなみに、環境はWindows XP、Borland C++ 5.5.1です。

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

  • ベストアンサー
noname#26650
noname#26650
回答No.4

> ファイル名は大文字と小文字が区別されないのですか? Windowsにおいては、そのとおりです。 自作の String.h は、名前を変更する方がよいと思います。 他のところで思わぬ障害を発生させないためにも。

RabbitWrap
質問者

お礼

なるほど、そういうことだったのですか。回答ありがとうございます。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

string.hまたは_str.hと同名のヘッダファイルを自作しているということはないですか?

RabbitWrap
質問者

補足

String.hというヘッダに文字列クラスを宣言していますが、もしかしてファイル名は大文字と小文字が区別されないのですか?

noname#26650
noname#26650
回答No.2

私のところのBorland C++ Compiler 5.5.1 では、 tchar.h から string.h をインクルードしているように見えるのですけれど…。 何か変ですね。

RabbitWrap
質問者

お礼

回答ありがとうございます。string.hをインクルードすることで解決しました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★『tchar.h』の前に『string.h』をインクルードしてはどうでしょうか。 ・『未定義の関数 'strlen' を呼び出した』エラーはプロトタイプ宣言なしで  『strlen』を呼び出したということです。ですから、string.h を include  すればエラーは出ないと思いますが…。 ・以上。試してみて下さい。

RabbitWrap
質問者

お礼

string.hをインクルードしたらエラーが無くなりました。ありがとうございます。

関連するQ&A

  • Borland C++ Compiler で winbase.h を使えないのですが・・・

    Borland C++ Compiler を使っているのですが,winbase.h 自体が使用できません。 次のようなプログラムでもコンパイルが通りません。 #include <winbase.h> int main(void){ return 0; } エラーは以下の通りです。 *** コンパイル開始 *** Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ########.c: エラー E2139 C:\borland\bcc55\Include\winbase.h 227: 宣言に ; がない エラー E2238 C:\borland\bcc55\Include\winbase.h 228: 'ULONG_PTR' の宣言が複数見つかった エラー E2344 C:\borland\bcc55\Include\winbase.h 227: 一つ前の 'ULONG_PTR' の定義位置 (中略) エラー E2228 C:\borland\bcc55\Include\winbase.h 263: エラーあるいは警告が多すぎる *** 26 errors in Compile *** *** コンパイル終了 *** どうすればよいでしょうか? 何かちょっとした情報でもお願いします。

  • dos.hについて

    outportbなどの関数を使用しようとして dos.hをインクルードしているのですが bccでコンパイルするとエラーをはきます。 原因がわかる方いれば教えてください。 下記にソースを載せています。 #include <dos.h > void outportb(unsigned int portid,unsigned char value){ _asm mov edx,portid _asm mov al,value _asm out de,al } エラーは エラー E2451 080311-1.c 6: 未定義のシンボル de(関数 outportb ) *** コンパイル中に 1 個のエラーが発生しました *** とでます。

  • ライブラリ関数

    文字列をコピーする(strcpy) 文字列の長さを調べる(strlen) 配列の長さを調べる(sizeof) #include <stdio.h> #include <string.h> int main(void) { char s1[128] = "ABCD"; char s2[128] = "EFGH"; char s3[128] = "IJKL"; strcpy(s2, s1); strcpy(s3, s2); puts("s1をs2にs2をs3にコピーしました。"); printf("s1 = %s\n", s1); printf("s2 = %s\n", s2); printf("s3 = %s\n", s3); printf("文字列%sの長さは%uです。\n",s3,(unsigned)strlen(s3)); printf("文字列%sの長さは%uです。\n",s3,strlen(s3)); return (0); } char *strcpy(char *d, const char *s) { while (*d++ = *s++) printf("pointer=%s \n",d); } /* 文字列sをdにコピーする[配列版] */ char *strcpy(char d2[], const char s2[]) { unsigned i=0; while (d2[i] = s2[i]){ i++; printf("hairetsu=%s\n",&d2[i]); } } /*--- 文字列strの長さを返す[ポインタ版] ---*/ size_t strlen(const char *s) { size_t len = 0; while (*s++) len++; return (len); } /*--- 文字列strの長さを返す[配列版] ---*/ unsigned strlen(const char str[]) { unsigned len = 0; while (str[len]) len++; return (len); } c:\program files\microsoft visual studio 8\vc\include\string.h(73) : 'strcpy' の宣言を確認してください。 メッセージ: 'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' c:\program files\microsoft visual studio 8\vc\include\string.h(73) : 'strcpy' の宣言を確認してください。 メッセージ: 'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' c:\documents and settings\owner\my documents\visual studio 2005\projects\test8-3\test8-3\test8-3.c(48) : error C2084: 関数 'char *strcpy(char *,const char *)' は既に本体を持っています。 c:\program files\microsoft visual studio 8\vc\include\string.h(73) : 'strcpy' の前の定義を確認してください c:\documents and settings\owner\my documents\visual studio 2005\projects\test8-3\test8-3\test8-3.c(68) : error C2084: 関数 'size_t strlen(const char *)' は既に本体を持っています。 c:\program files\microsoft visual studio 8\vc\include\string.h(80) : 'strlen' の前の定義を確認してください 上記の問題が解決できません。助けてください><

  • lstrcpyが使えない

    #include <dshow.h> としてlstrcpyを加えたコードを bcc32でコンパイルするとエラーが出ます。他にも色々使えない関数が出てきました。 --------------------------------------------- #include <windows.h> #include <dshow.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){ TCHAR ore[64]; lstrcpy(ore,TEXT("こんにちは")); return 0; } --------------------------------------------- bcc32 -I"C:\Borland\Bcc55\Include" -L"C:\Borland\Bcc55\Lib" -I"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include" -L"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Lib" -I"C:\Program Files\Microsoft Platform SDK\Include" -L"C:\Program Files\Microsoft Platform SDK\Lib" -W test.cpp --------------------------------------------- エラー E2451 test.cpp 7: 未定義のシンボル lstrcpy_instead_use_StringCbCopy_or_St ringCchCopy(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) もし解決方をご存知の方がいらっしゃいましたらご教授なにとぞお願い致します。

  • コンパイルエラー

    本日からC++を勉強しはじめました。 使用しているコンパイラはBORLAND C++ COMPILER 5.5 です。 #include<iostream> int main(){ cout<<"hello"; return 0; } 上記をコンパイルすると下記のエラーが出ます。 いったいどこがいけないのでしょうか。 どなたか教えてくださいませ。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 123.c: 致命的エラー F1003 C:\BORLAND\BCC55\include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H *** 1 errors in Compile *** *** コンパイル終了 ***

  • コンパイル時のエラーについて>エラー E2209 警告 W8065?

    以前にも似たような質問がでていましたが・・・ 初心者なのですが下記のようにエラーによりコンパイル出来ません。 どなたか原因のわかる方いましたらいお教え下さい。 宜しくお願いします。  C:\source>bcc32 sample1.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample1.c: エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample1.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main) *** 1 errors in compile *** もちろんbinディレクトリに bcc32.cfg【-I"c:\Borland\Bcc55\Include" -L"c:\Borland\Bcc55\Lib"】 と ilink32.cfg【-L"c:\Borland\Bcc55\lib"】 は入れてあります。 なんでできないんでしょかTT

  • C言語のキャストについて

    お世話になります。 CRC-16の計算プログラムをC言語でつくりました。 例えば・・・1F 08 00 00 12 34 なら“1F0800001234”と入力すると【EEC2】と表示するプログラムです。 ただ・・・.Net SDKでコンパイルするとできたのですが、Visual C++2008でコンパイルするとエラーが出てしまいます。 (48) : error C2664: 'strlen' : 1 番目の引数を 'unsigned char [256]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 (52) : error C2664: 'strtol' : 1 番目の引数を 'unsigned char [3]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 型変換が必要ってことまではわかったのですが・・・必要なのはわかって行き詰まり状態です。。。 どのようしたらよいのでしょうか?ご教授をよろしくお願いします。 ソースは以下の通りです。 #include "stdafx.h" #include <stdio.h> #include <string.h> #include <stdlib.h> unsigned short crc_cal(unsigned short lng, unsigned char *str) { unsigned short crc, i, j, t; t= 0x0000; crc = 0xffff; for (i = 0; i < lng ; i++) { crc ^= (unsigned short) str[i]; t = (unsigned short) str[i]; for (j = 1; j <= 8; j++) { if (crc & 1) { // carry bit on crc = crc >> 1; crc ^= 0xa001; } else { // carry bit off crc = crc >> 1; } } } return crc; } int main(void) { unsigned char str[256],data[128],hexstr[3]; unsigned short crc,CRC,len; while(1) { printf("Please input key (HEX)\n"); scanf("%255s",str); hexstr[2]='\0'; for(len=0; len<(strlen(str)/2) ;len++) { hexstr[0]=str[len*2]; hexstr[1]=str[len*2+1]; data[len]=(unsigned char)strtol(hexstr, NULL, 16); } crc = crc_cal(len,data); CRC = (crc>>8) | (crc<<8); printf("\nCRC16 = %04X\n\n", CRC); } return 0; }

  • BCC・stdio.h・_stddef.hのエラー

    BCCと同梱されているstdio.hのエラーなのですが、 stdio.hのエラーは他では出なかったので、 ソース自体がおかしいのかと思っていますが、よく分かりません。 一応ソースを載せます。 #include <stdio.h> int main(int argc, char *argv[]) { if(argv[1] == "") { printf("---(Ver1.00.01)\n"); printf("easy.exe [filename]\n"); printf(" [filename] - ファイル名を指定してください.\n"); } return 0; } これによって次のエラーを吐いてきます。 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\_stddef.h 53: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\_stddef.h 72: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 51: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 104: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 105: 宣言が正しく終了していない エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 140: ) が必要 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 150: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 151: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 152: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 154: 宣言が正しく終了していない エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 155: ) が必要 エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 156: ) が必要 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 160: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 161: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 162: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 164: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 165: 宣言が正しく終了していない エラー E2141 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 166: 宣言の構文エラー エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 172: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 173: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 174: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 175: 宣言が正しく終了していない エラー E2141 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 177: 宣言の構文エラー エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 181: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 188: 宣言が正しく終了していない エラー E2228 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 188: エラーあるいは警告が多すぎる stdio.h,_stddef.hのソースは一切変えたりしていません。 また、BCCのエラーは、stdio.hとprintfを抜いて int main(int argc, char *argv[]) { if(argv[1] == "") { } return 0; } としたときに 宣言が正しく終了していない と表示されます。 環境は WindowsXP SP1 BCC Developer です。 よろしくお願いします。

  • Borland C++ Compilerのエラーについて

    初心者なもので教えてください!! エラーE2209「インクルードファイル’stdio h’をオープンできない」 警告W8065「プロトタイプ宣言のない関数’printf’の呼び出し(関数main)」 と出てきてしまうので、この掲示板の過去のページを参考に、 1)bcc32.cfgの内容見直し(拡張子も.cfgになってます) 2)インクルードファイル、ライブラリファイルがC:borland\bcc55にあるか確認 3)bcc32.cfgとbcc32.exeが同じC:borland\bcc55\binにあるか確認 4)環境変数にC:borland\bcc55\binに加えてあるか確認 …と頑張ってみたのですが、解決しません!! お願いです。助けてください(TОT)

  • 「外部シンボルが未解決」について教えてください

    BCCを使ってます。windowsのプログラムで、『外部シンボル 'MyCreateFontが未解決』と言うメッセージが出たのですが、リンクエラーなのでしょうか? また、『外部シンボル○○が未解決』と表示された場合、どのような処置をすればいいですか。アドバイスをお願いします。 D:\borland\bcc55\lesson>bcc32 -W -w-8057 timer.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland timer.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'MyCreateFont(int, unsigned long, const char *)' が未解決(D:\BORLAND\BCC55\LESSON\TIMER.OBJ が参照 ) こちらが、宣言の部分です。 #include <windows.h> #define ID_MYTIMER 100 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); HFONT MyCreateFont(int, DWORD, LPCTSTR); char szClassName[] = "clock"; //ウィンドウクラス int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)

専門家に質問してみよう