将数组作为 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 数组时出错的主要内容,如果未能解决你的问题,请参考以下文章

《C程序设计语言》笔记 指针与数组

keil C 编程初始化指针函数数组时出错

对 C 字符串数组使用简单的 void 指针

c_cpp 在c中使用void指针数组的一些练习

通过C中的void函数返回动态数组

void函数指针的二维数组c ++