2011-02-08 21 views
8

Jestem początkującym C i to jest mój kod C:Jak zwrócić ciąg znaków w moim kodzie C?

#include <stdio.h> 
#include <stdlib.h> 
main() 
{ 
     printf("Hello world !\n"); 
     return 'sss'; 
} 

który pokaże błąd,

tak jak zwracać ciąg w kodzie C?

+5

'main' musi powrócić 'int', no ifs, ands, or buts. Czego dokładnie oczekujesz od tego ciągu? (Chociaż "ciąg" jest tak naprawdę stałą znaku, ponieważ używa '' 'ograniczników zamiast' '' –

+0

Błąd? Skopiuj dokładnie komunikat o błędzie Dokładnie, czego się spodziewałeś? –

+2

Brakuje średnika po deklaracji return, to prawdopodobnie jest błąd.Powrotu '' sss'' z 'main' będzie technicznie działało (ponieważ jest to' int'), ale zdecydowanie nie jest to, co jest pożądane –

Odpowiedz

12

Jeśli chcesz zwrócić ciąg znaków z funkcji (innej niż główna), powinieneś zrobić coś takiego.

#include <stdio.h> 
const char * getString(); 
int main() 
{ 
printf("hello world\n"); 
printf("%s\n", getString()); 
return 0; 
} 

const char * getString() 
{ 
const char *x = "abcstring"; 
return x; 
} 
+5

Ostrożnie, literały łańcuchowe są const - ale kompilator nie zawsze to wie! –

+0

@Martin Beckett, jak dodać "const" przed deklaracją? jako 'const char *'. – Thomson

+0

@MartinBeckett, Co rozumiesz przez * "ale kompilator nie zawsze to wie" *? – Pacerier

0

Niestety nie ma sposobu, aby to zrobić.

Można dodać coś do końca programu c jak:

int main() 
{ 
    int err = 0; // 0 is "success" is most c programs 
    printf("hello world!\n"); 

    switch(err) 
    { 
     case 0: 
     printf("program shutdown succesfully!\n"); 
     break; 
     case 1: 
     printf("we had an issue somewhere. please fix your input data\n"); 
     break; 
     //case 2, 3, etc... 
    }; 

    return err; 
} 
-2

Możesz być w stanie wykorzystać zmienne środowiskowe za to. Nie jestem tego pewien.

0

Nie zwracasz ciągu. Aplikacje kończą się kodem wyjścia.

Konwencjonalnie, wyjście z wynikiem 0 zawsze pokazuje, że twoja aplikacja zakończyła pracę bez błędu/zakończona. Zwracasz liczbę całkowitą inną niż 0, aby pokazać, że twoja aplikacja zakończyła się nienormalnie.

Możesz rzucić wyjątek i obsłużyć go za pomocą metody rejestrowania wyżej w stosie wywołań lub możesz po prostu zwrócić coś innego niż 0 i upewnić się, że zostało to udokumentowane w informacjach o wydaniu, co oznacza każda liczba całkowita błędu.

2

Można to zrobić w prosty sposób, aby uzyskać scanf. Innymi słowy:

void foo(char **value_to_return) { 
    *value_to_return = malloc(256); // store 256 chars 
    strcpy(*value_to_return, "deposited string"); 
} 

int main() { 
    char *deposit; 
    foo(&deposit); 
    printf("%s", deposit); 
    return 0; 
} 
4

Magia jest słowem kluczowym static który zachowuje zawartość pamięci łańcucha nawet po zakończeniu funkcji. (Można traktować je jak rozszerzenie zakresu zmiennej.)

Kod ten trwa jeden znak za każdym razem, a następnie łączy je w ciąg i zapisuje go do pliku:

#include <stdio.h> 
#include <conio.h> 

char* strbsmallah() 
{ 
    static char input[50]; 
    char position =0, letter; 
    scanf("%c",&letter); 
    while (letter != '~') { // press '~' to end your text 
    input [position]=letter; 
    ++position; 
    scanf("%c",&letter); 
    } 
    input[position]='\0'; 
    char *y; 
    y = (char*) &input; 
    //printf("%s\n ",y); 
    return y; 
} 

int main() { 
    printf("\n"); 
    FILE *fp; 
    fp = fopen("bsmallah.txt", "w+"); 
    fprintf(fp, strbsmallah()); 

    while (!_kbhit()); 
    return 0; 
} 
Powiązane problemy