将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错
Posted
技术标签:
【中文标题】将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错【英文标题】:Getting error when using puts to output 2d char array in c when sending array as void pointer 【发布时间】:2021-05-09 20:55:35 【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/time.h>
#include <unistd.h>
#include <string.h>
#define size 5
void *displayName(void *received_array)
char *name = received_array;
for(int i=0;i<5;i++)
puts(name[i]);
pthread_exit(0);
int main()
pthread_t threadid1;
char name[10][50];
strcpy(name[2], "raj");
strcpy(name[3], "pol");
strcpy(name[4], "sara");*/
pthread_create(&threadid1,NULL,displayName, name);
在函数“displayName”中: q2v2.c:42:15:警告:传递“puts”的参数 1 使指针从整数而不进行强制转换 [-Wint-conversion] 42 |放(名称[i]); | ~~~~^~~ | | |字符
【问题讨论】:
【参考方案1】:你应该匹配传递指针的类型。
替换
char *name = received_array;
与
char (*name)[50] = received_array;
另外别忘了在main()
函数中初始化name[0]
和name[1]
。
【讨论】:
【参考方案2】:<source>:9:15: warning: passing argument 1 of 'puts' makes pointer from integer without a cast [-Wint-conversion]
9 | puts(name[i]);
| ~~~~^~~
| |
| char
此警告意味着 puts
期望一个指针,但您给它一个整数类型,例如 char
而不是 char*
。
如果你看完文字还是不明白这个警告,编译器好心用“ASCII art”指出bug的确切位置:
9 | puts(name[i]);
| ~~~~^~~
| |
| BUG HERE this is a char
当编译器指出错误的确切位置时,建议怀疑编译器是正确的,这确实是错误的确切位置。
话虽如此,您将char(*)[50]
传递给pthread,然后在线程回调中将其用作char*
,这是第二个错误。
【讨论】:
总的来说,这是非常基本的东西,如果你不能自己解决这些错误,那么你应该在做半高级的东西之前退一步研究数组、指针和字符串,比如 multi -线程。以上是关于将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错的主要内容,如果未能解决你的问题,请参考以下文章