討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
請問如何將變數寫入字串.
更改我的閱讀文章字型大小
作者 : yian0118(KANA HSIEH)
[ 貼文 8 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/8/6 下午 03:53:00
long double x = 10;
long double y = 44;
long double z = 24;

//將x y z串成一個字串,名為 sevenvalue
std::string sevenvalue = std::to_string(x) + std::to_string(y) + std::to_string(z);

//印出字串sevenvalue之值
printf(("傳送給手臂的3個數值: %s\n"), sevenvalue.c_str());

//將字串sevenvalue存入szMessage
TCHAR szMessage[] = _T("%c") , _Tsevenvalue ;

問題:
     我欲將字串sevenvalue存入szMessage,但結果不如預期,僅顯示%c.
     請問我可以用甚麼方式將 sevenvalue 存入 szMessage
     我是新手,感激不盡!
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/8/6 下午 11:08:54
請不要在不同討論區重複貼文.
你並不是真正的用 VC++.NET, 你用的是 C++11 標準語言. 《C++》討論區比較適合.


> //將字串sevenvalue存入szMessage
> TCHAR szMessage[] = _T("%c") , _Tsevenvalue ;
>
>問題:
> 我欲將字串sevenvalue存入szMessage,但結果不如預期,僅顯示%c.

當然, 因為上面的句子的意思是定義兩個物件, 第一個物件是 szMessage, 它是一個 TCHAR 陣列, 並把它初始化成 "%c" 這個字串, 陣列大小是 3, 元素內容是: '%', 'c', '\0'. 第二個物件是 _Tsevenvalue, 它是一個 TCHAR 類型.


> 請問我可以用甚麼方式將 sevenvalue 存入 szMessage

一般是不需要的. 如果你要的是 const char*, std::string 的成員 c_str() 就可以做到. 請詳細說明你打算把 szMessage 怎麼用?

這裡要特別注意的是: std::string 存放的是「窄」字元, 但大多數用字元/字串的視窗 API 有「寬」與「窄」兩個版本. 一般在 MSDN 看到的名字是個 #define 的名字, 編譯器依據 Unicode 的設定來決定用寬或窄的版本. std::string 要配合窄字元的 API, 或把編譯器設成 非-Unicode.
作者 : yian0118(KANA HSIEH)
[ 貼文 8 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/8/7 上午 11:58:12
謝謝!問題已解決
之前對寬位元窄位元有誤解
我要做shared memory
將C++的7個float資訊傳送到C#再給予機械手臂使用
但我使用的shared memory方式為呼叫CopyMemory函式
void CopyMemory(
  _In_ PVOID Destination,
  _In_ const VOID *Source,
  _In_ SIZE_T Length);
其中第二個變數*source在我的程式設計中須為THCAR
因為我的7個資訊為float
我將這些浮點數做了下列的轉換後
才能傳送給szMessage
可供大家參考 目前編譯成功
    
     //將string 轉換為 wstring.
     std::wstring sevenvalue_w(sevenvalue.length(), L' '); // Make room for characters
     std::copy(sevenvalue.begin(), sevenvalue.end(), sevenvalue_w.begin());

//將sevenvalue_w (wstring) 轉換為 (wchar_t*)
const wchar_t* sevenvalue_wchar_t = sevenvalue_w.c_str();
TCHAR szMessage[100];

_tcscpy(szMessage,sevenvalue_wchar_t);
// Write the message to the file view.
//計算
int cbMessageBytes = (_tcslen(szMessage) + 1 ) * sizeof(TCHAR);
CopyMemory((PVOID)pBuf, szMessage, cbMessageBytes);

_tprintf(_T("The following message is written to the shared memory:\n") _T("\"%s\"\n"), szMessage);

// Wait to stop the server.
_tprintf(_T("Press any key to stop the server.\n"));
_getch();
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/8/7 下午 04:29:38
>可供大家參考 目前編譯成功

編譯成功是因為你編譯器的設定是 Unicode. 如果不是, TCHAR 會變成 char, _tcscpy() 會變成 strcpy(), 一個參數是 char*, 一個參數是 wchar_t*, 程式就不會成功編譯.

>CopyMemory((PVOID)pBuf, szMessage, cbMessageBytes);

應該不需要轉到 szMessage, 應該可以:
  CopyMemory(pBuf, sevenvalue_w.c_str(), sevenvalue_w.length() * sizeof(std::wstring::value_type));

作者 : yian0118(KANA HSIEH)
[ 貼文 8 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/8/10 上午 10:54:49
謝謝,照您的方法測試後成功!
 板主 : 徵求中
 > Visual C++ .NET - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual C++ .NET - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual C++ .NET
1 青衫 2220 
2 Raymond 1500 
3 joe 520 
4 冷眼 350 
5 CodeWarrior 260 
6 marlon 230 
7 小朱 210 
8 windblown 200 
9 XWLin 120 
10 小約翰 120 
Visual C++ .NET
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875