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

rid*_*elf 3 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;
}       
Run Code Online (Sandbox Code Playgroud)

我期待着

这个和那个

在程序运行时打印,但我看到:

是否有人能够指导我完成程序实际执行的操作,更重要的是,我做错了什么?

pb2*_*b2q 8

您正在使用带有逗号运算符的表达式作为函数的返回值.

逗号运算符两个操作数(在逗号的任一侧上的表达式),并且结果表达的是评估第二表达式的结果:在逗号的右手侧的表达式.在您的情况下,第二个表达式是结果,因此作为函数的返回值返回.

因此,函数中return语句的结果等效于:

return thing;
Run Code Online (Sandbox Code Playgroud)

这就是你的函数的结果是字符串的原因"that".

您似乎期望printf从此表达式中获得某种样式字符串格式:

("this and %s", thing);
Run Code Online (Sandbox Code Playgroud)

但它不会像这样工作:它只是一个使用逗号运算符的表达式.

在C中,连接字符串并不容易.查看标准字符串strcat系列函数(请参阅strncat 此处的文档)或其中一个sprintf函数(snprintf 此处为文档).