2017-07-27 4 views
-5

Ich lerne über Zeiger. Dieser Codeabschnitt erzeugt einen Laufzeitfehler. Ich versuche, Zeichenfolge in Char-Array mit Zeiger zu Char einzufügen.Warum funktioniert die Strcpy-Funktion nicht mit Pointer to Array?

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char *a[10]; 
    strcpy(*a,"foo"); 
} 
+5

Wenn der Code-Speicher zuweisen für Ihren Zeiger ist 'a'? –

+1

Ruft dein Kompilieren nicht während des Kompilierens dieses Codes auf? Du solltest es hören. – Gerhardh

Antwort

1

char * a [10] ist als Array von Zeigern auf char, Sie char wollen ein [10], die ein Array von Zeichen

2

Sie erklärt haben a als ein Array von 10 Zeigern auf char . Ich denke, Sie wollten ein Array von 10 Char deklarieren.

char a[10]; 

Ändern der Deklaration auch bedeuten würde Sie den Anruf strcpy ändern müssen:

strcpy(a,"foo"); 

Das Programm sieht nun wie folgt aus:

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[10]; 
    strcpy(a,"foo"); 
} 
2

Warum strcpy Funktion nicht ist Arbeiten mit Pointer to Array?

Diese Erklärung

char *a[10]; 

erklären keinen Zeiger auf ein Array. Es ist eine Deklaration eines Arrays von 10 Zeigern auf Objekte vom Typ char.

Außerdem ist dieses Array nicht initialisiert und seine Elemente haben unbestimmte Werte.

Um einen Zeiger auf ein Array vom Typ deklarieren char[10] Sie durch eine Adresse einer entsprechenden Anordnung

char (*a)[10]; 

Und der Zeiger muss initialisiert werden, wenn Sie vorhaben, es zu benutzen in der Funktion strcpy schreiben soll.

Es scheint, was Sie meinen, ist das Folgende.

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char s[10]; 
    char (*a)[10] = &s; 

    strcpy(*a, "foo"); 

    puts(s); 

    return 0; 
} 

der Programmausgabe ist

foo 

In diesem Programm gibt es in der Tat einen Zeiger auf ein Zeichen-Array des

char (*a)[10] = &s; 

char[10] Typ deklariert ist

und der Zeiger durch die Adresse initialisiert wird, des Arrays s.

Und der dereferenzierten Zeiger wird in der Funktion verwendet strcpy

strcpy(*a, "foo");