関数名 | ヘッダ | 機能 |
---|---|---|
sprintf | stdio.h | データを書式化してメモリに書き込みます |
sscanf | stdio.h | 文字列から書式化されたデータを読み込みます |
strcat | string.h | 文字列を結合します |
strcmp | string.h | 文字列を比較します |
strcpy | string.h | 文字列をコピーします |
strlen | string.h | 文字列の長さを取得します |
strchr | string.h | 文字列から1文字を検索します |
strstr | string.h | 文字列から文字列を検索します |
strncat | string.h | 文字列を結合します |
strncmp | string.h | 文字列を比較します |
strncpy | string.h | 文字列をコピーします |
関数名 | ヘッダ | 機能 |
---|---|---|
memchr | string.h | 指定したメモリエリアから1バイトを検索します |
memcmp | string.h | 指定したメモリエリアを比較します |
memcpy | string.h | 指定したメモリエリアに指定バイトをコピーします(領域の重複禁止) |
memmove | string.h | 指定したメモリエリアに指定バイトをコピーします(領域の重複可) |
memset | string.h | 指定したメモリエリアを指定値で埋めます |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> | int main(void){ char str[256]; sprintf(str,"今回のプログラミング講座は %d 回目です。",70); puts(str); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> | int main(void){ char str[64]="30 50 70"; int n1,n2,n3; sscanf(str,"%d %d %d",&n1,&n2,&n3); printf("解析結果はn1=%d n2=%d n3=%d でした。\n",n1,n2,n3); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> | #include <string.h> int main(void){ char str1[256]="abcde"; char str2[256]="abcde"; strcat(str1,"fghij"); puts("strcatの結果:(abcdeにfghijが結合しました)"); puts(str1); strncat(str2,"fghij",3); puts("strncatの結果:(countよりもstring2の方が長かったので3文字だけ追加されました)"); puts(str2); return 0; } |
戻り値 | 意味 |
---|---|
<0(負値) | 第1引数<第2引数 |
0 | 同じ |
>0(正値) | 第1引数>第2引数 |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> | #include <string.h> int main(void){ char str1[256]="abcdef23"; char str2[256]="abcde1234567890"; //↓一致すると0(偽)を返すので、真偽反転(!)を使うと一致した時のみ真になります。 //↓"abcdef23"と"abcde1234567890"は一致しません。 if(!strcmp(str1,str2))puts("strcmp:一致しました。"); else puts("strcmp:異なりました。"); //↓最初の5バイトまでなので"abcde"と"abcde"を比較し、一致します。 if(!strncmp(str1,str2,5))puts("strncmp:一致しました。"); else puts("strncmp:異なりました。"); //↓最初の5バイトまでなので"abcde"と"abcde"を比較し、一致します。 if(!memcmp(str1,str2,5))puts("memcmp:一致しました。"); else puts("memcmp:異なりました。"); puts("文字列を5文字目で切ります"); str1[5]='\0'; str2[5]='\0'; //↓"abcde"と"abcde"は一致します。 if(!strcmp(str1,str2))puts("strcmp:一致しました。"); else puts("strcmp:異なりました。"); //↓10バイトまでですが、文字列は10バイトより短いので // "abcde"と"abcde"を比較し、一致します。 if(!strncmp(str1,str2,10))puts("strncmp:一致しました。"); else puts("strncmp:異なりました。"); //↓しっかり10バイトなので、"abcde\023\0\0"と"abcde\02345"を比較し、一致しません。 if(!memcmp(str1,str2,10))puts("memcmp:一致しました。"); else puts("memcmp:異なりました。"); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> < 40> < 41> < 42> < 43> < 44> < 45> < 46> < 47> | #include <string.h> int main(void){ char str1[256]="abcdefghij1234567890"; char str2[256]="klmnoあいうえお"; char str3[256]="abcdefghij1234567890"; strcpy(str1,str2); puts("strcpyの結果:(str1にstr2をコピーしました)"); puts(str1); str1[15]='p';//str2をコピーした時に設定されたナル文字を消します puts("strcpy(ナル文字削除後)の結果:(コピーしたナル文字を消したので、残りが出てきました)"); puts(str1); strncpy(str2,"pqrst",3); puts("strncpyの結果:(countよりもsrcの方が長かったのでナル文字が付与されませんでした)"); puts(" そのため、元の文字列の残りが表示されています"); puts(str2); str2[3]='\0';//ナル文字を追加 puts("strncpy(ナル文字追加後)の結果:(ナル文字を付けたので3文字になりました)"); puts(str2); memcpy(str3,str2,11); puts("memcpyの結果:(str3にstr2を11バイトコピーしました)"); puts(str3); str3[3]='u';//さっき追加したナル文字を消します puts("memcpy(ナル文字削除後)の結果:(strcpyと違い、11バイトしっかりコピーされています)"); puts(str3); strcpy(str3,"abcdefghij1234567890");//str3を元に戻します memcpy(&(str3[10]),str3,20);//10バイト先に20バイトコピーします(領域重複) puts("memcpy(領域重複)の結果:(妙なことになっています)"); puts(str3); strcpy(str3,"abcdefghij1234567890");//str3を元に戻します memmove(&(str3[10]),str3,20);//10バイト先に20バイトコピーします(領域重複) puts("memmoveの結果:(領域重複でも正しくコピーしています)"); puts(str3); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> | #include <string.h> int main(void){ char str1[256]="abcde1234567890あいうえお"; printf("%sの文字数(バイト数):%d\n",str1,(int)strlen(str1)); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> | #include <string.h> int main(void){ char str1[256]="abcde1234567890ソあいうえお"; char *ptr; void *ptr2; ptr=strchr(str1,'e');//str1に含まれる e を探します if(ptr!=NULL)printf("e 検出位置からの文字列:%s\n",ptr); else puts("e は見つかりません。"); ptr=strchr(str1,'E');//str1に含まれる E を探します。大文字小文字は区別されます if(ptr!=NULL)printf("E 検出位置からの文字列:%s\n",ptr); else puts("E は見つかりません。"); ptr=strchr(str1,'\\');//str1に含まれる \ を探します。0x5c問題の発現理由の一つがこういうものです //注:ソの日本語第2バイトは \ と同じです if(ptr!=NULL)printf("\\ 検出位置からの文字列:%s\n",ptr); else puts("\\ は見つかりません。"); ptr2=memchr(str1,'e',10);//str1から10バイトの範囲内にある e を探します if(ptr2!=NULL)puts("e が見つかりました。"); else puts("e は見つかりません。"); ptr2=memchr(str1,'0',10);//str1は 0 を含みますが、15バイト目にあるので検出されません if(ptr2!=NULL)puts("0 が見つかりました。"); else puts("0 は見つかりません。"); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> | #include <string.h> int main(void){ char str1[256]="abcde1234567890ソあいうえお"; char *ptr; ptr=strstr(str1,"56789");//str1に含まれる 56789 を探します if(ptr!=NULL)printf("56789 検出位置からの文字列:%s\n",ptr); else puts("56789 は見つかりません。"); ptr=strstr(str1,"CDE");//str1に含まれる CDE を探します。大文字小文字は区別されます if(ptr!=NULL)printf("CDE 検出位置からの文字列:%s\n",ptr); else puts("CDE は見つかりません。"); ptr=strstr(str1,"\\あ");//str1に含まれる \あ を探します。0x5c問題の発現理由の一つがこういうものです //注:ソの日本語第2バイトは \ と同じです if(ptr!=NULL)printf("\\あ 検出位置からの文字列:%s\n",ptr); else puts("\\あ は見つかりません。"); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> | #include <string.h> int main(void){ char str1[256]="abcde1234567890"; int i,n[10]; memset(str1,'7',8);//str1の先頭8バイトを文字 7 で埋めます。 puts("str1 の先頭8バイトを文字 7 を埋めた結果:"); puts(str1); memset(n,0,sizeof(n));//nに割り当てられた領域をすべて0にします。 puts("n の領域をすべて0で埋めた結果:"); //↓ここで全て0になることは言語としては保証されていませんが、 //大抵のコンパイラでは0になります。 for(i=0;i<10;i++){ printf("n[%d]:%d\n",i,n[i]); } return 0; } |