如何在我的 C 代码中将字符串返回给操作系统?

Posted

技术标签:

【中文标题】如何在我的 C 代码中将字符串返回给操作系统?【英文标题】:How can I return a string to the operating system in my C code? 【发布时间】:2011-06-23 04:39:46 【问题描述】:

我是 C 初学者,这是我的 C 代码:

#include <stdio.h>
#include <stdlib.h>

main()

    printf("Hello, World!\n");
    return 'sss';

这将显示一个错误。那么如何在 C 代码中返回一个字符串呢?

【问题讨论】:

main 必须返回 int,没有 ifs、ands 或 buts。你希望这个字符串会发生什么? (虽然“字符串”实际上是一个字符常量,因为它使用' 分隔符而不是" 一个错误?准确复制错误消息。确切地说,您预计会发生什么? return语句后面少了一个分号;这很可能是错误。从main 返回'sss' 在技术上是可行的(因为它是int),但这绝对不是我们想要的。 这个问题需要澄清一下,这里的许多答案都假设你在问:“如何在 C 中将字符串返回给操作系统?” Returning C string from a function的可能重复 【参考方案1】:

如果您希望从函数中返回字符串(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;

【讨论】:

小心,字符串文字是 const - 但编译器并不总是知道这一点! @Martin Beckett,在声明前加上const 怎么样?如const char * @MartinBeckett,“但编译器并不总是知道这一点”是什么意思? @Pacerier 没有关于该函数退出时字符串占用的内存会发生什么的规则(AFAIK)。根据您的体系结构,它可能位于只读程序段或数据存储器中。因此,即使它“有效”,也不要依赖它。 @MartinBeckett,你是说当我们读取字符串(printf("%s\n", getString()); 行)时,我们实际上可能会得到垃圾数据?【参考方案2】:

神奇之处在于关键字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;

【讨论】:

但是如果输入超过 50 个字符(?),它会覆盖内存。 什么是_kbhit()?它是否特定于特定平台(例如 Windows)?【参考方案3】:

您可以通过类似于scanf 的方式执行此操作。换句话说:

void foo(char **value_to_return) 
    *value_to_return = malloc(256); // Store 256 characters
    strcpy(*value_to_return, "deposited string");


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

【讨论】:

【参考方案4】:

你没有返回一个字符串。应用程序以整数退出代码退出。

通常,以 0 的返回值退出将始终表明您的应用程序退出时没有错误/已完成。您返回一个非 0 的整数表示您的应用程序异常退出。

您可以抛出异常并使用调用堆栈中更高的日志记录方法来处理它,或者您可以只返回 0 以外的值,并确保在发行说明中记录了每个错误整数的含义。

【讨论】:

【参考方案5】:

遗憾的是没有办法做到这一点。

您可以在 C 程序的末尾添加一些内容,例如:

int main()

    int err = 0; // 0 is "success" is most C programs
    printf("Hello, World!!\n");

    switch( err )
    
      case 0:
        printf("Program shutdown successfully!\n");
        break;
      case 1:
        printf("We had an issue somewhere. Please fix your input data\n");
        break;
      //case 2, 3, etc...
    ;

   return err;

【讨论】:

【参考方案6】:

您也许可以为此使用环境变量。不过不确定。

【讨论】:

也许找出和update your answer(不在 cmets 中)?

以上是关于如何在我的 C 代码中将字符串返回给操作系统?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的XAML代码中将C#中的标签添加到网格中?

如何在反应离子应用程序中将 ios 键盘返回按钮更改为下一步/完成?

如何在http get中将多个字符串传递给一个url?

如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?

如何在当前活动中将搜索结果保存在 ListView (Android) 中

如何在C#中将字符串转换为UTF-8?