2011-02-08 3 views
8

Я новичок C и это мой C код:Как вернуть строку в код C?

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

, который будет показывать ошибку,

так, как вернуть строку в коде C?

+5

'main' должен вернуться 'int', no ifs, ands или buts. Что именно вы ожидаете от этой строки? (Хотя «строка» на самом деле является символьной константой, так как она использует '' 'разделители вместо' '') –

+0

Ошибка? Скопируйте сообщение об ошибке точно. Что именно вы ожидали? –

+2

Отсутствует точка с запятой после утверждения return, вероятно, будет ошибкой. Возврат '' sss'' из 'main' будет технически работать (поскольку это' int'), но это определенно не то, что нужно. –

ответ

12

Если вы хотите вернуть строку из функции (кроме основной), вы должны сделать что-то вроде этого.

#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

Осторожные строковые литералы являются const, но компилятор не всегда это знает –

+0

@Martin Beckett, как насчет добавления 'const' перед объявлением? как 'const char *'. – Thomson

+0

@MartinBeckett: Что вы подразумеваете под * ", но компилятор не всегда знает это" *? – Pacerier

0

К сожалению, нет способа сделать это.

Вы можете добавить что-то к концу вашей программы, как гр:

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

Вы можете быть в состоянии использовать переменные среды для этого. Не уверен, хотя.

0

Вы не возвращаете строку. Выход приложений с целым кодом выхода.

Как правило, выход с возвратом 0 всегда будет показывать, что ваше приложение вышло без ошибок/выполнено. Вы возвращаете целое число, отличное от 0, чтобы показать, что ваше приложение выходит из строя ненормально.

Вы можете выбросить исключение и обработать его с помощью метода ведения журнала выше в стеке вызовов или вы можете просто вернуть что-то отличное от 0 и убедиться, что оно было задокументировано в примечаниях к выпуску относительно того, что означает каждое целое число ошибок.

2

Вы можете сделать это простым способом до scanf. другими словами:

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

Волшебство в ключевом слове static, который сохраняет содержимое памяти строки, даже после того, как функция заканчивается. (Вы можете рассматривать его как расширение сферы действия переменной.)

Этот код принимает один символ каждый раз, а затем присоединяет их в строку и сохраняет его в файл:

#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; 
} 
Смежные вопросы