码:

char *test = (char *) malloc(sizeof(char)*25);
fgets(test, 24, stdin);
printf("%p \n", strchrnul(test, (int)('a')));
printf("%p \n", strchrnul(test, (int)('f')));
printf("%p \n", strchrnul(test, (int)('\\')));
printf("%p \n", strchrnul(test, (int)('a')));
printf("%p \n", test);

如下所示, strchrnul() 返回的地址被截断 . 为什么会这样?

INPUT:  asd asd
OUTPUT: 0x6e880280 
        0x6e880288 //NULL Byte
        0x6e880288 //NULL Byte
        0x6e880280 
        0x55746e880280