void chop(char *p)を説明して頂いたのですが、今朝そのあとを見たらint len = strlen(p); のpはポインタですよね、それの長さを求めているのはなぜか。
chop(&str[2]);の2は何なのか
printf(" %02X", *p & 0xff);*p & 0xffの計算は何のためにしているのか。
すみません。全体的にわからないということです。あとmain(),dump()も。
説明していただければわかると思うのですが、よろしくおねがいいたします。
コード #include <stdio.h> #include <string.h> void chop(char *p) { //for (; *p; p++)で文字列の終端('\0')が見つかるまでポインタを進めます。 //ループを抜けるとポインタは'\0'を指しているはずです。 //なので、ポインタを1文字戻します (p--;)。 //その後、while (*p == '\r' || *p == '\n')で改行が見つかったら //クリア('\0'で埋める)する*(p--) = 0; //改行がある限り文字列の終端を先頭方向に後退させている。 for (; *p; p++) ; p--; while (*p == '\r' || *p == '\n') *(p--) = 0; } void chop2(char *p) { int len = strlen(p); //\0は含まない for (int i = 0; i < len; i++) { if (p[i] == '\r' || p[i] == '\n') { p[i] = 0; } } } void dump(char * p, int len) { for (int i = 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; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/11 03:31