2016-05-07 4 views
1

Ich habe ein Problem mit strcpy in C. Mein Code:strcpy Problem mit char Zeiger in c

student.h

#include <stdlib.h> 
#include <string.h> 
typedef struct { 
    char *name;  /**< char pointer to name of Student */ 
    char *grades; /**< char pointer to grades of labs */ 
    float mark;  /**< float as mark of labs */ 
} Student; 

Student *new_student(char *, char *); 

student.c

include "student.h" 
Student *new_student(char *name, char *grades) { 

    if (name == NULL || strlen(name) == 0) return NULL; 
    char *marks = ""; 
    //if (grades == NULL) grades = ""; 
    if(grades == NULL){ 
     marks= ""; 
    } 
    else{ 
     marks= grades; 
    } 

Student *test; 
test = (Student*) malloc(sizeof(Student)); 

(void)strcpy(&test->name, name); 
    (void)strcpy(&test->grades, noten); 

return test; 
} 

und mein Hauptcheck.c

#include <stdlib.h> 
#include "student.h" 


int main() { 

    Student *s; 
    s = new_student("Test", "ABC"); 
    printf("%s",&s->name); 

    /*(void)test_student(0, NULL);*/ 
    return EXIT_SUCCESS; 
} 

Das Problem ist, die printf-Anweisung gibt TestABC statt nur Test zurück. Ich verstehe es einfach nicht. Ich möchte nur den Namen nicht den Namen und die Noten zusammen in meiner Printf-Anweisung. Kann jemand helfen?

+0

Sehen Sie sich Ihre 'Student' Struktur und Fragen Sie sich, wo Sie diese Saiten aufbewahren. Ich sehe keine Arrays, oder? –

Antwort

0

Sie haben hier einige Probleme.

Ändern Sie zuerst Ihre struct Deklaration, um Speicherplatz für Ihre Zeichenfolgen zuzuweisen. Ich wählte zufällig 100 für Array-Größen aus; Ändere das auf jede Größe, die Sinn macht.

typedef struct { 
    char name[100]; /**< name of Student */ 
    char grades[100];/**< grades of labs */ 
    float mark;  /**< float as mark of labs */ 
} Student; 

Als nächstes ändern Sie Ihre new_student Funktion wie folgt:

Student *test; 
test = malloc(sizeof(Student)); 

strcpy(test->name, name); 
strcpy(test->grades, noten); 

Schließlich fixieren Sie Ihre printf Aussage in main wie folgt aussehen:

printf("%s", s->name); 
+0

ty, die mir geholfen haben, das Problem zu beheben. Ich habe gerade angefangen, C zu lernen, also bin ich sehr dankbar für jeden Rat :). – member2

+0

@ member2 Gern geschehen, aber die übliche Art, Wertschätzung auszudrücken, besteht darin, zu antworten und die Antwort zu akzeptieren. –