我在我的程序和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语言无关。 –