2016-03-31 5 views
1
typedef struct Symbol{ 
    char varName[16]; 
} Symbol; 

............... 
Symbol *newSymbol = malloc(sizeof(Symbol)); 
const char space[2] = " "; 


char *String = "Name Test"; 

//break off the first word from String and put it into name 

char *name; 
name = strtok(String,space); 

//convert the char * to char[16] 

char nameArray[16]; 
strcpy(nameArray,name); 

//set newSymbol->varName to the newly created char[16] 

newSymbol->varName = nameArray 

Ich habe eine char * namens String. In meinem aktuellen Programm wird es aus einer Datei mit fgets gelesen, ich nenne es nur "Name Test" für die Zwecke dieses Beispiels. Ich möchte das erste Wort der Zeichenfolge nehmen und es als varName in einer Symbol zuweisen. Was also passieren soll, ist newSymbol->varName ist auf "Name" eingestellt. Weil strtok eine char * zurückgibt, aber ich brauche eine char[16] für die Struktur, muss ich die char * in eine char[16] konvertieren.Strcpy von char * nach char [] Erstellen des falschen Formulars

Allerdings bekomme ich diesen Fehler:

"Error: incompatible types when assigning to type 'char[16]' from type 'char*' 
newSymbol -> varName = nameArray; 

So scheint es, wie strcpy eigentlich ist es nicht die char * zu einem char[16] konvertieren. Auch nachdem ich eine char[16] deklariert und strcpy gesagt habe, um den Inhalt der char * darin zu setzen, habe ich noch eine char * statt einer char[16]. Ich muss es machen, ohne die Struktur zu ändern, also ist das keine Option hier.

Wie kann ich eine char * in eine char[16] konvertieren?

+2

Hmmm 'char * String =" Name Test "; ... name = strtok (String, Leerzeichen); 'sieht zweifelhaft aus und versucht, ein Zeichenfolgenliteral zu ändern, denke ich. – chux

+0

Sie haben recht, @chux, aber ich nehme an, dass dies ein Fehler ist, den der OP bei der Reduzierung seines ursprünglichen Codes auf das von ihm vorgestellte Beispiel eingeführt hat. –

Antwort

2

Sie können nicht den Inhalt eines Arrays zuweisen den regulären Zuweisungsoperator in C unter Verwendung von

Sie strcpy für Streicher und memcpy/memset für andere Datentypen verwenden können. (Sie könnten memcpy/memset für Strings verwenden, aber strcpy ist einfacher)

Statt

newSymbol -> varName = nameArray; 

Verwendung

strcpy(newSymbol -> varName, nameArray); 
+0

Ich habe es versucht und es hat funktioniert, danke für die Hilfe! –

+0

@JacobL., Sie sind willkommen. –

2

So, it seems like strcpy it not actually converting the char* to a char[16].

Nein, das Problem ist, dass C nicht vorsehe, um die Zuordnung (ganze) Arrays. newSymbol->varName ist ein Array von 16 char. Sie können Elemente dieses Arrays zuweisen, und Sie können mit strcpy() oder einer ähnlichen Funktion in es kopieren, aber Sie können das gesamte Array nicht zuweisen.

In Ihrem speziellen Code, ich mit variabler nameArray verzichten würde, dies zu ändern ...

strcpy(nameArray,name); 

... dazu:

strcpy(newSymbol->varName, name); 

(Oder vielleicht auf eine ähnliche Verwendung von strncpy(), um vor einem Überlauf der Array-Grenzen zu schützen.)