Man page of STRCPY
strncpyは文字列コピーと思ってはいけない。
名前にstrとかついてるだけのmemcpyの亜種、みたいに思わないとだめ。
void printbuf(int n){ int i; char buf[10]="@@@@@@@@@"; strncpy(buf,"hello",n); for(i=0;i<9;i++) printf("%02X ",buf[i]); printf(" %s\n",buf); } int main(void) { printbuf(4); printbuf(5); printbuf(6); printbuf(7); return 0; }
68 65 6C 6C 40 40 40 40 40 hell@@@@@ ~~~~~~~~~~~ ^^^^^^^^^^^^^^ 4文字コピー 終端されず 68 65 6C 6C 6F 40 40 40 40 hello@@@@ ~~~~~~~~~~~~~~ ^^^^^^^^^^^ 5文字コピー 終端されず 68 65 6C 6C 6F 00 40 40 40 hello ~~~~~~~~~~~~~~~~~ ^^^^^^^^ 6文字コピー 0もコピーしたので終端された 68 65 6C 6C 6F 00 00 40 40 hello ~~~~~~~~~~~~~~~~~~~~ ^^^^^ 7文字コピー 足りない分を0で補っている