對於這個程序,我通過命令行傳遞數字,然後有一個多線程程序,它接受每個參數,計算它的因子,然後打印它們。我知道C++,但是我對c很粗糙,並且似乎無法正確地爲該程序正確地轉換。特別是當我將參數傳遞給thread_create並將其轉換爲整數時。我有下面的代碼編譯,但轉換後的值始終是0.如何將char值轉換爲void *然後轉換爲整數?如何從argv傳遞一個整數到pthread_create函數中? (C)
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#define MAX_ARRAY (17)
void *thread_func(void *);
int factors[MAX_ARRAY];
int main(int argc, char *argv[]) {
pthread_t thread_handle[argc];
int i;
int g;
// Create Children Threads
for (i = 0; i < argc; i++) {
pthread_create(&thread_handle[i], NULL, thread_func, &argv[i + 1]);
}
// Rejoin Threads
for (i = 0; i < argc; i++) {
pthread_join(thread_handle[i], NULL);
// Print Factors Here
printf("%d: ", atoi(argv[i]));
for (g = 0; g < MAX_ARRAY; g++) {
printf("%d, ", factors[g]);
}
printf("\n");
for (g = 0; g < MAX_ARRAY; g++) {
factors[g] = 0;
}
}
return 0;
}
void *thread_func(void *data) {
int n = atoi(data);
int x;
int v;
printf("Number to factor is: %d\n", n);
for (x = 1; x <= n; ++x) {
if (n%x == 0)
factors[v++] = x;
}
return NULL;
}
我沒有看到你的代碼或任何理由認爲你需要他們的任何轉換。 – 2015-02-07 03:19:02
在thread_func中,我必須解引用傳入的值,並且該值是一個空指針。我必須將它從void *轉換爲整數*或我可以解引用的東西。 – JamaicanBambi 2015-02-07 03:22:10
@ user3208991:不,指針指向命令行中的字符串。你只需要將它傳遞給'atoi'(就像你正在做的那樣)來將字符串解釋爲十進制數。 – 2015-02-07 03:29:20