https://blog.csdn.net/zengcccc/article/details/7063483
如題:加入一個文件的位置是在
C:\Documents and Settings\Administrator\桌面\1.txt 時.
如果通過編程來索引到這個1.txt文件,并相應的對該文件做出相應, 那么程序會把該路徑C:\Documents and Settings\Administrator\桌面\1.txt 解析成3個參數,
這樣就會導致程序不能正確的執行, 該如何處理呢, 這個問題我也思考很久, 在讀了一本叫做<<C Primer Plus>>的書籍后,最后終于找到了答案.
這句話是這么說的:
"順便提一下,很多環境(包括UNIX和DOS)允許使用引號把多個單詞集中在一個參數里.例如:
repeat "I am hungry" now
" 這個命令會把字符串"I am hungry"分配給argv[1],把字符串"now"分配給argv[2].
https://docs.microsoft.com/zh-cn/previous-versions/17w5ykft(v=vs.120)
分析 C++ 命令行參數
Microsoft 專用
在解釋操作系統命令行上給出的參數時,Microsoft C/C++ 啟動代碼使用下列規則:
參數用空白分隔,空白可以是一個空格或制表符。
^ 字符 (^) 未被識別為轉義符或者分隔符。 該字符在被傳遞給程序中的 argv 數組前,由操作系統的命令行分析器進行全部處理。
無論其中是否包含空白,帶雙引號的字符串 ("string") 均被解釋為單個參數。 帶引號的字符串可以嵌入在參數內。
前面有反斜杠的雙引號 (\") 被解釋為原義雙引號字符 (")。
反斜杠按其原義解釋,除非它們緊位于雙引號之前。
如果偶數個反斜杠后跟雙引號,則每對反斜杠中有一個反斜杠放置在 argv 數組中,而雙引號被解釋為字符串分隔符。
如果奇數個反斜杠后跟雙引號,則每對反斜杠中有一個反斜杠放置在 argv 數組中,而雙引號由剩余那個反斜杠進行“轉義”,從而將原義雙引號 (") 放置在 argv 中。
示例
以下程序演示如何傳遞命令行參數:
// command_line_arguments.cpp // compile with: /EHsc #include <iostream> using namespace std; int main( int argc, // Number of strings in array argv char *argv[], // Array of command-line argument strings char *envp[] ) // Array of environment variable strings { int count; // Display each command-line argument. cout << "\nCommand-line arguments:\n"; for( count = 0; count < argc; count++ ) cout << " argv[" << count << "] " << argv[count] << "\n"; }
下表顯示示例輸入和預期的輸出,并在前面的列表中演示規則。
分析命令行的結果
命令行輸入 | argv[1] | argv[2] | argv[3] |
---|
"abc" d e
| abc
| d
| e
|
a\\b d"e f"g h
| a\\b
| de fg
| h
|
a\\\"b c d
| a\"b
| c
| d
|
a\\\\"b c" d e
| a\\b c
| d
| e
|
請參見
參考
main:程序啟動