2017-05-05 2 views
-1

So ist das folgende ein Sandbox-Programm. Das Problem, das ich habe, ist ein Array in einer einzigen Zeichenfolge zu kombinieren. Ich möchte im Folgenden etwas ähnlich den Code tun:So konvertieren Sie Array-Inhalt in eine einzige Zeichenfolge C

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

Das Ziel ist es, einen Befehl popen() und erfassen die Ausgabe in ein einziges String zu laufen. der Grund dafür ist, so dass ich die Ausgabe in eine separate Funktion beispielsweise zurückgeben kann:

run_command() 
{ 
    return output; 
} 

main() 
{ 
    run_command() 
} 

nun die genaue Code, dass die „Sandbox“ Programm ist unten:

#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; 
} 

I Entschuldige, wenn das eine noob Frage ist, schätze ich die Hilfe, danke!

+2

TL ;DR. Aber 'sprintf' könnte helfen. –

+0

C hat keinen String-Typ. – Olaf

+0

'char outbuf [512 * 512], * sp = outbuf; size_t len ​​= 0; für (i = 0; i BLUEPIXY

Antwort

2

strcat, strcat_s oder strncat fügen Sie eine Zeichenfolge am Ende einer Zielzeichenfolge an (vgl. cppreference for strcat). Die einzige Sache ist, sicherzustellen, dass der Zielpuffer groß genug ist. strcat_s kann verwendet werden, um Pufferüberläufe zu vermeiden, ist jedoch nicht auf allen Systemen verfügbar. strncat kann verwendet werden, Pufferüberlauf zu vermeiden, auch noch muss man innerhalb der Puffer, um die Länge der Zeichenfolge verfolgen:

#define maxSize 512*512 

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

oder:

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

oder:

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

Danke Stephan, und Eugene beide Lösungen gearbeitet! Ich werde strcat_s verwenden. Danke nochmal für die Hilfe. – wetw0rk

+1

strcat_s() ist auf Linux-Systemen nicht verfügbar. strncat() ist portabler. Ich würde diese aufwerten, wenn auch eine Lösung mit strncat() zur Verfügung gestellt wird. –

+0

@ Ricardo Branco: rechts; fügte auch eine "strncat" -Lösung hinzu. –

Verwandte Themen