2017-05-05 103 views
-1

所以以下是一個沙盒程序。我遇到的問題是將一個數組合併成一個字符串。我願做類似下面的代碼的東西:如何將數組內容轉換爲單個字符串C

for (i = 0; i < size_of_array; i++) 
    { 
      string += A[i]; // print array 
    } 

的目標是要運行使用命令POPEN()並捕獲輸出成一個字符串。這樣做的原因是,這樣我可以輸出返回到一個單獨的函數,例如:

run_command() 
{ 
    return output; 
} 

main() 
{ 
    run_command() 
} 

現在確切的代碼的「沙箱」程序正在使用低於向下:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
     FILE *in; 
     extern FILE *popen(); 
     char buff[512]; 
     int i, size_of_array; 
     char A[512][512]; 

     in = popen("ls -lt", "r"); // run command 

     i = 0; 
     while(fgets(buff, sizeof(buff), in)!=NULL) // get output into buff 
     { 
       strcpy(A[i], buff); // copy buff into array 
       i ++; 
     } 

     pclose(in); 

     size_of_array = i; // get length or size of array 

     for (i = 0; i < size_of_array; i++) 
     { 
       printf("A[%d]= %s", i, A[i]); // print array 
     } 

     return 0; 
} 

我如果這是一個noob問題,表示歉意,我感謝幫助,謝謝!

+2

TL ; DR。但'sprintf'可能會有所幫助。 –

+0

C沒有字符串類型。 – Olaf

+0

'char outbuf [512 * 512],* sp = outbuf; size_t len = 0; for(i = 0; i BLUEPIXY

回答

2

strcatstrcat_sstrncat在目標字符串的末尾附加一個字符串(參見cppreference for strcat)。唯一的是確保目標緩衝區足夠大。 strcat_s可用於避免緩衝區溢出,但不適用於所有系統。 strncat可以用來避免緩衝器溢出,也還沒有一個需要跟蹤緩衝器中的字符串的長度:

#define maxSize 512*512 

char result[maxSize] = { 0x0 }; 
for (int i = 0; i < size_of_array; i++) { 
    strcat(result, A[i]); 
} 

或:

char result[maxSize] = { 0x0 }; 
for (int i = 0; i < size_of_array; i++) { 
    strcat_s(result, maxSize, A[i]); 
} 

或:

char result[maxSize] = { 0x0 }; 
for (int i = 0; i < size_of_array; i++) { 
    strncat(result, A[i], maxSize-strlen(result)-1); 
} 
+0

謝謝Stephan和Eugene這兩個解決方案都奏效!我正在使用strcat_s。再次感謝您的幫助。 – wetw0rk

+1

strcat_s()在Linux系統上不可用。 strncat()更便於攜帶。如果使用strncat()的解決方案也可用,我會贊成這一個。 –

+0

@Ricardo Branco:對;也增加了一個'strncat'解決方案。 –

相關問題