我在我的程序和echo
命令之間發現了一個意外的(對我來說)行爲。Byte' x09'終止字符串?
這裏是我的源代碼:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]){
printf("argv length: %d\n", strlen(argv[1]));
return 0;
}
如果我在參數中使用的字節0x09
,它將終止字符串,因爲如果我使用的字節0x00
。
例子:
[email protected]:~$ ./a.out `echo -e '\x41'`
argv length: 1
[email protected]:~$ ./a.out `echo -e '\x41\x41'`
argv length: 2
[email protected]:~$ ./a.out `echo -e '\x41\x09'`
argv length: 1
[email protected]:~$ ./a.out `echo -e '\x41\x09\x41'`
argv length: 1
有人能解釋爲什麼會發生這種情況?
增強你的程序和printf所有的參數,而不是隻有第一個,你就會明白。 –
'argv'被空白分隔;我猜''x09'是空格...... – Evert
0x09(TAB)被shell視爲一個空白字符。它與C語言無關。 –