Archiv für Funktions-Definitionen
-
jizzerr schrieb:
gibt es eine Art online-Archiv, keine reine Referenz, in der mögliche Definitionen der meisten Standardfunktionen vorhanden sind. Also die jeweilige Funktion ausgeschrieben einsehbar ist?
Das müsste sich irgendwo im Quellcode der C-Runtime finden. Da es quelloffene Runtimes gibt, sollte sich das finden lassen. Bei systemnahen Funktionen kannst du dich schon einmal auf Assembler freuen.
edit: Google sagt hier:
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/Das ist natürlich kein kleines Projektlein, da musst du dich schon ein bisschen reinknien, um das zu durchschauen.
-
@ SeppJ:
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/string/Lint_strcpy.cWenn ich da auf download klicke kommt nicht wie gewünscht der Quellcode, hm..
@Supertux:
http://www.cplusplus.com/reference/clibrary/cstring/strcpy/Wo finde ich hier den quellcode?
-
jizzer schrieb:
@ SeppJ:
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/string/Lint_strcpy.cWenn ich da auf download klicke kommt nicht wie gewünscht der Quellcode, hm..
Bei mir schon:
/* $NetBSD: Lint_strcpy.c,v 1.1.10.1 2000/06/23 16:59:16 minoura Exp $ */ /* * This file placed in the public domain. * Chris Demetriou, November 5, 1997. */ #include <string.h> /*ARGSUSED*/ char * strcpy(dst, src) char *dst; const char *src; { return (0); }
Muss ein Problem auf deiner Seite sein. Alternativ kannst du ja auch CVS benutzen um das Archiv anzugucken.
edit: Und wenn du dich jetzt wunderst über diesen komischen Code für stcmp, lies nochmal die Anmerkungen weiter unten:
lint stubs for functions which ports use assembly versions. When using
an assembly version of a function, add the right lint stub to the Makefile.inc
which specifies the source to build the function (see the
arch/i386/*/Makefile.inc). Can't just lint the normal C versions of these
functions, because some of them don't _have_ normal C versions and if
that were done dependencies would get messed up.edit2: Hier ist die (vermutlich richtige, ich bin nicht so gut in Assembler) Funktion für i386:
/* * Written by J.T. Conklin <jtc@NetBSD.org>. * Public domain. */ #include <machine/asm.h> #if defined(LIBC_SCCS) RCSID("$NetBSD: bcmp.S,v 1.8.22.1 2008/01/09 01:33:56 matt Exp $") #endif ENTRY(bcmp) pushl %edi pushl %esi movl 12(%esp),%edi movl 16(%esp),%esi xorl %eax,%eax /* clear return value */ movl 20(%esp),%ecx /* compare by words */ shrl $2,%ecx repe cmpsl jne L1 movl 20(%esp),%ecx /* compare remainder by bytes */ andl $3,%ecx repe cmpsb je L2 L1: incl %eax L2: popl %esi popl %edi ret
-
Äh, ich glaube da liegt ein Missverständnis vor.
Das:
#include <string.h> /*ARGSUSED*/ char * strcpy(dst, src) char *dst; const char *src; { return (0); }
finde ich in jeder Referenz, so wie supertux erwähnte.
Ich suche aber den Quellcode, die Definition der Funktion
char* strcpy(char *dst, const char* src) { int i=0; for(;i<=strlen(src);i++)dst[i] = src[i]; return(dst); }
-
Ich habe oben noch ein paar Erläuterungen reineditiert, welche das aufklären dürften. wie gesagt: Stell dich auf reichlich Assembler ein. Viele funktionen sind handoptimiert, weil bei der Standardbibliothek Geschwindigkeit tatsächlich wichtig ist.
-
jizzer schrieb:
@Supertux:
http://www.cplusplus.com/reference/clibrary/cstring/strcpy/Wo finde ich hier den quellcode?
http://www.google.com/codesearch?q=strcpy&hl=en&btnG=Search+Code
-
Ich finds nicht in reinem C code..
-
Andersrum:
Könnt ihr mir sagen, warum folgender Code nicht funktioniert?
edit:#include <stdio.h> void strcpy_new(char* t, const char* s) void main(void) { char text[] = "Hallo Welt", string[] = "ollaH"; strcpy_new(text, string); puts(text); system("pause"); } /*strcpy_new*/ void strcpy_new(char* t, const char* s) { int i = 0; for (; s[i] != '\0'; i++) t[i] = s[i]; }
-
Danke, dass du uns auf eine wilde Websuche schickst, anstatt einfach gleich die richtige Frage zu stellen
.
Was ist das Problem? Es wird Hallo durch ollaH ersetzt. Soll zusätzlich noch abgeschnitten werden? Dann setz eine Nullterminierung!
-
SeppJ schrieb:
Danke, dass du uns auf eine wilde Websuche schickst, anstatt einfach gleich die richtige Frage zu stellen
.
Was ist das Problem? Es wird Hallo durch ollaH ersetzt. Soll zusätzlich noch abgeschnitten werden? Dann setz eine Nullterminierung!
Entschuldige bitte, aber meine anfängliche Frage ist damit nicht hinfällig.
Im Sinne einer spezifischen Lösung habe ich dann halt mein momentanes Problem gepostet; hinsichtlich noch kommender Fragen wäre eben jenes Archiv sehr sinnvoll, aus meiner Sicht.Da für die die Funktion banal erscheint, funktioniert sie so, wie sie eine Seite vorher steht bei dir? Ja?
Bei mir kommen nämlich Fehlermeldungen und ich weiss nich was ich ändern soll..Danke für dein Verständnis.
PS:
1>------ Build started: Project: Test, Configuration: Debug Win32 ------ 1>Compiling... 1>Testsource.c 1>d:\daten\z002nweb\inout\inout\testsource.c(7) : error C2085: 'main' : not in formal parameter list 1>d:\daten\z002nweb\inout\inout\testsource.c(7) : error C2143: syntax error : missing ';' before '{' 1>d:\daten\z002nweb\inout\inout\testsource.c(11) : warning C4013: 'system' undefined; assuming extern returning int 1>d:\daten\z002nweb\inout\inout\testsource.c(16) : error C2084: function 'void strcpy_new(char *,const char *)' already has a body 1> d:\daten\z002nweb\inout\inout\testsource.c(3) : see previous definition of 'strcpy_new' 1>Build log was saved at "file://d:\Daten\z002nweb\inout\inout\Debug\BuildLog.htm" 1>Test - 3 error(s), 1 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
-
Ach so, die vielen Syntax- und Sprachfehler habe ich weggemacht, da ich annahm, dass du die Funktion per Hand abgeschrieben hast und einen sehr toleranten Compiler benutzt.
Die Fehler sind:
Zeile 3, Semikolon fehlt
Zeile 6, Rückgabetyp von main ist int.
Zeile 11, benötigt stdlib.hEs wäre sehr nützlich, wenn du in Zukunft genaue Fragen stellst, denn "funktioniert nicht" hilft nicht weiter.
-
Außerdem wird der entstandene String nicht terminiert.
Vor Funktionsende noch eint[i] = 0;
sollte das nachholen.
-
Danke
SeppJ schrieb:
Es wäre sehr nützlich, wenn du in Zukunft genaue Fragen stellst, denn "funktioniert nicht" hilft nicht weiter.
Woher soll ich vorher wissen wo der Fehler liegt, wenn das genau meine Frage wäre?
-
Gast0815 schrieb:
Außerdem wird der entstandene String nicht terminiert.
Vor Funktionsende noch eint[i] = 0;
sollte das nachholen.
Hm, warum aufeinmal nicht mehr '\0'?
edit: Ok, habs grad getestet, geht beides
-
'\0' als Escape-Sequenz entspricht dem ASCII-Wert 0.
Genauso wie 'A' intern als Char-Wert 65 gespeichert wird.('\0' == 0)
-
jizzer schrieb:
Danke
SeppJ schrieb:
Es wäre sehr nützlich, wenn du in Zukunft genaue Fragen stellst, denn "funktioniert nicht" hilft nicht weiter.
Woher soll ich vorher wissen wo der Fehler liegt, wenn das genau meine Frage wäre?
Du sollst Fragen:
Folgender Code produziert bei mir Fehler xyz.Nicht:
Folgender Code funktioniert nicht.
-
jizzer schrieb:
Ich finds nicht in reinem C code..
Ich bitte dich, gleich der zweite Eintrag führt zu C-Code aus OpenBSD