2017-09-24 95 views
-1

C++調試斷言錯誤背景: 這裏顯示的問題/代碼是我試圖創建的一個更大的程序(我被告知要修剪它)的一部分。 (本節的目的)是爲了能夠接收std :: cin輸入和(當它工作時)將它饋送到函數中:srcdsControl-> WriteText(string(chr));這個功能是大型程序的一部分,我沒有創建自己的程序。std :: cin >> char

我正在嘗試將輸入和輸出從C++控制檯應用程序重定向到一個Python腳本(我已經編寫,哪些工作)。當我輸入控制檯窗口時,它會收到輸入罰款。然而,當我把輸入到程序的標準輸入從蟒蛇(格式「命令\ r \ n」),它會觸發以下錯誤:

C++ Debug Assertion Failed error

我試着用以下兩個程序他們給出了完全相同的錯誤。

我的C++代碼(測試1):

#include "stdafx.h" 
#include <iostream> 
#include <string> 

int main() 
{ 
    try 
    { 
     char chr[2]; 
     chr[1] = 0; 
     while (1) 
     { 
      if (std::cin >> std::noskipws >> chr[0]) 
      { 
       if (chr[0] == '\r') 
        std::cout << "\r"; 
       //srcdsControl->WriteText(string(chr)); 
       std::cout << std::string(chr) << "\r\n"; 
      } 
     } 
    } 
    catch (...) 
    { 
     // Ignore exception and just stop the thread. 
    } 
} 

我的C++代碼(測試2):

#include "stdafx.h" 
#include <iostream> 
#include <string> 

int main() 
{ 
    try 
    { 
     char chr[2]; 
     chr[1] = 0; 
     while (1) 
     { 
      std::string s = ""; 
      if (std::getline(std::cin, s)) 
      { 
       for (char& ch : s) { 
        chr[0] = ch; 
        if (chr[0] == '\r') 
         std::cout << "\r"; 
        //srcdsControl->WriteText(std::string(chr)); 
        std::cout << std::string(chr) << "\r\n"; 
       } 
      } 
     } 
    } 
    catch (...) 
    { 
     // Ignore exception and just stop the thread. 
    } 
} 

注意:我不是一個C++開發人員,我的C知識++是非常有限。我需要一個特定/簡單的答案。

我的問題:如何防止此錯誤並確保輸入正確接收?如果需要,我很樂意使用完全不同的方法來接收輸入,但需要特定的演示。

+0

考慮使用'std :: getline'來讀取數據,因爲您似乎正在尋找完整的行。 '\ r'只是窗口中行標記的一半。請參閱對話底部的小記,「按重試以調試應用程序」,並利用此機會。 – user4581301

+0

*如何防止此錯誤* - 在將C++代碼放入更大的程序之前,您可能已寫入一個非常小的「主」程序,只有這些線路才能看到它的行爲。不需要引入Python,線程或調用'WriteText'來執行此測試,以瞭解C++流如何工作。這將被認爲是[mcve]而不是代碼片段。 – PaulMcKenzie

+0

@PaulMcKenzie我現在編輯的帖子只是顯示一個小'main'程序。 – ZSmith

回答

0

我以某種方式設法解決了我自己的問題。

#include "stdafx.h" 
#include <iostream> 
#include <string> 

int main() 
{ 
    try 
    { 
     char chr[2]; 
     chr[1] = 0; 
     while (1) 
     { 
      char c; 
      if (std::cin >> std::noskipws >> c) 
      { 
       chr[0] = c; 
       if (chr[0] == '\r') 
        std::cout << "\r"; 
       //srcdsControl->WriteText(string(chr)); 
       std::cout << std::string(chr) << std::endl; 
      } 
     } 
    } 
    catch (...) 
    { 
     // Ignore exception and just stop the thread. 
    } 
} 

此代碼似乎做我想要的而不會給出錯誤。如果任何人都可以解釋爲什麼這會起作用,並且以前的代碼沒有那麼有趣。

相關問題