qweet schrieb:
int main(void) {
FILE *fp;
int i=0, j=0;
int c;
int string[PATH_MAX];
fp = popen("curl -H \"Authorization: \" -X GET \"url\"","r");
if (fp == NULL) {
printf("Konnte Datei nicht öffnen!\n");
}
while( (c=fgetc(fp)) != EOF) {
string[i] = c;
i++;
}
fclose (fp);
j = i;
for(i=0; i<=j; i++) {
putchar(string[i]);
// printf ("%i",string[i]);
}
return 0;
}
- int string[] ist Unsinn, sollte char string[] heißen
- PATH_MAX ist unpassend für diesen Zweck, diese Größe muss du selbst festlegen
- nach fp == NULL darf fp nicht mehr verwendet werden
- for(i=0...) läuft zu weit
- string wahrscheinlich nicht terminiert (musst du selbst machen), wenn du ihn anschließend als C-String verwenden willst
- dein ganzer Ansatz ist unflexibel, was machst du, wenn du mal mehr als einen String/eine Zeile bekommst?
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
int main()
{
enum{MAXSTRLEN=50000};
FILE *f = popen("uname -a","r");
if(!f)
return 1;
char *string = calloc(MAXSTRLEN+1,1);
size_t n=fread(string,1,MAXSTRLEN,f);
if(!ferror(f))
printf("%zu Zeichen gelesen: %s",n,string);
fclose(f);
free(string);
return 0;
}
https://ideone.com/x5Cg6m
Für mehrere Strings/Zeilen nimmst du dann eine Stringliste, d.h. für jede Zeile einen String in der Liste und verwendest praktischerweise dann getline() (POSIX, denn du bist mit popen sowieso schon in POSIX unterwegs), das kann das Speicherhandling für dich übernehmen.