问题描述
#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 | puts(name[i]); | ~~~~^~~~ | | |字符
解决方法
您应该匹配传递的指针的类型。
替换
char *name = received_array;
与
char (*name)[50] = received_array;
另外不要忘记在 name[0]
函数中初始化 name[1]
和 main()
。
<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”指出错误的确切位置:
9 | puts(name[i]);
| ~~~~^~~
| |
| BUG HERE this is a char
当编译器指出错误的确切位置时,建议怀疑编译器是正确的,这确实是错误的确切位置。
话虽如此,您将 char(*)[50]
传递给 pthread,然后在线程回调中将其用作 char*
,这是第二个错误。