"We are back" « oc.at

Problem in C

zeitgeist 26.02.2010 - 14:49 2638 8
Posts

zeitgeist

Little Overclocker
Registered: May 2008
Location: austria
Posts: 61
habe folgenden code:
Code:
#include <stdio>
#include <stdlib>

struct name {
   char the_name[255];
   struct name *next;
};
   
   
int main (int argc, const char * argv[]) {

   
   struct name *first = NULL;
   struct name *new_name;
   
   new_name = malloc(sizeof(struct name));
   
   new_name->the_name = "Raphael Gruber";   
   
   return 0;
}

und wenn ich new name.the_name meinen namen zuweisen willst steht da "incompatible types in assignment", warum? ist doch ein array von chars..

mfg

Neo1010

.
Registered: May 2003
Location: -
Posts: 1212
hast es schon mal mit strcpy probiert?

strcpy(new_name.the_name,"Raphael Gruber");

zeitgeist

Little Overclocker
Registered: May 2008
Location: austria
Posts: 61
funktioniert! super danke :)

Neo1010

.
Registered: May 2003
Location: -
Posts: 1212
no problem ;)

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9822
wenn schon dann bitte strncpy verwenden.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von ica
wenn schon dann bitte strncpy verwenden.
Vielleicht zur Erklärung:

strcpy kopiert bis zu einem terminierenden '\0', egal wie lange der String ist und wenn der String nicht \0-Terminiert ist auch gleich mal über die String-Grenzen hinaus. Und natürlich hat strcpy keine Ahnung wie groß der freie Speicherbereich an der Zieladresse ist. Dadurch kann man sehr sehr leicht Buffer overflows erzeugen, wenn man Glück hat gibts auch einen Segmentation fault, dann merkt man wenigst dass etwas faul ist

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11342
Das ist überhaupt nicht C, das ist C++. Und warum verwendest du in C++ nicht einfach die Klasse "string"? Dann geht auch die Zuweisung einfach mit "=".

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Ich hab jetzt wirklich fest geschaut und sehs einfach nicht. Warum ist das C++?

Edit: Del. Wars auch nicht...
Bearbeitet von jives am 26.02.2010, 23:35

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11342
Oh, nicht genau geschaut. Die Includedateien haben keine Extensions, und das ist nur bei C++ üblich - für C++ wären das aber natürlich cstdio und cstdlib.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz