C 字节'\x09&x27;终止字符串?
我发现我的程序和C 字节'\x09&x27;终止字符串?,c,string,echo,command-line-arguments,C,String,Echo,Command Line Arguments,我发现我的程序和echo命令之间有一个(对我来说)意外的行为 以下是我的源代码: #include <stdio.h> #include <string.h> int main(int argc, char* argv[]){ printf("argv length: %d\n", strlen(argv[1])); return 0; } 有人能解释一下为什么会发生这种情况吗?\x09是一个选项卡,所以它就像给程序提供了: ./a.out A
echo
命令之间有一个(对我来说)意外的行为
以下是我的源代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]){
printf("argv length: %d\n", strlen(argv[1]));
return 0;
}
有人能解释一下为什么会发生这种情况吗?
\x09
是一个选项卡,所以它就像给程序提供了:
./a.out A A
第一个参数的长度是1。
\x09
是一个选项卡,因此它就像在程序中输入:
./a.out A A
第一个参数的长度是1。
\x09
是制表字符。它不会终止字符串,但在这里,您运行的参数没有保护它们
在'\x41\x09'
案例中,tab字符被shell剥离
在'\x41\x09\0x41'
案例中,tab字符充当参数分隔符,从而创建另一个参数
引用被echo
使用,但是echo
在回显时丢失,因此需要添加另一个引用
试试看:
./a.out `echo -e "'\x41\x09\x41'"`
您将看到一个3字节的唯一参数
\x09
是制表字符。它不会终止字符串,但在这里,您运行的参数没有保护它们
在'\x41\x09'
案例中,tab字符被shell剥离
在'\x41\x09\0x41'
案例中,tab字符充当参数分隔符,从而创建另一个参数
引用被echo
使用,但是echo
在回显时丢失,因此需要添加另一个引用
试试看:
./a.out `echo -e "'\x41\x09\x41'"`
您将看到一个3字节的唯一参数增强您的程序并打印所有参数,而不仅仅是第一个参数,您将理解。
argv
由空格分割;我猜\x09
是空白…外壳程序将0x09(制表符)视为空白字符。它与C语言无关。/a.out'\x41\x09\x41'
给出了什么?使用inta;对于(a=1;a增强您的程序并打印所有参数,而不仅仅是第一个参数,您会理解。argv
被空格分割;我猜\x09
是空格…0x09(制表符)shell将其视为一个空白字符。它与C语言无关。而/a.out'\x41\x09\x41'
给出了什么?使用int a;for(a=1;a必须添加一些内容:上一个命令无法按预期工作,因为”
被视为参数的“部分”(如制表符)。那一个成功了:/a.out“`echo-e'\x41\x09\x41'`
。也许你应该编辑你的答案。谢谢!@J.Doe奇怪,因为echo-e''\x41\x09\x41'
回显了一个引用的'a'
。我今晚会检查一下(为了答案的完整性)。只是想补充一点:您的上一个命令没有按预期工作,因为“
被视为参数的“一部分”(如制表符)。该命令工作:/a.out“`echo-e'\x41\x09\x41'``
。也许您应该编辑您的答案。谢谢!@J.Doe奇怪的是echo-e'\x41\x09\x41''
回显一个引用的'a'
。我今晚会检查一下(以确保答案的完整性)。