2016-03-24 4 views
0

zu ändern Ich muss diese Funktion mit einem Zeiger anstelle von int i ändern und ich habe Probleme, weil mein Instinkt sagt mir, einen char Zeiger zu verwenden und jedes Mal den Zeiger auf den zu erhöhen nächste Zeichenfolge, aber ich weiß nicht, wie das zu implementieren ist.Letzter Teil des Puzzles ist es, diese Funktion in C

Dies ist, was ich bisher:

populate_demo() 

{ 
    int i; 
    for (i=0; evalue[i][0] ; i++) 
     env_add("DEMO",evalue[i]); 
} 

ich es natürlich experimentiert worden bin habe ich nicht mag nicht ausprobiert habe, aber ich kann ich zu erreichen scheinen, was hier brauchen mein Code

int main() 
{ 
char array1[4][6]={"one","two","three","four"}; 
char *p; 
p=array1[0]; 
*p++; 
printf("%s",p); 
return 0; 
} 

Erwartetes Ergebnis: printf druckt "zwei". geht aber stattdessen zum nächsten char der ersten string und druckt ne bis es \0 findet. Meine Frage ist also, wie ich zur nächsten Saite gehen soll?

+0

Vielleicht das Kapitel über Zeiger erneut lesen –

+0

Wenn es ein Zeiger auf ein Zeichen * ist, sollten Sie in der Lage sein, es nur zu erhöhen. –

+3

@Justanewb Zeigen, wie der Wert angegeben wird. –

Antwort

3

Wenn Sie ein Array wie diese

char array1[4][6]={"one","two","three","four"}; 

dann auf sein erstes Element Zeiger aussehen wird

char (*p)[6] = array1; 

So können Sie zum Beispiel schreiben

printf("%s", *p); 

oder

oder

printf("%s", *p++); 

Hier ist ein demonstratives Programm

#include <stdio.h> 

#define N 6 

void populate_demo(char evalue[][N]) 
{ 
    for (; (*evalue)[0]; ++evalue) puts(*evalue); 
}  

int main(void) 
{ 
    char array1[][N] = { "one", "two", "three", "four", "" }; 

    populate_demo(array1); 

    return 0; 
} 

Das Programm Ausgabe

one 
two 
three 
four 

ist Wenn das Array nicht eine leere Zeichenfolge enthält dann das Programm über das aussehen kann folgenden Weg

#include <stdio.h> 

#define N 6 

void populate_demo(char evalue[][N], size_t n) 
{ 
    for (char (*p)[N] = evalue; p != evalue + n; ++p) puts(*p); 
}  

int main(void) 
{ 
    char array1[][N] = { "one", "two", "three", "four" }; 

    populate_demo(array1, sizeof(array1)/sizeof(*array1)); 

    return 0; 
} 

Die Programmausgabe ist identisch.

Wenn der Compiler Arrays variabler Größe unterstützt, können Sie diese auch als Funktionsparameter verwenden.