如何在我的 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 代码中将字符串返回给操作系统?的主要内容,如果未能解决你的问题,请参考以下文章
如何在反应离子应用程序中将 ios 键盘返回按钮更改为下一步/完成?
如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?