substring-Funktion?
-
Sehe ich das richtig, dass es keine substring-Funktion gibt um z.B. den String von Position 3 bis 5 aus einem
const char*
zu erhalten?
Ich stelle mir das wie bei c++ vor:
str.substr(3,5)
-
strstr
-
so ungefähr könnte das aussehen
#include <string.h> #include <stdbool.h> bool substring(char * restrict to, size_t to_len, char const *restrict from, size_t beg, size_t end) { size_t const from_len = strlen(from); size_t const copy_len = end - beg; if(beg > end || copy_len > to_len || !to || beg > from_len || end > from_len) { return false; } memcpy(to, from + beg, copy_len); to[copy_len] = '\0'; return true; }
@recl
strstr sucht einen substring.
-
sorry das kommt davon wenn man nur die ü-schrift liest
dann könnte man strncpy mit angepasster source nehmen.
oder sich was bauen wie du(hab ich nicht überprüft),
oder sich was bauen ohne c-library.
-
Das geht auch mit einem Einzeiler und strikt ANSI C konform:
const char *substr(char *d,const char *s,int b,int e) { sprintf(d,"%.*s",e-b+1,s+b); return d; } int main() { char r[11]; puts(substr(r,"0123456789",3,5)); return 0; }
-
Wutz schrieb:
Das geht auch mit einem Einzeiler und strikt ANSI C konform:
const char *substr(char *d,const char *s,int b,int e) { sprintf(d,"%.*s",e-b+1,s+b); return d; }
Da wuerde ich aber lieber strncpy/memcpy nehmen...
-
%.*s
was macht der punkt und das sternchen da?
-
Auch bei %s kann man die Feldlänge angeben. vor dem . steht die Minimallänge, nach dem . die Maximallänge.
Beim * kannst du die Feldlänge als Paramter in der Argumenteliste mit angeben.Besser du liest dir die Bedeutung der Formatspecifier mal richtig durch: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
-
recl schrieb:
%.*s
was macht der punkt und das sternchen da?
http://www.programmersheaven.com/mb/CandCPP/338240/338240/what-does-s-do-in-a-sprintf-statement/
-
Shade Of Mine schrieb:
Da wuerde ich aber lieber strncpy/memcpy nehmen...
ich würde lieber selbst etwas schreiben, was ohne die standardlib auskommt und weniger fehleranfällig ist als strncpy, memcpy, etc.