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
相关产品推荐
相关产品推荐

