• ベストアンサー

strlen関数

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

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

*が付いていることによって、 引数がポインタであることを示しています。 *は必須です。

szatmari
質問者

お礼

回答ありがとうございます。配列のアドレスの宣言ですね。納得しました。

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

関連するQ&A

  • 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の型size_tがわからない

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

  • ライブラリ関数

    文字列をコピーする(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' の前の定義を確認してください 上記の問題が解決できません。助けてください><

  • プログラミングカテゴリ見つかりませんでした…C言語

    プログラミングカテゴリ見つかりませんでした…C言語勉強中なのですが…参考書の以下の書き方がよくわかりません。 int strncomp(const char *s1,const char *s2,size_t n) このsize_tってどういう意味なのでしょうか? 教えていただけると助かります

  • 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

  • c言語関数の(1)~(5)までの部分が何をやっているのかよく分からない

    c言語関数の(1)~(5)までの部分が何をやっているのかよく分からないので、どなたか解説をお願いします。 int memcmp(const void *s1, const void *s2, size_t n) { const unsigned char *p1 = (const unsigned char *)s1; const unsigned char *p2 = (const unsigned char *)s2; while (n-- > 0) { if (*p1 != *p2) return (*p1 - *p2); p1++; p2++; } return (0); } return (*p1 - *p2); > (1) ---------------------------------------------------------------------- char *strcat(char *s1, const char *s2) { char *p = s1; while (*s1) s1++; /* s1を末尾まで進める */ while (*s1++ = *s2++) ; /* '\0'が見つかるまでs2をコピー */ return (p); } while (*s1++ = *s2++) ; > (2) ---------------------------------------------------------------------- char *strstr(const char *s1, const char *s2) { const char *p1 = s1; const char *p2 = s2; while (*p1 && *p2) { if (*p1 == *p2) { p1++; p2++; } else { p1 -= p2 - s2 - 1; p2 = s2; } } return (*p2 ? NULL : (char *)(p1 - (p2 - s2))); } while (*p1 && *p2) > (3) p1 -= p2 - s2 - 1; > (4) ---------------------------------------------------------------------- char *strcpy(char *s1, const char *s2) { char *p = s1; while (*s1++ = *s2++) ; return (p); } while (*s1++ = *s2++)   > (5) ;          > (5) ----------------------------------------------------------------------

  • Cの関数定義で見慣れない記述がありました

    libeventというソフトのソースに以下のような関数定義がありました。 この関数の定義部分が見慣れないものでした。 この関数は、size_tを戻り値としてもち、_event_strlcpyという名前で、 引数として、dst, src, sizの三つをもつというのはわかるのですが、 どうして_event_strlcpy(dst, src, siz)のように、 引数に型が宣言されていないのでしょうか?こういう書き方はアリなのですか? 普通は、_event_strlcpy(char *dst, const char *src, size_t size) というように書くものではないでしょうか? しかも、_event_strlcpy(dst, src, siz)の次の行からの、 char *dst;const char *src;size_t size;の三行は何なのでしょうか? このような位置にこういった書き方をするのはアリなのですか? size_t _event_strlcpy(dst, src, siz) char *dst; const char *src; size_t siz; { register char *d = dst; register const char *s = src; register size_t n = siz; /* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if ((*d++ = *s++) == 0) break; } while (--n != 0); } /* Not enough room in dst, add NUL and traverse rest of src */ if (n == 0) { if (siz != 0) *d = '\0'; /* NUL-terminate dst */ while (*s++) ; } return(s - src - 1); /* count does not include NUL */ }

  • 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     となるのでしょうか!?  よろしくお願いします。  

  • memcpy,memcmp,strcmp,strlen,strcat,

    memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr 以上の関数を自作しました。 ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。 どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。 char *MyMemcpy(char *str1, char *str2, size_t n) { char *p1 = str1; char *p2 = str2; while(n--){ *p1 = *p2; p1++; p2++; } return str1; } void *MyMemcmp(void *str1, void *str2) { char *p1 = (char*)str1; char *p2 = (char*)str2; int n = 0, k = 0; while( *p1 != '\0'){ *p1++; n++; } while( *p2 != '\0'){ *p2++; k++; } if(n > k){ return str1; }else if(n == k){ return 0; }else if(n < k){ return str2; } } char *MyStrcmp(char *str1, char *str2) { char *p1 = str1; char *p2 = str2; int n = 0, k = 0; while( *p1 != '\0'){ *p1++; n++; } while( *p2 != '\0'){ *p2++; k++; } if(n > k){ return str1; }else if(n == k){ return 0; }else if(n < k){ return str2; } } size_t MyStrlen(const char *str1) { char *p1 = (char*)str1; size_t len = 0; while(*p1 != NULL){ *p1++; len++; } return len; } char *MyStrcat(char *str1, const char *str2) { char *p1 = str1; char *p2 = (char*)str2; while(*p1 != NULL){ *p1++; } while(*p2 != NULL){ *p1 = *p2; *p1++; *p2++; } return str1; } char *MyStrcpy(char *str1, char *str2) { char *p1 = str1; char *p2 = str2; while( *p2 != NULL){ *p1 = *p2; *p1++; *p2++; } *p1 = '\0'; return str1; } char *MyStrstr(char *str1, char *str2) { char *p1 = str1; char *p2 = str2; while(*p1 != *p2) { if(*p1 == '\0'){ return 0; } *p1++; } return p1; } char *MyStrchr(const char *str1, char str2) { char *p1 = (char*)str1; while(*p1 != str2) { if(*p1 == '\0'){ return 0; } *p1++; } return p1; }

  • bsearch関数の内容について

    stdlib関数のbsearch関数で、次のことを教えてください。 void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { size_t pl = 0; /* 探索範囲先頭の添字 */ size_t pr = nmemb - 1;/* 探索範囲末尾の添字 */ char *x = (char *)base;/*なぜchar *にキャスト?*/ if (nmemb > 0) { while (1) { size_t pc = (pl + pr) / 2;/* 探索範囲中央の添字 */ int comp = compar((const void *)&x[pc * size], key); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ /*なぜsizeを掛けるのか?*/ if (comp == 0) /* 探索成功 */ return (&x[pc * size]); else if (pl == pr) break; else if (comp < 0) pl = pc + 1;/* 探索範囲を後半に絞り込む */ else pr = pc - 1;/* 探索範囲を前半に絞り込む */ } } return (NULL);/* 探索失敗 */ }

F10で半角変換ができない
このQ&Aのポイント
  • 無線キーボードを使用していますが、F10を押しても半角に切り替わりません。どうしたらよいでしょうか。
  • エレコム株式会社のTK-SLP01BK/ECという無線キーボードを使用していますが、F10を押すと切り取りモードになり、半角に切り替わりません。どうすれば半角に切り替えることができるでしょうか。
  • F10を押しても無線キーボードが半角に切り替わりません。私はエレコム株式会社のTK-SLP01BK/ECを使用しています。どうすれば半角に切り替えることができますか。
回答を見る