Windows CMD下C语言argc是否含重定向?双引号传参异常
Windows CMD下C程序传递双引号参数的正确方法
在Windows 11的CMD环境中,传递双引号作为C程序的命令行参数时,不能套用C语言的\"转义规则——CMD的命令行解析逻辑和C字符串转义完全不同。
你执行a.exe \" bb < input.txt时argc变成5,是因为CMD无法识别\"为双引号,反斜杠会被当作普通字符,同时引号会触发错误的参数拆分。正确的写法是用两个连续的双引号来表示一个要传入的双引号:
a.exe "" bb < input.txt
执行这条命令后,C程序的argc会是3,第一个参数为单个双引号,第二个参数是bb,完全符合预期。
补充说明CMD的解析规则:CMD中双引号主要用于包裹包含空格的参数,若要在参数中嵌入双引号,必须连续写两个双引号,CMD会将其解析为一个实际的双引号字符;而单独的\"会被拆分成反斜杠和引号两个独立的部分,进而导致参数数量异常。
内容的提问来源于stack exchange,提问作者Doge
相关产品推荐
相关产品推荐

