You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言线程中传入二维char数组如何正确进行类型转换

C语言线程传递二维字符数组的类型转换问题修复

错误原因

主函数传入的是char[2][20]类型的二维数组,数组名作为参数传递时会退化为指向包含20个char元素的数组的指针,即char (*)[20]类型。原代码中直接将传入的指针强转为char*类型,此时data[0]取到的是第一个char字符的值而非字符串首地址,和printf中%s要求的字符串首地址类型不匹配,因此无法得到预期输出。

修正后完整代码

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>

void * fun(void* arr)
{
    // 匹配二维数组类型做转换
    char (*data)[20] = (char (*)[20])arr;
   
    printf("Name: %s\n", data[0]);
    printf("Registration number: %s\n", data[1]);
    return 0;
}
int main()
{
    pthread_t tid;
    char data[2][20]={"sana", "005"};
    pthread_create(&tid, NULL, &fun, data);
    pthread_join(tid,NULL);

    return 0;
}

核心修改说明

  • 线程函数内的类型转换需要和传入的二维数组类型完全匹配:将原代码的char* data=(char*) arr;替换为char (*data)[20] = (char (*)[20])arr;
  • char (*data)[20]声明的是指向长度为20的char数组的指针,和主函数中二维数组退化为指针后的类型一致,此时访问data[0]即可拿到第一个字符串(姓名)的首地址,访问data[1]即可拿到第二个字符串(注册号)的首地址,符合使用需求。

内容的提问来源于stack exchange,提问作者Sana Younas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:15:03