控制台程序中使用 CString 接收用戶輸入:
CString ziduan = "";
CString value = "";
printf("請輸入要查詢的字段\n");
scanf("%s", ziduan);
printf("請輸入要查詢的值\n");
scanf("%s", value);
調試發現 ziduan 和 value 的值總是相同,輸入其中一個,另一個跟著變化,彷彿兩個變量「連在一起」。
CString 是 MFC/ATL 的字符串類,內部封裝了動態內存管理。直接將其作為 scanf("%s", ...) 的緩衝區是極不安全的:
scanf 期望的是字符數組指針(char*),而 CString 隱式轉換為 LPCTSTR(只讀指針),寫入會導致未定義行為。CString 物件若共享同一內部緩衝區(如引用計數/写时复制機制),寫入一個會影響另一個。CString 處理標準輸入/輸出。std::string 接收輸入,再賦值給 CString(若必須用 MFC 類)。char buf[256];
printf("請輸入要查詢的字段\n");
scanf("%255s", buf);
CString ziduan = buf;
printf("請輸入要查詢的值\n");
scanf("%255s", buf);
CString value = buf;
std::cin >> ziduan(需包含 <string> 並用 std::string),最後轉換。常用字符串處理函數大全:https://www.jb51.net/article/37410.htm