2011-02-08 16 views
8

Soy un principiante C y este es mi código C:¿Cómo devolver una cadena en mi código C?

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

que mostrará un error,

así cómo devolver una cadena de código C?

+5

'main' deben volver un 'int', no ifs, ands, o peros. ¿Qué es exactamente lo que espera que le pase a esta cadena? (Aunque la "cadena" es realmente una constante de caracteres, ya que utiliza delimitadores ''' en lugar de' "') –

+0

¿Error al copiar exactamente el mensaje de error? ¿Qué esperaba exactamente que ocurriera? –

+2

Falta un punto y coma después de la declaración de devolución, es probable que sea el error. Volver '' sss'' de 'main' funcionará técnicamente (ya que es un' int'), pero definitivamente no es lo que se desea. –

Respuesta

12

Si está buscando devolver una cadena desde una función (distinta de la principal), debería hacer algo como esto.

#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

Los literales de cadena son const, pero el compilador no siempre lo sabe! –

+0

@Martin Beckett, ¿qué le parece agregar 'const' antes de la declaración? como 'const char *'. – Thomson

+0

@MartinBeckett, ¿Qué quiere decir con * "pero el compilador no siempre lo sabe" *? – Pacerier

0

Lamentablemente no hay forma de hacerlo.

Se podría añadir algo al final de su programa como c:

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

Usted puede ser capaz de utilizar las variables de entorno para eso. Aunque no estoy seguro

0

No devuelve una cadena. Las aplicaciones salen con un código de salida entero.

Convencionalmente, salir con un retorno de 0 siempre mostrará que su aplicación salió sin error/completada. Devuelve un número entero distinto de 0 para mostrar que su aplicación salió anormalmente.

Puede lanzar una excepción y manejarla con un método de registro superior en la pila de llamadas, o simplemente puede devolver algo que no sea 0 y asegurarse de tener documentado en sus notas de versión lo que significa cada entero de error.

2

Puedes hacer esto de una manera simplar a scanf. en otros términos:

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

La magia está en la palabra clave static que conserva el contenido de la memoria de la cadena, incluso después de que termine la función. (Se puede considerar que se extiende el alcance de la variable.)

Este código tiene un carácter cada vez, a continuación, los concatena en una cadena y lo guarda en un archivo:

#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; 
} 
Cuestiones relacionadas