Как вернуть строку в моем C-коде? - PullRequest
8 голосов
/ 08 февраля 2011

Я новичок в C, и это мой код C:

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

, который покажет ошибку,

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

Ответы [ 6 ]

12 голосов
/ 08 февраля 2011

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

#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;
}
4 голосов
/ 10 октября 2013

Магия заключается в ключевом слове 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;
}
3 голосов
/ 06 апреля 2013

Вы можете сделать это более простым способом до 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;
}
0 голосов
/ 08 февраля 2011

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

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

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

0 голосов
/ 08 февраля 2011

Вы можете использовать переменные окружения для этого.Хотя не уверен.

0 голосов
/ 08 февраля 2011

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

Вы можете добавить что-нибудь в конец вашей 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;  
}
...