「C言語/標準ライブラリ/stdlib.h」の版間の差分

削除された内容 追加された内容
例を追記
48 行
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
double d;
 
d=atof("3.14");
 
printf("dの値:%.2f\n", d);
}
</pre>
=== atoi, atol及びatoll関数 ===
76 ⟶ 86行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
int i;
 
i=atoi("1234");
 
printf("iの値:%d\n", i);
}
</pre>
=== strtod, strtof及びstrtold関数 ===
108 ⟶ 128行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
double d;
char *endptr;
 
d=strtod("3.14This is double.", &endptr);
 
printf("dの値:%.2f\n", d);
printf("endptrの値:%s\n", endptr);
}
</pre>
=== strtol, strtoll, strtoul及びstrtoull関数 ===
143 ⟶ 175行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
long int l;
char *endptr;
 
l=strtol("1234This is long int.", &endptr, 0);
 
printf("lの値:%ld\n", l);
printf("endptrの値:%s\n", endptr);
}
</pre>
 
163 ⟶ 207行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
int i;
 
srand((unsigned int)time(NULL));
i=rand();
 
printf("iの値:%d\n", i);
}
</pre>
=== srand関数 ===
181 ⟶ 237行目:
:rand関数をsrand関数の呼び出しより前に読んだ場合、srandが最初に種の値を1として呼ばれた時と同じ列を生成する。
*例
[[#rand関数]]を参照せよ。
<pre>
 
</pre>
 
== 記憶域管理関数 ==
204 ⟶ 258行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
int i, *p;
const int nmemb=10;
 
if((p=(int *)calloc(nmemb, sizeof(int)))==NULL){
printf("領域の割り付けができませんでした。\n");
}
 
printf("pの値:");
for(i=0; i<nmemb; ++i)
printf("%d ", p[i]);
 
free(p);
}
</pre>
=== free関数 ===
222 ⟶ 293行目:
:それ以外の場合で、実引数がcalloc関数、malloc関数若しくはrealloc関数によって以前に返されたポインタと一致しないとき、又はその領域がfree若しくはreallocの呼び出しによって解放されているとき、その動作は未定義である。
*例
[[#calloc関数]]、[[#malloc関数]]、[[#realloc関数]]を参照せよ。
<pre>
 
</pre>
=== malloc関数 ===
<ref>『JISX3010:2003』p.226「7.20.3.3 malloc関数」</ref>
241 ⟶ 311行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
int i, *p;
const int size=10;
 
if((p=(int *)malloc(sizeof(int)*size))==NULL){
printf("領域の割り付けができませんでした。\n");
}
 
for(i=0, i<size, ++i)
p[i]=i;
 
printf("pの値:");
for(i=0; i<size; ++i)
printf("%d ", p[i]);
 
free(p);
}
</pre>
=== realloc関数 ===
254 ⟶ 344行目:
:size
*返却値
:新しいオブジェクトへのポインタを返す。新しいオブジェクトの割り付けができなかった場合、空ポインタを返す。
:
*機能
:realloc関数とは、ptrが指す古いオブジェクトを解放し、大きさがsizeである新しいオブジェクトへのポインタを返す関数である。
265 ⟶ 355行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
int i, *p;
int size=10;
 
if((p=(int *)malloc(sizeof(int)*size))==NULL){
printf("領域の割り付けができませんでした。\n");
}
for(i=0; i<size; ++i)
p[i]=i;
printf("\n最初のpの値:");
for(i=0; i<size; ++i)
printf("%d ", p[i]);
 
size=20;
if((p=(int *)realloc(p, sizeof(int)*size))==NULL){
printf("領域の割り付けができませんでした。\n");
}
for(i=10; i<size; ++i)
p[i]=i;
printf("\n次のpの値:");
for(i=0; i<size; ++i)
printf("%d ", p[i]);
 
free(p);
}
</pre>
 
291 ⟶ 409行目:
*例
<pre>
#include <stdlib.h>
 
int main(void)
{
abort();
}
</pre>
=== atexit関数 ===
309 ⟶ 432行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
void function(void);
 
int main(void)
{
atexit(function);
}
 
void function(void)
{
printf("function関数が呼ばれました。\n");
}
</pre>
=== exit関数 ===
331 ⟶ 467行目:
*例
<pre>
#include <stdlib.h>
 
int main(void)
{
exit(0);
}
</pre>
=== _Exit関数 ===
355 ⟶ 496行目:
*例
<pre>
#include <stdlib.h>
 
int main(void)
{
_Exit(0);
}
</pre>
=== getenv関数 ===
372 ⟶ 518行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
char *os;
os=getenv("OS");
 
printf("osの値:%s\n", os);
}
</pre>
=== system関数 ===
391 ⟶ 546行目:
*例
<pre>
#include <stdlib.h>
 
int main(void)
{
system("dir");//コマンドプロンプトを用いてファイルを一覧表示する。
}
</pre>
 
421 ⟶ 581行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int compare(const int *a, const int *b);
 
int main(void)
{
int key=11;
int base[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int *ret;
 
ret=bsearch(&key, base, sizeof(base)/sizeof(int), sizeof(int), (int (*)(const void *, const void *))compare);
 
printf("%dはbase[%d]。", key, ret-base);
}
 
int compare(const int *a, const int *b)
{
return *a-*b;
}
</pre>
=== qsort関数 ===
448 ⟶ 627行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int compare(const int *a, const int *b);
 
int main(void)
{
int base[]={3, 2, 7, 5, 13, 11, 19, 17, 29, 23};
int i;
 
qsort(base, sizeof(base)/sizeof(int), sizeof(int), (int (*)(const void *, const void *))compare);
 
printf("baseの値:");
for(i=0; i<sizeof(base)/sizeof(int); ++i)
printf("%d ", base[i]);
}
 
int compare(const int *a, const int *b)
{
return *a-*b;
}
</pre>
 
472 ⟶ 671行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
int i;
 
i=abs(-1234);
 
printf("iの値:%d\n", i);
}
</pre>
=== div, ldiv 及びlldiv関数 ===
494 ⟶ 703行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
div_t dt;
 
dt=div(10, 3);
 
printf("10/3は%d。\n10%%3は%d。", dt.quot, dt.rem);
}
</pre>
 
522 ⟶ 741行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
int main(void)
{
char s[]="あ";
int l;
 
setlocale(LC_ALL, "JPN");//ロケール(地域)を設定する。
 
l=mblen(s, 256);
 
printf("%sのバイト数は%d。\n", s, l);
}
</pre>
=== mbtowc関数 ===
546 ⟶ 779行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
 
int main(void)
{
char mb[]="あ";
int ret;
wchar_t wc;
 
setlocale(LC_ALL, "JPN");//ロケール(地域)を設定する。
 
ret=mbtowc(&wc, mb, 256);
 
wprintf(L"wcの値:%c\n", wc);
}
</pre>
=== wctomb関数 ===
568 ⟶ 817行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
 
int main(void)
{
wchar_t wc=L'あ';
int ret;
char mb[3]=" ";
 
setlocale(LC_ALL, "JPN");//ロケール(地域)を設定する。
 
ret=wctomb(mb, wc);
 
printf("mbの値:%s\n", mb);
}
</pre>
 
598 ⟶ 863行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
 
int main(void)
{
char mbs[]="あいうえお";
int ret;
wchar_t wcs[16];
 
setlocale(LC_ALL, "JPN");//ロケール(地域)を設定する。
 
ret=mbstowcs(wcs, mbs, 16);
 
wprintf(L"wcsの値:%s\n", wcs);
}
</pre>
=== wcstombs関数 ===
623 ⟶ 904行目:
*例
<pre>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
 
int main(void)
{
wchar_t wcs[]=L"あいうえお";
int ret;
char mbs[16];
 
setlocale(LC_ALL, "JPN");//ロケール(地域)を設定する。
 
ret=wcstombs(mbs, wcs, 16);
 
printf("mbsの値:%s\n", mbs);
}
</pre>