揮発性のメモ2

http://d.hatena.ne.jp/iww/

strncpy は文字列コピーじゃあない

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で補っている