c - 从类型 'char*' 分配给类型 char[32] 时类型不兼容

标签 c

我正在尝试设置以下结构的参数:

typedef struct thread_args_s {
    int idx;
    int role;
    int fifo_desc;
    char client_fifo_name[FIFO_NAME_MAX_LENGTH];
    char msg[MSG_MAX_LENGTH];
} thread_args_t;

我在分配 thread_args_t->client_fifo_name 时遇到问题。

client_fifo_name 由字符串 CLIENT_FIFO_NAME_SUFFIX + i 的串联给出,使用 sprintf()

详细说明:

int i;
char* name;

for(i=0; i<THREAD_COUNT-1; i++){
    thread_args_t* prod_args = malloc(sizeof(thread_args_t));
    prod_args->idx = i;
    prod_args->role = PROD_ROLE;
    prod_args-> fifo_desc = server_fifo;
    sprintf(name, "%s%d", CLIENT_FIFO_NAME_SUFFIX, i);
    //How to assign the string "name" to prod_args->client_fifo_name?
    prod_args->client_fifo_name = name;
    [...]}

编译,错误为:

Incompatible types when assigning to type char[32] from type char*.

我该如何解决?

最佳答案

类型不兼容,因为赋值的左侧正好是 32 个字符,而赋值的右侧是指针。我猜,但你可能想要:

snprintf(prod_args->client_fifo_name,
         FIFO_NAME_MAX_LENGTH,
         "%s%d",
         CLIENT_FIFO_NAME_SUFFIX, i);

关于c - 从类型 'char*' 分配给类型 char[32] 时类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48794245/

相关文章:

c - 如何实现为 _Pragma 创建带引号的字符串的宏?

c - 添加作为参数给出的分数 C

c - printf() 函数如何处理使用全局缓冲区的函数返回的字符串?

c - 调用malloc()和free()时寄存器/缓存和主存之间是否有数据传输

c - fork - 子进程数量

c - 在微 Controller 上以二进制形式写入文件

c - 如何检查变量是否等于多个值

c - C对象的顺序重要吗?

c - 解密(AES)和解码(Base64)后得到错误的纯文本

c - 父进程如何等待所有子进程终止