首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

CString 變量輸入異常:兩個變量值同步變化的原因與解決

     編輯:程式設計綜合問答

問題現象

控制台程序中使用 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 處理標準輸入/輸出。

正確做法

  1. 改用字符數組或 std::string 接收輸入,再賦值給 CString(若必須用 MFC 類)。
  2. 示例:
char buf[256];
printf("請輸入要查詢的字段\n");
scanf("%255s", buf);
CString ziduan = buf;

printf("請輸入要查詢的值\n");
scanf("%255s", buf);
CString value = buf;
  1. 或直接使用 std::cin >> ziduan(需包含 <string> 並用 std::string),最後轉換。

參考資源

常用字符串處理函數大全:https://www.jb51.net/article/37410.htm

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved