"We are back" « oc.at

zeiger in C

Nurmi 16.04.2002 - 22:45 765 12
Posts

Nurmi

OC Addicted
Avatar
Registered: Jun 2000
Location: Linz (Hauptplatz..
Posts: 810
wie setze ich einen Zeiger eines stringarrays wieder auf den anfang?

ich habs mit


char *sAnfang = search;
sAnfang++;
*sAnfang = search;

gemacht - funkt aber nicht...wie geht das sonst?

bitte eine schnelle Antwort wenn möglich - danke

MfG NuRmi

falls wen das ganze programm interessiert...
hier bitte den ersten macht er den zweiten replace aber nicht da er beim zweiten durchlauf nicht mehr am anfang vom array steht...
#include <stdio.h>

void SearchAndReplace(const char *source, const char *search,
const char *replace, int destLen, char *dest,
int *errCode){

const char *sAnfang = search;
const char *rAnfang = replace;
int treffer = 1;

while(*source){

if (*source == *search){
printf("treffer");
while(*sAnfang && treffer){
if (*source != *sAnfang)
treffer = 0;
*sAnfang++;
*source++;
}
if (treffer){
while(*rAnfang){
*dest = *rAnfang;
*rAnfang++;
*dest++;
}

}

treffer = 1;
}


*dest = *source;
*dest++;
*source++;
}
}



int main(void) {
char str1[30];
SearchAndReplace("Thomas Neumayer","T","XYZ",30,str1,0);
printf("%s",str1);
return 0;
}

Bimminger

christoph-bimminger.at
Avatar
Registered: Nov 2001
Location: Linz
Posts: 684
char *sAnfang = search;
char *sDummy;
sDummy=sAnfang; //zwischenspeichern
sAnfang++;

......
sAnfang=sDummy; //zurücksichern
......

//sorry wenns net stimmt ... is scho spät, i denk um de zeit nimma. aba evtl stimmts ja ;-)

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
wie du ursprünglich geschrieben hast, nur ohne stern. du willst ja nur den pointer setzen und nicht den inhalt verändern. also einfach
sAnfang = search;

M.I.P.S.

Big d00d
Avatar
Registered: Mar 2002
Location: On the inside
Posts: 324
Mit
*sAnfang = search
machst du die Adresse von search zum Inhalt der Variablen, auf die sAnfang zeigt

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Ähmmm...

Da is die definition von dem Zeiger wenn er da den * weglässt is es kein Pointer mehr.

Um einen Zeiger auf den Anfang zu setzten einfach nochmal neu zuweisen:

pOnSomething = pOnSomethingElse;
pOnSomething = &something;

So sollte des gehen!

Und wenn du const pointer verwendest kannst du sie nicht mehr zurücksetzten da diese nicht mehr veränderbar sind.

Einfach des const weggeben!

Mfg, Vir@s

[edit]
sorry ihr habts die dritte Zeile gemeint - aber die kommt im wirklichem Programm gar ned vor :)

Es sind sicha die const pointer!
[/edit]
Bearbeitet von Vir@s am 17.04.2002, 07:22

Nurmi

OC Addicted
Avatar
Registered: Jun 2000
Location: Linz (Hauptplatz..
Posts: 810
danke problem gelöst....

generell muß ich ja sagen daß mir java 10x lieber ist zum proggn - da gibts einfach nicht solche probs....

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von Vir@s
Ähmmm...

Da is die definition von dem Zeiger wenn er da den * weglässt is es kein Pointer mehr.

Was erzählst du da? ;)

char c; // c ist ein char
char *p; // *p ist ein char, p ist ein Pointer auf char

und daher kann man machen:

*p = c; // c wird dorthin kopiert, wohin p zeigt

oder

c = *p; // umgekehrt

oder

p = &c; // p zeigt auf c

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Außerdem heißt const char * nicht, dass der Pointer konstant ist, sondern nur dass das, worauf der Pointer zeigt, nicht geändert werden darf (const bezieht sich immer auf das, was unmittelbar danach steht, also in diesem Fall char - es ist ein Pointer auf einen konstanten character)

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
glaubt was ihr wollt :)

Darum gings doch gar nicht that - des is schon richtig was du mir erzählst aber des hab ich ned gmeint.

und const char *pointer bedeuted des du die location ned verändern derfst.
Bearbeitet von Vir@s am 17.04.2002, 17:09

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Code:
void a(const char *s)
{
    char huhu[] = "huhu";
    s = huhu;
//    das generiert einen fehler
//    *s = 'u';
}

int main()
{
    a("hello");
    return 0;
}

Compiliert ohne Probleme, sollte aber nach deiner Aussage nicht.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Wo zur hölle liest du?

Ich habe gesagt des das nicht funktionieren wird:

const char *pOnSomething = "lalalala";
char *pOnAlsoSomething = "hugo";

pOnSomethin = pOnAlsoSomething;

Des hab ich gesagt und nichts anderes.

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von Vir@s
Wo zur hölle liest du?

Ich habe gesagt des das nicht funktionieren wird:

const char *pOnSomething = "lalalala";
char *pOnAlsoSomething = "hugo";

pOnSomethin = pOnAlsoSomething;

Des hab ich gesagt und nichts anderes.

Natürlich wird das nicht funktionieren, weil ein "g" fehlt. Das ist aber auch der einzige Fehler.

Vir@s

Code Monkey
Registered: Nov 2000
Location: Wien
Posts: 730
Ups ich hab da ja einige Tippfehler....

Beispiel war so gemeint:

const char *pOnSomething = "lalalala";
char *pOnAlsoSomething = "hugo";

*pOnSomething = *pOnAlsoSomething;


Sodala jetzt stimmts....

Außerdem gehts nur um den const effekt - des ma den inhalt von dem Ding nimma verändern kann!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz