我有一个函数 stuff()
,它返回一个要从 main
打印的字符串。
#include <stdio.h>
char* stuff(char* thing) {
return ("this and %s", thing);
}
int main() {
char* thing = "that";
printf("%s\n", stuff(thing));
return 0;
}
我很期待
this and that
在程序运行时打印,但我看到的是:
that
是否有人能够向我介绍该程序实际在做什么,更重要的是,我做错了什么?
最佳答案
您正在使用带有逗号运算符 的表达式作为函数的返回值。
逗号运算符计算两个操作数(逗号两边的表达式),表达式的结果是计算第二个表达式的结果:右边的表达式逗号。在您的例子中,第二个表达式是结果,因此作为函数的返回值返回。
因此函数中 return 语句的结果等同于:
return thing;
这就是为什么您的函数的结果是字符串 "that"
。
你似乎期望从这个表达式中得到某种 printf
风格的字符串格式:
("this and %s", thing);
但它不会像这样工作:它只是一个使用逗号运算符的表达式。
在 C 语言中,连接字符串并不那么容易。查看标准字符串 strcat
函数族(参见 strncat
here 的文档),或 sprintf
函数族之一(文档对于 snprintf
here )。
关于c - 返回字符串的函数的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062139/