我正在尝试编写一个简单的多线程程序,它将一个命令行参数(一个int)发送给一个函数,但是我无法正确转换它。下面是我的程序片段,不包括不相关的代码。
int main(int argc, char **argv)
{
pthread_t thread1;
pthread_create(&thread1, NULL, simple_function, (void*)argv[1]);
pthread_join(thread1, NULL);
return EXIT_SUCCESS;
}
void* simple_function(void* num)
{
int n = *(int *)num;
printf(The number is: '%d', n);
n - 1;
...
}
我的计划实际做了什么:
命令行输入:14
预期'printf'结果:14
实际'printf'结果:1476408369
我的转换中缺少某些内容,但我不确定应将其转换为什么内容。编译过程中没有任何警告,非常感谢任何帮助。
答案 0 :(得分:4)
最突出的是argv [1]实际上是(char *)而不是(int *)。您需要使用像atoi这样的东西将字符串转换为数字值。
void* simple_function(void* val)
{
char * c = (char *)val;
int n = atoi(c);
printf(The number is: '%d', n);
n - 1;
...
}
注意我实际上没有测试过上面的代码,因为我目前无法访问C编译器