c - 返回字符串的函数的意外输出

标签 c arrays string function

我有一个函数 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/

相关文章:

java - 如何使用两个整数数组执行 "cross-over"

Python 。如何摆脱字符串中的 '\r'?

c - 将任意结构从 C 传递到 LUA 并访问它

c - 使用 typedef 和结构理解 C 代码

javascript - Mongoose:查找子文档并修改它的数组?

c# - 将 outlook rtfbody 添加到包含其图像的 richtextbox

c# - 如何将 'end of text' (ETX, ASCII 3) 放入字符串中?

c++ - 如何计算字符串 vector ?

c - 什么是 C 的高效工作流程? - 生成文件 + bash 脚本

php - 使用 mcrypt 在 php 和 c 中进行 AES 加密