- 1 1. ã¯ããã«
- 2 2. é åã®åºæ¬æŠå¿µ
- 3 3. é åã®ã³ããŒæ¹æ³
- 4 4. æååïŒcharé åïŒã®ã³ããŒ
- 5 5. é åã³ããŒæã®æ³šæç¹
- 6 6. FAQïŒãããã質åïŒ
- 6.1 Q1. memcpyãšmemmoveã®éãã¯äœã§ããïŒ
- 6.2 Q2. strcpyãšstrncpyã®éããšäœ¿ãåãã¯ïŒ
- 6.3 Q3. é åã颿°ã®åŒæ°ãšããŠæž¡ããšãã®æ³šæç¹ã¯ãããŸããïŒ
- 6.4 Q4. memcpyã§æ§é äœã®é åãã³ããŒããŠãåé¡ãªãïŒ
- 6.5 Q5. é åããŸãšããŠã³ããŒããããã©ãæ¯åforæãæžãã®ã¯é¢åã§ããå ±é颿°ã«ã§ããŸããïŒ
- 7 7. ãŸãšã
1. ã¯ããã«
Cèšèªã«ããããé åã³ããŒãã®éèŠæ§
Cèšèªã§ããã°ã©ãã³ã°ãããŠãããšãé åã®äžèº«ãå¥ã®é åã«ã³ããŒããããšããå Žé¢ã«ãã³ãã³åºäŒããŸããäŸãã°ãããŒã¿ã®ããã¯ã¢ãããåããããšãããäžæçãªåŠçã®ããã«å¥ã®å€æ°ã«å€ãä¿æããããšããªã©ã§ãã
ããããCèšèªã¯é«çŽèšèªãšæ¯ã¹ãŠã¡ã¢ãªæäœã«é¢ãããµããŒããå°ãªããé åã®ã³ããŒãèªåã§è¡ã£ãŠãããªããããæåã§ã³ããŒåŠçãæžãå¿ èŠããããŸãããããããã®æ¹æ³ãééãããšãæå³ããªãåäœãããã¡ã¢ãªç Žå£ããšãã£ãæ·±å»ãªãã°ãæãå¯èœæ§ããããŸãã
ãã®ãããæ£ããã³ããŒæ¹æ³ãçè§£ããå®å šãã€å¹ççã«é åãæ±ãããšã¯ãCèšèªãåŠã¶äžã§éåžžã«éèŠãªã¹ãã«ã®ã²ãšã€ã§ãã
é åã³ããŒã«æ©ã人ã¯å€ã
å®éã«ãCèšèª é å ã³ããŒããšããããŒã¯ãŒãã§æ€çŽ¢ãã人ã¯å€ããããã ãããŒãºãé«ãããšããããããŸãã
memcpy
ã䜿ãã°äžç¬ã§ã³ããŒã§ããïŒstrcpy
ãšã®éãã¯ïŒforæ
ã§1ã€ãã€ã³ããŒããæ¹ãå®å šïŒ- ãã€ã³ã¿ã䜿ã£ãã³ããŒã¯ã©ãæžãã®ïŒ
ããããçåã«çããããã«ãæ¬èšäºã§ã¯Cèšèªã«ãããé åã³ããŒã®åºæ¬ããå¿çšãŸã§ããããããã解説ããŠãããŸãã
æ¬èšäºã§åŠã¹ãããš
ãã®ããŒãžãèªãããšã§ã以äžã®ç¥èãåŸãããšãã§ããŸãã
- Cèšèªã«ãããé åã®åºæ¬çãªæŠå¿µ
- é åãã³ããŒããè€æ°ã®æ¹æ³ãšãããããã®å©ç¹ã»æ³šæç¹
- æååïŒcharåé åïŒãã³ããŒããéã®ã³ããšèœãšã穎
- ããããçåãžã®Q&A圢åŒã®è§£èª¬
Cèšèªåå¿è ã®æ¹ã§ãçè§£ããããããã«ããµã³ãã«ã³ãŒãä»ãã§äžå¯§ã«è§£èª¬ããŠãããŸããæ¬¡ã®ã»ã¯ã·ã§ã³ããããŸãã¯é åã®åºæ¬ã«ã€ããŠèŠãŠãããŸãããã
2. é åã®åºæ¬æŠå¿µ
é åãšã¯äœãïŒ
Cèšèªã«ãããé
åïŒArrayïŒãšã¯ãåãããŒã¿åã®èŠçŽ ãé£ç¶ããŠæ ŒçŽããããã®å€æ°ã§ããããšãã°ã5人åã®ç¹æ°ãæ ŒçŽããããã«ãint
åã®å€æ°ã5ã€å®çŸ©ãã代ããã«ã1ã€ã®é
åã§ãŸãšããŠæ±ãããšãã§ããŸãã
int scores[5];
ãã®ããã«å®çŸ©ãããé åã«ã¯ã0çªç®ããé ã«ã€ã³ããã¯ã¹ãæå®ããŠã¢ã¯ã»ã¹ã§ããŸãã
scores[0] = 80;
scores[1] = 75;
scores[2] = 90;
scores[3] = 60;
scores[4] = 85;
ããã§ã¯ scores[0]
ïœ scores[4]
ã®5ã€ã®èŠçŽ ã«æŽæ°ã代å
¥ããŠããŸããã€ã³ããã¯ã¹ã¯0ããå§ãŸãç¹ã«æ³šæããŸãããã
é åã®åæåæ¹æ³
é åã¯å®£èšæã«åæåããããšãã§ããŸããåæåãšã¯ãé åãäœæãããšåæã«å€ãä»£å ¥ããããšã§ãã
int scores[5] = {80, 75, 90, 60, 85};
ãã®ããã«èšè¿°ããããšã§ãé åã®åèŠçŽ ã«é çªã«å€ãä»£å ¥ãããŸãããªããé åã®ãµã€ãºãçç¥ããããšãå¯èœã§ãã
int scores[] = {80, 75, 90, 60, 85}; // èŠçŽ æ°ã¯èªåã§5ãšå€æããã
éã«ãèŠçŽ æ°ãæç€ºããŠãå€ãè¶³ããªãå Žåãæ®ãã®èŠçŽ ã¯èªåçã« 0
ã§åæåãããŸãã
int scores[5] = {80, 75}; // scores[2]ïœscores[4] ã¯0ã«ãªã
é åã®ã¡ã¢ãªæ§é ãçè§£ãã
Cèšèªã§ã¯ãé
åã®èŠçŽ ã¯ã¡ã¢ãªäžã«é£ç¶ããŠé
眮ãããŸãããã®ç¹æ§ã«ãããfor
ã«ãŒãããã€ã³ã¿ã䜿ã£ãŠå¹ççã«æäœã§ããŸãã
ããšãã°ä»¥äžã®ãããªã³ãŒãã§ã¯ãé åã®ãã¹ãŠã®èŠçŽ ãé çªã«è¡šç€ºããŠããŸãã
for (int i = 0; i < 5; i++) {
printf("%d
", scores[i]);
}
ãã®ããã«é åã®åºæ¬æ§é ãçè§£ããŠããããšã¯ãåŸè¿°ãããã³ããŒåŠçãã«ã倧ããé¢ä¿ããŠããŸãã
3. é åã®ã³ããŒæ¹æ³
Cèšèªã§ã¯ãé
åã代å
¥æŒç®åïŒ=
ïŒã§äžæ¬ã³ããŒããããšã¯ã§ããŸããã以äžã®ãããªã³ãŒãã¯ã³ã³ãã€ã«ãšã©ãŒã«ãªããŸãã
int a[5] = {1, 2, 3, 4, 5};
int b[5];
b = a; // ãšã©ãŒïŒé
åå士ã®ä»£å
¥ã¯äžå¯
ãããã£ãŠãé åãã³ããŒããã«ã¯ãæç€ºçã«1ã€ãã€èŠçŽ ãã³ããŒããæ¹æ³ããæšæºã©ã€ãã©ãªé¢æ°ãäœ¿ãæ¹æ³ãå¿ èŠã§ããããã§ã¯ä»£è¡šçãª3ã€ã®æ¹æ³ã玹ä»ããŸãã
forã«ãŒãã䜿ã£ãèŠçŽ ããšã®ã³ããŒ
æãåºæ¬çã§å®å
šãªæ¹æ³ã¯ãfor
ã«ãŒãã䜿ã£ãŠ1ã€ãã€èŠçŽ ãã³ããŒããæ¹æ³ã§ãã
#include <stdio.h>
int main() {
int src[5] = {10, 20, 30, 40, 50};
int dest[5];
for (int i = 0; i < 5; i++) {
dest[i] = src[i];
}
// ã³ããŒçµæã®è¡šç€º
for (int i = 0; i < 5; i++) {
printf("%d ", dest[i]);
}
return 0;
}
ãã®æ¹æ³ã®å©ç¹ã¯ããé åãµã€ãºãææ¡ãããããå¶åŸ¡ããããããšããç¹ã§ããå®å šæ§ãé«ããåå¿è ã«ãããããã§ããŸãã
memcpy
颿°ã䜿ã£ãé«éã³ããŒ
ããå¹ççã«é
åãã³ããŒãããå Žåã¯ãæšæºã©ã€ãã©ãª <string.h>
ã«å«ãŸãã memcpy
颿°ãäœ¿ãæ¹æ³ããããŸãã
#include <stdio.h>
#include <string.h>
int main() {
int src[5] = {1, 2, 3, 4, 5};
int dest[5];
memcpy(dest, src, sizeof(src)); // srcã®ãã€ãæ°åãã³ããŒ
for (int i = 0; i < 5; i++) {
printf("%d ", dest[i]);
}
return 0;
}
memcpy
ã®äœ¿ãæ¹ã®ãã€ã³ãïŒ
- 第1åŒæ°ïŒã³ããŒå ãã€ã³ã¿
- 第2åŒæ°ïŒã³ããŒå ãã€ã³ã¿
- 第3åŒæ°ïŒã³ããŒãããã€ãæ°ïŒæ³šæïŒèŠçŽ æ°ã§ã¯ãªãïŒ
泚æç¹ïŒ
- ã³ããŒå ã»å ã®é åãµã€ãºãç°ãªããšãããã¡ãªãŒããŒãããŒãèµ·ããå¯èœæ§ãããããããµã€ãºãå¿ ã確èªããããšã
- ã¡ã¢ãªã®éãªããããå Žåã«ã¯äœ¿çšäžå¯ïŒæ¬¡é ã§è§£èª¬ïŒã
memmove
ãšã®éããšäœ¿ãåã
memcpy
ãšäŒŒã颿°ã«memmove
ããããŸããäž¡è
ã®éãã¯ããã³ããŒå
ãšã³ããŒå
ãéãªã£ãŠãããšãã®æåãã§ãã
memcpy
ïŒã¡ã¢ãªãéãªã£ãŠããªãå Žåã«äœ¿çšãéè€ãããšæªå®çŸ©åäœãmemmove
ïŒéãªã£ãŠããŠãå®å šã«ã³ããŒã§ããã
䜿çšäŸïŒ
char str[] = "ABCDE";
// 2æåç®ä»¥éã1æåç®ããäžæžãã³ããŒïŒéãªãããïŒ
memmove(str + 1, str, 4);
str[5] = ' '; // nullçµç«¯
printf("%s
", str); // åºåïŒAABCD
䜿ãåãã®åºæ¬ã«ãŒã«ïŒ
䜿çšç¶æ³ | æšå¥šé¢æ° |
---|---|
ã¡ã¢ãªãéãªããªã | memcpy |
éãªãå¯èœæ§ããã | memmove |
é
åæäœã«ãããŠã¯éåžž memcpy
ã䜿ãã°ååã§ãããæååæäœãªã©ã§é
åã®äžéšãç§»åãããããªã±ãŒã¹ã§ã¯ memmove
ã䜿ãã¹ãã§ãã

4. æååïŒcharé åïŒã®ã³ããŒ
Cèšèªã§ã¯ãæååã¯char
åã®é
åãšããŠæ±ãããæ°å€ã®é
åãšã¯å°ãç°ãªãç¹ã«æ³šæãå¿
èŠã§ããæååã³ããŒã«ã¯å°çšã®é¢æ°ãçšæãããŠãããmemcpy
ã®ãããªãã€ããªã³ããŒãšã¯ç°ãªãããçµç«¯æå ãå«ããŠã³ããŒããããšããç¹åŸŽããããŸãã
strcpy
颿°ã§æååãã³ããŒãã
Cèšèªã®æšæºã©ã€ãã©ãª <string.h>
ã«å«ãŸãã strcpy
颿°ã¯ããã«çµç«¯ïŒïŒãŸã§æååãã³ããŒããŠããã䟿å©ãªé¢æ°ã§ãã
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[50];
strcpy(dest, src);
printf("ã³ããŒçµæïŒ%s
", dest);
return 0;
}
ãã®ã³ãŒãã§ã¯ãsrc
ã®æååïŒçµç«¯ã®å«ãïŒãdest
ã«ã³ããŒããŠããŸãã
泚æç¹ïŒ
dest
ã®ãµã€ãºãå°ãããšãããã¡ãªãŒããŒãããŒã®åå ã«ãªããããååãªãµã€ãºã確ä¿ããå¿ èŠããããŸãã- ã³ããŒãããæåæ°ã¯
src
ã®é·ãã«äŸåããŸãã
strncpy
ã§å®å
šã«ã³ããŒãã
strcpy
ã®ä»£ããã«äœ¿ãã颿°ãstrncpy
ã§ãããã¡ãã¯ãæå®ããæåæ°åã ãã³ããŒããããšãã仿§ã«ãªã£ãŠãããå®å
šæ§ãé«ããªããŸãã
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "C language";
char dest[10];
strncpy(dest, src, sizeof(dest) - 1); // æåŸã®1ãã€ã㯠çšã«æ®ã
dest[9] = ' '; // 念ã®ããçµç«¯æåãæç€º
printf("ã³ããŒçµæïŒ%s
", dest);
return 0;
}
strncpy
ã®ç¹æ§ïŒ
- æå®ããé·ãåã ãã³ããŒããã
- ã³ããŒå
ãçãå Žåãæ®ãã®éšåã¯
NULL
ã§åããããïŒç°å¢ã«ããïŒã - çµç«¯æåãèªåã§ä»å ããããšã¯éããªãã®ã§ãèªåã§æç€ºããã®ãå®å šã
æ¥æ¬èªïŒãã«ããã€ãæååïŒãæ±ããšãã®æ³šæ
æ¥æ¬èªãªã©ã®ãã«ããã€ãæåïŒUTF-8ãShift-JISãªã©ïŒãæ±ãå Žåãstrcpy
ãstrncpy
ã§éäžã®ãã€ããåãåã£ãŠããŸããšãæååãã衚瀺ãšã©ãŒã®åå ã«ãªããŸãã
ããšãã°ãããã«ã¡ã¯ãã3ãã€ãã ãã³ããŒãããšãäžéå端ãªç¶æ
ã«ãªãããšããããŸããããããå Žåã¯ãæååäœã§æ±ããã©ã€ãã©ãªããã¯ã€ãæåïŒwchar_t
ïŒã®äœ¿çšãæ€èšããå¿
èŠããããŸãã
æååã³ããŒã®ãã¹ããã©ã¯ãã£ã¹ãŸãšã
颿°å | ç¹åŸŽ | 泚æç¹ |
---|---|---|
strcpy | çµç«¯æåãŸã§ã³ã㌠| ãããã¡ãµã€ãºã®ç¢ºèªå¿ é |
strncpy | æå®é·ãåã ãã³ããŒã§ãã | çµç«¯æåãä¿èšŒãããªãããšã |
memcpy | ä»»æã®ãã€ãåãã³ããŒã§ãã | ãã€ããªã³ããŒãæåååãã§ãªã |
strdup | ã³ããŒããæååã®æ°ããã¡ã¢ãªã確ä¿ïŒéæšæºïŒ | 䜿çšåŸã¯free ãå¿
èŠ |
5. é åã³ããŒæã®æ³šæç¹
é åã®ã³ããŒã¯äžèŠã·ã³ãã«ãªåŠçã«æããŸãããæ£ããæ±ããªããšé倧ãªãã°ãã»ãã¥ãªãã£ããŒã«ãçãæãããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãCèšèªã«ãããé åã³ããŒæã«ç¹ã«æ³šæãã¹ããã€ã³ãã解説ããŸãã
ãããã¡ãªãŒããŒãããŒã«æ³šæ
æãé »ç¹ã«èŠããããã¹ããã³ããŒå ã®é åãµã€ãºãè¶ ããŠããŒã¿ãæžã蟌ãã§ããŸãããããã¡ãªãŒããŒãããŒãã§ãã
äŸïŒå±éºãªã³ããŒåŠç
char src[] = "This is a long string.";
char dest[10];
strcpy(dest, src); // destã®ãµã€ãºãè¶
ããŠã³ã㌠â ã¡ã¢ãªç Žå£ã®å¯èœæ§
ãã®ãããªã³ãŒãã¯ãäžæ£ãªã¡ã¢ãªé åãžã®ã¢ã¯ã»ã¹ãåŒãèµ·ãããããã°ã©ã ãã¯ã©ãã·ã¥ããããè匱æ§ã®åå ã«ãªããŸãã
察çïŒ
strncpy
ãmemcpy
ã䜿ããå¿ ããµã€ãºãå¶éããã- çµç«¯æå ãæåã§è¿œå ããããšãå¿ããªãã
- é åã®ãµã€ãºã宿°ããã¯ãã§ç®¡çããã
ã³ããŒå¯Ÿè±¡ã®ãµã€ãºãæ£ç¢ºã«ææ¡ãã
memcpy
ãmemmove
ã§ã³ããŒããéã¯ãèŠçŽ æ°ã§ã¯ãªãããã€ãæ°ãã§æå®ããå¿
èŠããããŸãã
å®å šãªãµã€ãºæå®ã®äŸïŒ
int src[5] = {1, 2, 3, 4, 5};
int dest[5];
memcpy(dest, src, sizeof(src)); // srcå
šäœã®ãã€ãæ°ãæå®
ãã®ããã« sizeof(src)
ã䜿ãã°ãèªåçã«é
åå
šäœã®ãµã€ãºïŒãã€ãæ°ïŒãåŸãããããå®å
šã§ãã
ãã ãã颿°ã®åŒæ°ãšããŠé
åãåãåããšã㯠sizeof
ãæåŸ
éãã«åäœããŸããïŒé
åã¯ãã€ã³ã¿ã«éåããããïŒã®ã§æ³šæãå¿
èŠã§ãã
ãã€ã³ã¿æäœæã®æ³šæç¹
Cèšèªã§ã¯ãé åã¯ãã€ã³ã¿ãšããŠæ±ãããããšãå€ããééã£ããã€ã³ã¿æäœã«ãã£ãŠã¡ã¢ãªãç Žå£ããå¯èœæ§ããããŸãã
ãããããã¹äŸïŒ
int *src = NULL;
int dest[5];
memcpy(dest, src, sizeof(dest)); // NULLãã€ã³ã¿ãã³ããŒå
ã«æå® â ã¯ã©ãã·ã¥
ãã€ã³ãïŒ
- ãã€ã³ã¿ãæå¹ãªã¢ãã¬ã¹ãæããŠããããNULLãã§ãã¯ãè¡ãã
- ã¡ã¢ãªç¢ºä¿ïŒ
malloc
ãªã©ïŒåŸã«ã³ããŒããå Žåã確ä¿ãµã€ãºãšã³ããŒãµã€ãºã®æŽåæ§ã確èªããã
ã³ããŒå ãšã³ããŒå ã®é åãéãªããšãã®å¯Ÿç
ãã§ã«è§£èª¬ããéããmemcpy
ã¯éè€ããã¡ã¢ãªé åã®ã³ããŒã«å¯Ÿå¿ããŠããŸãããé
åã®äžéšãå¥ã®äœçœ®ã«ã³ããŒãããããªå Žåã¯ãmemmove
ã䜿çšããã®ãéåã§ãã
char buffer[100] = "example";
// äžéšã®æååãèªåèªèº«ã®äžã§ç§»å
memmove(buffer + 2, buffer, 4); // å®å
šã«éè€ã³ããŒ
é åãµã€ãºã®å®çŸ©ãšç®¡ç
å®å šãªã³ããŒåŠçãè¡ãããã«ã¯ãé åãµã€ãºã®äžå 管çãæå¹ã§ãã以äžã®ããã«ãã¯ãã§å®çŸ©ããŠããããšã§ãã³ãŒãã®ä¿å®æ§ãšå®å šæ§ãåäžããŸãã
#define ARRAY_SIZE 10
int arr1[ARRAY_SIZE];
int arr2[ARRAY_SIZE];
memcpy(arr2, arr1, sizeof(arr1));
å®å šãªé åã³ããŒã®ããã®ãŸãšã
- ã³ããŒæã«ã¯ãµã€ãºïŒãã€ãæ°ïŒãæ£ç¢ºã«ææ¡ããã
strncpy
ãmemmove
ãªã©ã®å®å šãªé¢æ°ãéžã¶ã- ã³ããŒå ã»å ã®ãµã€ãºæŽåæ§ãåžžã«ç¢ºèªããã
- ãã€ã³ã¿æäœã«ã¯ç¹ã«æ³šæããNULLãã§ãã¯ãå¢çãã§ãã¯ãè¡ãã
6. FAQïŒãããã質åïŒ
Cèšèªã«ãããé åã®ã³ããŒã«ã€ããŠãååŠè ããäžçŽè ãŸã§ãããçåã«æããã€ã³ããQ&A圢åŒã§è§£èª¬ããŸããã¡ãã£ãšããéãã仿§ãæ£ããçè§£ããããšã§ããã°ã®äºé²ãã³ãŒãã®å質åäžã«ãã€ãªãããŸãã
Q1. memcpy
ãšmemmove
ã®éãã¯äœã§ããïŒ
A. ã¡ã¢ãªé åãéãªã£ãŠããå Žåã«ãåäœã®å®å šæ§ãç°ãªããŸãã
æ¯èŒé ç® | memcpy | memmove |
---|---|---|
éãªãã«å¯Ÿããå®å šæ§ | ÃïŒæªå®çŸ©åäœã«ãªãå¯èœæ§ïŒ | âïŒå éšã§äžæãããã¡ã䜿ã£ãŠåŠçïŒ |
åŠçé床 | é«éïŒãªãŒããŒãããå°ïŒ | ããé ãïŒå®å šå¯ŸçããïŒ |
çšé | é åã®å®å šãªã³ããŒãªã© | åäžé åå ã§ã®ããŒã¿ç§»åãªã© |
è£è¶³ïŒéãªãããªããšããã£ãŠããå Žåã¯memcpy
ã§OKã§ãããè¿·ã£ããmemmove
ãéžã¶ã®ãå®å
šã§ãã
Q2. strcpy
ãšstrncpy
ã®éããšäœ¿ãåãã¯ïŒ
A. å®å šæ§ãšæè»æ§ã®ãã¬ãŒããªããããããã䜿ãåããå¿ èŠã§ãã
strcpy(dest, src)
âsrc
ã®çµç«¯ïŒïŒãŸã§ãå šãŠã³ããŒããã ããdest
ãå°ãããšãããã¡ãªãŒããŒãããŒã®å±éºãããstrncpy(dest, src, n)
â æå®ããæå€§ãã€ãæ°n
ãŸã§ããã³ããŒããªããå®å šæ§ã¯é«ããããèªåã§ä»äžããããšã¯éããªãã
ããããã®äœ¿ãåãïŒ
- 確å®ã«ãµã€ãºãè¶³ããŠããããšãåãã£ãŠãããªã
strcpy
- å®å
šç¬¬äžã»äžç¹å®æååãæ±ããšãã¯
strncpy
ïŒæåã§ ãä»å
Q3. é åã颿°ã®åŒæ°ãšããŠæž¡ããšãã®æ³šæç¹ã¯ãããŸããïŒ
A. é
åã¯ãã€ã³ã¿ã«ãéåããããããsizeof
ã§ãµã€ãºãåããªããªããŸãã
void copy_array(int arr[], int size) {
printf("%zu
", sizeof(arr)); // â ãã€ã³ã¿ã®ãµã€ãºïŒäŸïŒ8ïŒã«ãªã
}
ãã®ããã«ãé åã®å®ãµã€ãºãååŸã§ããªããªãããã颿°ã«æž¡ãéã¯ãµã€ãºãåŒæ°ãšããŠäžç·ã«æž¡ãã®ãåºæ¬ã§ãã
void copy_array(int arr[], int size) {
for (int i = 0; i < size; i++) {
// åŠçå
容
}
}
Q4. memcpy
ã§æ§é äœã®é
åãã³ããŒããŠãåé¡ãªãïŒ
A. åºæ¬çã«ã¯å¯èœã§ãããããã€ã³ã¿ãå«ãæ§é äœãã«ã¯æ³šæãå¿ èŠã§ãã
memcpy
ã¯ãã€ããªåäœã®ã³ããŒãè¡ããããæ§é äœã«ãã€ã³ã¿ãå«ãŸããŠãããšããã€ã³ã¿ã®åç
§å
ïŒå®ããŒã¿ïŒãŸã§ã¯ã³ããŒãããŸããã
äŸïŒæµ ãã³ããŒã«ãªãïŒïŒ
typedef struct {
char *name;
int age;
} Person;
Person a[3];
Person b[3];
memcpy(b, a, sizeof(a)); // ãã€ã³ã¿èªäœã®ã³ããŒã«ãªãïŒåç
§å
ã¯å
±æïŒ
ãã®ãããªå ŽåãããŒã¿ã®äºéè§£æŸãäžæŽåãçºçããå¯èœæ§ããããŸãã察çãšããŠã¯ããã€ã³ã¿éšåãåå¥ã«malloc
ïŒstrcpy
ãªã©ã§æ·±ãã³ããŒããå¿
èŠããããŸãã
Q5. é åããŸãšããŠã³ããŒããããã©ãæ¯åforæãæžãã®ã¯é¢åã§ããå ±é颿°ã«ã§ããŸããïŒ
A. ã¯ãã颿°åããããšã§åå©çšæ§ãé«ãŸããã³ãŒããã¹ãããªããŸãã
void copy_int_array(int *dest, int *src, int size) {
for (int i = 0; i < size; i++) {
dest[i] = src[i];
}
}
ãã®ããã«ãåãçšéããšã«æ±çšçãªã³ããŒé¢æ°ãäœæããŠããããšã§ãéçºå¹çãšå¯èªæ§ãåäžããŸãã
7. ãŸãšã
æ¬èšäºã§ã¯ãCèšèªã«ããããé åã®ã³ããŒãã«ã€ããŠãåºæ¬ããå¿çšãŸã§äœç³»çã«è§£èª¬ããŠããŸãããæåŸã«ãéèŠãªãã€ã³ããæ¯ãè¿ãã€ã€ãå®åã§ã®æŽ»çšã«åãããŸãšããè¡ããŸãã
é åã³ããŒã®åºæ¬ã¯ãå®å šæ§ãšç®çã®æç¢ºåã
Cèšèªã§ã¯ãé
åå士ããã®ãŸãŸ=
ã§ä»£å
¥ããããšã¯ã§ããŸããããã®ãããã³ããŒãè¡ãã«ã¯æç€ºçãªåŠçãå¿
èŠã§ãã
for
ã«ãŒãïŒæãåºæ¬çã§ãããããããé åãµã€ãºãæç€ºããå¿ èŠãããmemcpy
ïŒãã€ããªåäœã§é«éã³ããŒå¯èœããµã€ãºãã¹ã«æ³šæãmemmove
ïŒã³ããŒå ãšã³ããŒå ãéãªããšãã«äœ¿çšãstrcpy
/strncpy
ïŒæååïŒcharé åïŒçšã®é¢æ°ãå®å šæ§ãèæ ®ããŠäœ¿ãåãã
å®å šãªã³ããŒã«ã¯ããµã€ãºç®¡çããæ¬ ãããªã
- é åãµã€ãºã®ãªãŒããŒã©ã³ïŒè¶ éã³ããŒïŒã¯ãã¯ã©ãã·ã¥ãè匱æ§ã®åå ã«ãªããŸãã
sizeof()
ãæŽ»çšããŠæ£ç¢ºãªãã€ãæ°ãææ¡ããããšãéèŠã§ãã- 颿°ã§é åãæ±ãå Žåã¯ããã€ã³ã¿ã«éåããããšãçè§£ãããµã€ãºãåŒæ°ãšããŠæž¡ãããã«ããŸãããã
ããããèœãšã穎ãçè§£ããŠããã
strncpy
ã¯å®å šã ããçµç«¯æåãä»ããªãããšãããã®ã§ãæåã§è¿œå ããçãã€ããŸãããã- æ§é äœã®ãã€ã³ã¿ãå«ãé
åã¯ã
memcpy
ã§ã¯æ£ããã³ããŒã§ããªãããšããããŸãã - ãã«ããã€ãæååïŒæ¥æ¬èªãªã©ïŒãæ±ãå Žåãæåæ°ãšãã€ãæ°ã®éãã«ã泚æãå¿ èŠã§ãã
å®åã§æŽ»ããããã«
- ãããžã§ã¯ãå ã§é »ç¹ã«é åã³ããŒãçºçããå Žåã¯ãå°çšã®ãŠãŒãã£ãªãã£é¢æ°ãäœã£ãŠãããšäŸ¿å©ã§ãã
- ã³ããŒåŠçã¯ãã¹ãããããåäœãªã®ã§ããŠããããã¹ããªã©ã§å®å šæ§ã確èªããããšãããããã§ãã
æåŸã«
Cèšèªã¯äœã¬ãã«ãªèšèªã§ãããããã«ãé åã®ã³ããŒã²ãšã€ãšã£ãŠãå¥¥ãæ·±ãã§ããããããä»å玹ä»ããåºæ¬çãªç¥èãšãã¯ããã¯ãæŒãããŠããã°ãããŸããŸãªå Žé¢ã§å¿çšãå©ãããã«ãªããŸãã
ãã²ããã®èšäºãåèã«ãæ£ãããå®å šãªã³ããŒåŠçãããã¹ã¿ãŒããããä¿¡é Œæ§ã®é«ãCèšèªããã°ã©ã ãäœæããŠãã ããã