【问题标题】:Getting error when using puts to output 2d char array in c when sending array as void pointer将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错
【发布时间】: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]); | ~~~~^~~ | | |字符

【问题讨论】:

    标签: arrays c linux operating-system puts


    【解决方案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 -线程。
      最近更新 更多