将动态指针数组传递给C函数

时间:2016-12-11 19:38:31

标签: c arrays pointers

我想将文件的每一行存储在一个二维数组中,并且指向每一行的anthor数组(所以我可以识别每一行),我需要将这个指针数组传递给一个函数,这样我就可以操作我的行了,我d了解如何做到这一点

我有这个代码来读取和存储在数组中

heightForRowAtIndexPath:

我正在阅读的文件

char ligne[MAX];
//open end test the file
FILE* fichier = fopen("csp.txt","r");
if(fichier == NULL){
    printf("can't open the file \n");
    return EXIT_FAILURE;
}
//the first line in the file contain number of other lines
fgets(ligne, sizeof(ligne), fichier);
int nbrTaille = strtol(ligne, NULL, 10);

//array of pointers
char (*tab)[nbrTaille] = malloc(nbrTaille * sizeof(ligne));
int i = 0;

//tab array point each line
while(fgets(ligne, sizeof(ligne), fichier)){

    if(ligne == NULL) EXIT_FAILURE;

    strncpy(tab[i], ligne, strlen(ligne));  
    printf("line%d : %s\n", i, tab[i]);
    i++;
}
//call the funnction by passing array of pointers and the number of lines
allDiff(tab, nbrTaille);

通过我尝试过的功能接收数组,但它没有工作

2
1 2
2 3

3 个答案:

答案 0 :(得分:1)

void function(char tab[][MAXLEN], ...); 这样做。

答案 1 :(得分:1)

我总是与父母和星号混淆。更简单的方法是声明一个双指针:

FormClosing

最后释放记忆:

char ** tab;

//you need to take care of errors. I am not doing it for simplicity
//tab = {pointer1, pointer2, pointer3, ...., pointerN} total memory needed N * sizeof(pointer)
tab = malloc(lines* sizeof(tab)); //how many pointers you want
for(i = 0; i < lines; i++){
    tab[i] = malloc(MAX); //each string
}

编辑 完整代码

for(i = 0; i < lines; i++){
    free(tab[i]);
}
free(tab);

答案 2 :(得分:0)

为了可读性和健全性,在创建数组或双指针之前输入dede C函数指针。

/* typedef the function pointer. An ftabptr points to a void function that
   takes a char * */
typedef void (*ftabptr)(char *p);


/* create an uninitalised list of twenty of them */
int N = 20;
ftabptr *pointerlist = malloc(N * sizeof(ftabptr));

但是我不认为你真的想这样做。你可以写一个 运行程序,用功能表做奇怪的事情 指针,但通常你使用C以外的语言 想玩那个游戏(类似Lisp的语言等)。高水平 然后,语言通常会将C作为中间步骤发出。