Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichenkettenverarbeitung in C
Harleckin
2004-02-11, 12:30:28
helft mir mal schnell in "C" auf die Sprünge.. ich will einen simplen string (argv[1]) _zeichenweise_ in ein array[] packen um ihn später weiterzuverarbeiten.
Bisherige versuche mit fgets(), gets() und fgetc() scheiterten komplett.
Der Funktionsname zur Lösung des Problemes würde mir schon einiges weiterhelfen.
Metzler
2004-02-11, 13:49:22
Du willst also einen char *t in ein anderes Char-Array kopieren, versteh ich dich da richtig?
Wie wärs mit strcpy?
Harleckin
2004-02-11, 14:24:02
Nicht wirklich.. gegeben ist foo vom Typ char und dem Inhalt "bar".
Ok diese Zeichenkette soll in ein Array, d.h. jedes Zeichen in ein eigenes Feld.
---------
|0|1|2|4|
---------
|b|a|r|\0|
---------
Metzler
2004-02-11, 14:29:05
Wie wärs mit einer einfachen Schleife?
Und den Index kannst du ja an das andere Array anpassen, wo halt der Inhalt von foo hin soll...
char *foo = (char *)malloc(4);
strcpy(foo, "bar");
for (int i = 0; i <= strlen(foo); i++)
{
cout << foo[i];
}
Crushinator
2004-02-11, 14:52:37
ein char mit dem Inhalt "bar" ist doch bereits ein char array weil es aus 4 chars besteht.
for (int ui = 0; ui<=strlen(argv[1]); ui++)
{
printf("%c\n", argv[1][ui]);
}
Deshalb kann man den Inhalt auch gleich (siehe Metzlers Beispiel) mit strcpy in einen neuen char array - im Volksmund auch String genannt - kopieren. ;)
Harleckin
2004-02-11, 15:44:33
Ok, ihr habt mir schon sehr viel weiter geholfen.. wenn ich es schaff, poste ich morgen die restlichen Codezeilen von dem Mini-C-Prog.
Exxtreme
2004-02-11, 16:22:22
Also um C-Strings zu kopieren verwendet man normalerweise strcpy ... oder besser noch strncpy. Mit strncpy kann man eventuelle Bufferoverflows vermeiden. Man muss halt zusätzlich als Parameter die Ziel-Stringlänge übergeben.
Lokadamus
2004-02-11, 18:48:02
mmm...
Und die Zeichenkettenlänge bekommt man mit strlen raus, wenn ich mich nicht irre ...
Harleckin
2004-02-12, 13:46:49
/* hantorihanzo.c */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc == 2) {
//char *filename;
//filename = (char *)calloc(strlen(strrchr(argv[1], '/')-1) + strlen(strrchr(argv[1], '/')), sizeof(char));
char *str1 = strrchr(argv[1], '/');
char *str2 = &str1[1];
//strcat(filename, str2);
if (fork() == 0) {
execl("/usr/bin/curl","curl","-x","http://PROXY:PORT",argv[1],"-o",str2,0);
perror("curl");
}
} else {
printf("usage:\t%s URL\n",argv[0]);
}
//free(filename);
return(0);
}
Also mal kurz zum Sinn des Programmes..
Bsp:
'./hantorihanzo http://foobar.com/foo/bar.file'
execl() ruft 'curl'[1] auf und übergibt den Proxy, die URL (argv[1]) und den Dateinamen (str2).
Der Dateiname wird aus der URL genommen, was ich mittels strrchr() mache. Daraufhin bekommen ich "/bar.file" zurückgeliefert.
Nun muss aber noch der führende Slash entfernt werden, was ich durch das Umbiegen des Zeigers *str2 auf die Adresse des zweiten Feldes (argv[1][1]) mache.
Ich hoffe mal es konnte jeder meinen Ausführungen folgen.. die Methode mit strcat() hab ich mal komplett auskommentiert, da dies überflüssig ist.
[1] http://curl.haxx.se/
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.