• ベストアンサー

標準関数strlenの型size_tがわからない

標準関数strlenの型size_tがわかりません int a; char ss[80]; . . . a = (int)strlen( ss ); とやってもコンパイルエラーです 型違いのようです。 調べたのですがsize_t型なんて知りません。 なぜですか(size_t型って何でしょうか)? どうすれば使えるのでしょうか? 宜しくお願い致します

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

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

OSにより、 #include <string.h> または #include <strings.h> で使えるようになるはずです。 一般的には、intを再定義しているだけだと思いますが。

noname#34252
質問者

お礼

解決しました。 有難うございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • strlen関数

    size_t strlen(const char *s)の*は何の意味があるのでしょうか? なくてもいいような気がしますが。

  • C++ strlenに関して

    visual studio 2010を使ってC++の勉強を始めました。 これまではJAVAによる開発をやっていました。 strlenの定義を観ようと思い定義へ移動すると string.hの中に下記のように書かれていました。 -------------------------------------------------------------------- _Check_return_ size_t __cdecl strlen(_In_z_ const char * _Str); ----------------------------------------------------------------------- 初歩的な事かもしれないのですが、上記のコードの意味が理解できず 困っております。 返り値の型 関数名strlen(引数の型); という順番で書かれているものと思っているのですが、 返り値が下記3つ有るという事でしょうか? ・_Check_return_ ・size_t ・__cdecl また、引数const char * _Strの部分は変更不可能なchar型へのポインタ という事だと解るのですが、 _In_z_が何を意味しているのか理解できません。 --------------------------------------------------------------------------- #define _In_z_ _Pre_z_ _Deref_pre_readonly_ ---------------------------------------------------------------------------- と書かれているのですが、 #define A B でBをAで置き換えるという事だと思っているのですが、 #define A B C となっている場合はどういう意味になるのでしょうか?

  • strlen=がなかったら表示はどうなりますか!?

    #include <stdio.h> #include <string.h> int main() { char mojiretsu[10]; int nagasa; mojiretsu[0] = 'A'; mojiretsu[1] = 'B'; mojiretsu[2] = 'C'; mojiretsu[3] = '\0'; printf("%s\n", mojiretsu); nagasa = strlen(mojiretsu); printf("strlen=%d\n", nagasa); }  私のPCはgccプログラムがうまく働いていません 。   なのでコンパイル後の結果が分かりません。     以上のプログラム表示結果は参考書では    ABC strlen=3    です。  それで  "strlen=%d\n" を"%d\n"にしたら    表示結果は    ABC     3     となるのでしょうか!?  よろしくお願いします。  

  • HINSTANCEの型

    LPSTR は char* なので、 int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , LPSTR lpCmdLine ,int nCmdShow ) を int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , char* lpCmdLine ,int nCmdShow ) と書き換えてもコンパイルできます。 HINSTANCEはvoid *型だという記述を見たのですが、void *で書き換えてもエラーがでてしまいます。 どうしたらよいのでしょうか。

  • 関数の引数の型と引数名を取得する方法

    こんにちは。 コンパイル時に関数の引数の型と引数名を取得する手段はありますでしょうか? 関数名は__FUNCTION__がありますが、引数をなんらかの方法で取得したいのですが手段はありますでしょうか? foo(int a0, int a1 ) なら"int a0, int a1"みたいな感じで取得できればと思っています。

  • ”wchar_t*型は渡せない”というエラー

    現在、ifjpeg.spiのDLLファイルで画像データを表示させるプログラムを作成中です。 このプログラムで、 if( IsSupported(OpenDialog->FileName.c_str(),theFile) != 0 ) このプログラムでビルドを行うと次のようなエラーが出ます。 [BCC32 エラー] Unit1.cpp(106): E2034 'wchar_t *' 型は 'char *' 型に変換できない [BCC32 エラー] Unit1.cpp(106): E2340 1 番目のパラメータは char * 型として定義されているので wchar_t * 型は渡せない ”IsSupported”は ProcIsSupported IsSupported = (ProcIsSupported)GetProcAddress(hSPI, "IsSupported"); このように宣言していて、 typedef int __stdcall (*ProcIsSupported)(LPSTR,DWORD); このようなプログラムなのですが、解決方法を教えて頂けませんでしょうか?

  • 戻り値について

    プログラミング初心者です。 よろしくお願いします。 C++を使っています。 早速なのですが、以下にプログラムを記載します。 ◎1---------------------------------------- #include<stdio.h> main() { char ss[256]; gets(ss); puts(ss); } ---------------------------------------- ◎1を実行すると、「型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません」と表示されます。 参考書には、「戻り値のvoidがないと勝手に戻り値の関数をint型と解釈する。関数の宣言と定義が合わないとコンパイル時にエラーとなる」とあったのですが、 ◎2------------------------------------- #include<stdio.h> int main() { char ss[256]; gets(ss); puts(ss); } ------------------------------------- 以上の◎2だと、なぜ実行出来るかよくわかりません。 本当に初心者的な質問ですいませんが、教えていただけると嬉しいです。

  • 関数の引数をvoid*でキャストする

    最近見かけたCのプログラムで、関数の引数の型は void* なのですが、その関数を使うときに 引数をvoid*でキャストしていました。 例えば、 func ( (void*) p ); こういうことです。 私の知っている知識では、 void* と 任意の型のポインタは キャストなしに相互に代入可能です。 関数の引数でも、キャストは要らないものだと思っていました。 そうすると、引数を void* でキャストするのは無意味だと思うのですが、・・・ 違うのでしょうか。処理系によるとか。 逆に、関数の引数の型がchar*などで、渡すものが void* のときはどうなのでしょうか。 下のプログラムは、関数byte_orderの引数の型はvoid*ですが、int型へのポインタ( &a )を設定しています。私の環境では、コンパイルエラーも警告もないし、動作も正常です。 #include <stdio.h> #include <string.h> void byte_order(void *vp) { char char_array[4]; strncpy(char_array, vp, 4); printf("出力します:%x %x %x %x\n", char_array[0], char_array[1], char_array[2], char_array[3]); } int main(void) { int a = 0x12345678; byte_order(&a); return 0; } このプログラムは単なる一例であって、質問はバイトオーダに関するものではありません。 また、C言語の質問であって、C++ではありません。

  • C言語の標準関数についての質問です><

    C言語の標準関数についての質問です>< 実行結果が以下のようになるようにプログラムを作りたいのですが・・・・ int indat; ← 用意された変数です。 static char outbuf[101]; ←用意された変数です。 使える標準関数は、 sprintf関数と、strlen関数です。 実行結果 数値入力==>123 数値入力==>45 数値入力==>6789 数値入力==>0 数値入力==>-1 文字列連結=123△45△6789△0 自分なりに書きましたが動きません>< #include <stdio.h> #include <string.h> void main(void) { int indat,i; static char outbuf[101]; i=0; while(indat >= 0) { printf("数値入力==>"); scanf("%d",&indat); sprintf(&outbuf[i],"%d",indat); i=strlen(outbuf); } printf("文字列連結",outbuf); return; } 表示の△は空白です>< どなたか、プログラムを教えてください><

  • 関数に配列を渡した場合にサイズが

    C言語初心者です。 以下のように関数に配列を渡した場合、サイズが変わってしまうのは何故でしょうか。 #include "stdafx.h" void fanc(char [3]); int _tmain(int argc, _TCHAR* argv[]) { char a[] = {'a','b','c'}; printf("%d\n",sizeof(a)); // aのサイズ 3 fanc(a); return 0; } void fanc(char b[]){ printf("%d\n",sizeof(b)); // bのサイズ 4 }