質問: 0; i < len; i++) { printf(" %02X", *p & 0xff); p++; } printf("\n"); } int main(int atgc, char** argv) { char str[10]; strcpy(str, "0\n"); printf("[%s]\n", str); chop(&str[2]); printf("[%s]\n", str); dump(str, sizeof(str)); printf("\n"); strcpy(str, "0\n"); printf("[%s]\n", str); chop2(&str[2]); printf("[%s]\n", str); dump(str, sizeof(str)); return 0; } ```
回答: strlen は引数として与えられたポインタから先にある、「null が出てくるまで」の距離、つまりはnull までの長さを返します。ポインタそのものではなく、ポインタが指し示す先のメモリ領域の長さです。 &str[2] は、まず str[2] で、str が示すポインタから2単位移動した場所の内容です。文字列でいけば(先頭を0として)2個先の文字を意味します。そして & がつくことで、ポインタを指します。結果的にこれは、「str で示される文字列の、(先頭を0としたときの)2文字目を表すポインタ」となります。 C 言語においてはポインタ操作は鬼門にして奥義ですので、しっかりと勉強なさってください。CPU がどうやって動いているのか、というのを合わせて調べていくと、理解しやすいかも知れません。