• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

pointer problem

}-Tux-{

Hacker
Hi

ich habe ein kleines problem. Gegeben sei folgendes Programm
Code:
#include <stdio.h>

int main(void) {
char *temp = "88";
int num;
num = atoi(temp);
num += 12;
sprintf(temp , "%d", num);
puts(temp);
}

wenn ich es nun aufrufe bekomme ich einen speicherzugriffsfehler.

änder ich es aber wie folgt um funktioniert es:

Code:
#include <stdio.h>

int main(void) {
char temp[3] = "88";
int num;
num = atoi(temp);
num += 12;
sprintf(temp , "%d", num);
puts(temp);
}

Ich denke der fehler entsteht beim sprintf() aufruf. Aber was ist da beim zweiten beispiel anders? temp ist da doch auch nur ein pointer auf das erste(bzw. 0-te) Element im Array

Kann mir einer von euch vlt auf die sprünge helfen?

mfg }-Tux-{
 

TeXpert

Guru
}-Tux-{ schrieb:
Kann mir einer von euch vlt auf die sprünge helfen?

klar ;)

1. char *tmp="foo"; legt einen Zeiger auf konstante Speicherbereiche an, die Größe wird zur Kompilezeit festgelegt, nicht veränderlich!

2. wie soll in ein 3-Zeichen lages char* die Zahl 100 als String geschrieben werden?

also -> leg passendn Speicher an
 
OP
T

}-Tux-{

Hacker
TeXpert schrieb:
1. char *tmp="foo"; legt einen Zeiger auf konstante Speicherbereiche an, die Größe wird zur Kompilezeit festgelegt, nicht veränderlich!

2. wie soll in ein 3-Zeichen lages char* die Zahl 100 als String geschrieben werden?

also -> leg passendn Speicher an
sorry wenn ich jetzt total aufm schlauch stehe aber wenn ich das prog wie folgt abändere müsste es doch gehen?!

Code:
#include <stdio.h>

int main(void) {
char *temp = "38";
int num;
num = atoi(temp);
num += 12;
sprintf(temp , "%d", num);
puts(temp);
}

da müsste doch jetzt noch platz für die 50 sein?!

mfg }-Tux-{
 

panamajo

Guru
}-Tux-{ schrieb:
da müsste doch jetzt noch platz für die 50 sein?!
Nein, genau falsch.
IMHO kann so ein wirrer Code wie das Orginalprogramm nur von einem Lehrer o.ä. stammen, insofern wäre es - zumal du schon sehr detaillierte Hilfestellung von TeXpert bekommen hast - unfair weiter zu helfen. :mrgreen:
 

TeXpert

Guru
}-Tux-{ schrieb:
TeXpert schrieb:
1. char *tmp="foo"; legt einen Zeiger auf konstante Speicherbereiche an, die Größe wird zur Kompilezeit festgelegt, nicht veränderlich!
ok kleiner Fehler ;) s/Größe/Größe und Inhalt/
sorry wenn ich jetzt total aufm schlauch stehe aber wenn ich das prog wie folgt abändere müsste es doch gehen?!
[...]
da müsste doch jetzt noch platz für die 50 sein?!

lies nach, wo die "50" im Speicher liegen
 
OP
T

}-Tux-{

Hacker
danke TeXpert jetzt hab ich verstanden was du meinst :wink:
thank you!!!


@panamajo
das programm stammt von keinem lehrer sondern von mir


mfg }-Tux-{
 

DeJe

Member
Ok dann ein Tipp von mir (gilt für alle Programmiersprachen):
Verwende _niemals_ Input als Puffer für den Output!
So pauschal kann man das nicht sagen.

Aber bei "verwende niemals Konstanten als Puffer für den Output" gehe ich mit. ;)
 
Oben