2013-06-03 32 views
0

我使用下面的函數在C,以產生一個動態二維數組:轉換指針整數(INT **)爲字符串在C

int** Make2DintArray(int arraySizeX, int arraySizeY) { // From http://pleasemakeanote.blogspot.com/2008/06/2d-arrays-in-c-using-malloc.html 
    int** theArray; 
    theArray = (int**) malloc(arraySizeX*sizeof(int*)); 
    for (int i = 0; i < arraySizeX; i++) 
     theArray[i] = (int*) malloc(arraySizeY*sizeof(int)); 
    return theArray; 
} 

我想以連接矩陣(2d的所有值 - 陣列),形成由#

分離的串我用

int hi11cipherSize = 20; 
std::ostringstream text2Encrypt;///ERROR SOURCE 
// i used the above function to creat a 2D array and fill it 
// then i used the code below to loop through the record and create the string with delimiter # 

for(int i =0; i<hi11cipherSize;i++){ 
    for(int j =0; j<hi11cipherSize;j++){ 
     printf("%d \t",HillCipherMatrix[i][j]); 
     temp = HillCipherMatrix[i][j]; 
     text2Encrypt<<(char)temp<<"#"; //// First error cannot concatenate int with char ??? 

    } printf("\n"); 
} 

QString tempHLBP = QString::fromStdString(text2Encrypt.str()) ; 

qDebug()<<"Text to encrypt "<<tempHLBP<<"\n"; 
qDebug()<<"Length of string "<<tempHLBP.length(); 

我得到以下ERRORS ERROR:

22:37:59: Running build steps for project StringManJVN... 
22:37:59: Configuration unchanged, skipping qmake step. 
22:37:59: Starting: "C:\QtSDK\QtCreator\bin\jom.exe" 
main.cpp 
main.cpp(17) : error C2079: 'text2Encrypt' uses undefined class 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' 
     with 
     [ 
      _Elem=char, 
      _Traits=std::char_traits<char>, 
      _Alloc=std::allocator<char> 
     ] 
main.cpp(27) : error C2297: '<<' : illegal, right operand has type 'const char [2]' 
main.cpp(27) : warning C4552: '<<' : operator has no effect; expected operator with side-effect 
main.cpp(32) : error C2228: left of '.str' must have class/struct/union 
     type is 'int' 
jom: C:\QTProject\StringManJVN\Makefile.Debug [debug\main.obj] Error 2 
    cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_SQL_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\QtCore" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\QtSql" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\ActiveQt" -I"debug" -I"..\..\QtSDK\Desktop\Qt\4.8.1\msvc2010\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\SONUT\AppData\Local\Temp\main.obj.3948.0.jom 
    C:\QtSDK\QtCreator\bin\jom.exe -f Makefile.Debug 

jom 1.0.8 - empower your cores 

jom: C:\QTProject\StringManJVN\Makefile [debug] Error 2 
22:38:02: The process "C:\QtSDK\QtCreator\bin\jom.exe" exited with code 2. 
Error while building project StringManJVN (target: Desktop) 
When executing build step 'Make' 

在此先感謝;-))

+1

是否包含流頭? –

+0

@弗洛伊斯我懷疑這是一個正確的分析,因爲text2encrypt是一個ostream,它應該允許定義流操作符的任何類型的用法。我可能錯了,雖然 –

+0

它不知道什麼text2Encrypt是基於。正如@ AK4749提到的,你可能會丟失一個包括 – Mike

回答

1

嘗試把這個頂部:

#include <sstream> 

讀你上面的問題你說你正試圖把它變成字符串。如果你的意思是一個std :: string,這樣做很簡單。一定要包括正確的字符串庫

#include <string> 

,然後你可以這樣做:

int x = 4; 
string s = ""; 
s += x + 48; //this will convert the number 4 into the char value for 4. 
      //it works for all ascii numbers 
s += "#"; //puts the # sign in there 

這或多或少會得到你想要的東西。我不確定這是否是最好的方式,但它確實很容易。顯然,爲了清楚起見,上面的步驟是細化的。你當然可以凝結一點。

+0

有誰知道的方式來連接整數用分隔符「#」 另一個功能比的std :: ostringstream << –

+0

見上面我的補充。 – Mike

+0

感謝這個簡單的包含的#include 問題解決了 –