C语言中,经常需要将多个字符串连接起来,形成一个新的字符串。这在构建路径、格式化输出、处理文本数据等方面非常常见。C语言提供了多种方式来连接字符串,方式的选择取决于具体的应用场景和对代码效率、安全性的要求。在实际开发中,建议使用 snprintf 函数来避免缓冲区溢出的问题,提高代码的安全性。

1、隐式字符串文字连接

C 语言中,当将两个字符串字面量(string literals)放在一起时,编译器会自动将它们连接。这是最简单和最常见的连接字符串文字的方法。

#include <stdio.h>

int main() {
    printf("Hello, " "World!" "\n");
    return 0;
}

2、使用 strcat() 进行显式连接

如果需要在运行时连接字符串(即,不只是字面量字符串),可以使用 strcat() 函数,它声明在 库中。此函数会将一个字符串附加到另一个字符串后面。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[50] = "Hello, ";
    char str2[] = "World!";

    strcat(str1, str2);  // 将 str2 连接到 str1 后面
    printf("%s\n", str1);  // 输出: Hello, World!
    
    return 0;
}

3、使用 sprintf() 进行连接

也可以使用 sprintf() 函数来连接字符串。它声明在 库中,将格式化输出写入到字符串中。

#include <stdio.h>

int main() {
    char result[50];
    sprintf(result, "%s%s", "Hello, ", "World!");  // 使用 sprintf 连接字符串
    printf("%s\n", result);  // 输出: Hello, World!
    
    return 0;
}

4、使用指针运算进行手动连接

还可以通过使用指针运算来手动连接字符串。这种方法更底层,给你更多的内存控制,但通常不如前述方法常见。

#include <stdio.h>

int main() {
    char str1[50] = "Hello, ";
    char str2[] = "World!";
    char *p = str1 + strlen(str1);  // 指向 str1 的末尾

    while (*str2) {
        *p++ = *str2++;  // 将 str2 中的每个字符复制到 str1 中
    }
    *p = '\0';  // 给结果添加终止符

    printf("%s\n", str1);  // 输出: Hello, World!

    return 0;
}

5、日志信息构建

在调试和日志记录时,可能需要将多个信息拼接在一起,以便输出完整的日志消息。常量字符串的连接在这种场景中非常常见。

#include <stdio.h>

void log_message(const char* level, const char* message) {
    printf("[%s] %s\n", level, message);
}

int main() {
    log_message("INFO", "Application started.");
    log_message("ERROR", "Failed to load configuration.");
    return 0;
}

6、构建 SQL 查询语句

当需要构建动态的 SQL 查询时,字符串连接是非常有用的。你可以将查询条件、字段名称、表名等字符串拼接在一起。

#include <stdio.h>
#include <string.h>

int main() {
    char query[200] = "SELECT * FROM users WHERE ";
    strcat(query, "age > 30 AND ");
    strcat(query, "name = 'John';");
    printf("SQL Query: %s\n", query);  
    return 0;
}