连接两个 uint8_t 指针

Concatenation of two uint8_t pointer

我正在使用两个 uint8_t 指针

uint8_t *A_string = "hello"
uint8_t *B_string = "world"

我正在尝试使用 strcat

连接这两个
strcat(A_string, B_string);

我收到一条错误消息“uint8_t 与 char* 类型的参数不兼容 restrict

所以我将 A_string 和 B_string 类型都转换为 char* 并尝试了。现在我没有收到错误,但没有发生连接。

任何人都可以告诉我如何合并两个 uint8_t * 类型的字符串吗?

A_string 指向不可修改的 string literal. However, the first argument of strcat 不能是指向字符串文字的指针 — 它必须是指向 可修改数组 的指针,此外,数组必须足够大以容纳串联的结果。

要解决此问题,请将 A_string 声明为足够大的数组。

此外,请注意编译器警告:您的代码中可能存在符号不匹配,这可能会导致问题。事实上,您可能想在这里使用 char 而不是 uint8_t

这是一个固定版本:

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

int main(void) {
    // 11 = strlen("hello") + strlen("world") + 1
    char a_string[11] = "hello";
    char const *b_string = "world";
    strcat(a_string, b_string);

    printf("%s\n", a_string);
}

实际上你通常不会 hard-code 数组大小,因为如果你知道它,你也可以在源代码中自己连接字符串文字。

相反,您需要计算 所需的大小,并使用 malloc:

动态分配足够大小的缓冲区
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(void) {
    char const *a_string = "hello";
    char const *b_string = "world";
    
    size_t total_len = strlen(a_string) + strlen(b_string) + 1;
    char *result = malloc(total_len);
    if (! result) {
        fprintf(stderr, "Unable to allocate array of size %zu\n", total_len);
        exit(1);
    }
    strcpy(result, a_string);
    strcat(result, b_string);

    printf("%s\n", result);
}