2016-11-21 1 views
0

J'ai un tableau de chaînes. Essentiellement un tableau de 2d caractères.Comment passer une chaîne de tableau à la fonction c?

//Array to hold ip address of people on local network 
char* ipArray[100][17]; 

Comment pourrais-je déclarer et écrire une fonction qui passe dans ce tableau afin que l'intérieur de la fonction que je peux ajouter l'adresse IP ou des chaînes au tableau?

C'est ce que j'ai maintenant, et je reçois l'erreur error: array type 'char *[17]' is not assignable

//This function takes a string and returns the ip adress 
void addIP(char* str, int index, char* arr[][17]){ 

//Add the ip address to the index that was passed in. 
arr[index] = str; 


} 
+0

'char ipArray [100] [17];' '' void addIP (char * str, int index, char (* arr) [17]) { \t strcpy (arr [index], str); } ' – BLUEPIXY

+2

' char * ipArray [100] [17] 'n'est pas un tableau 2D de' char'. – Olaf

Répondre

0

Si vous voulez stocker les caractères réels (par opposition à un pointeur) dans le tableau, le tableau doit être déclarée comme char ipArray[100][17] (et de même pour l'argument de la fonction). Ensuite, à l'intérieur de la fonction, vous devrez copier str à arr[index] en utilisant strcpy ou quelque chose de similaire. Vous devrez également vous assurer que la longueur de la chaîne est inférieure à 17.

0

Comme d'autres l'ont mentionné, char* var[n][n2] est et non un tableau de chaînes. Plutôt un tableau avec 100 slots, où chaque slot peut contenir 17 pointeurs vers un personnage, pas les personnages eux-mêmes (si vous voulez avoir envie, vous pouvez l'utiliser comme un tableau 3D avec des pointeurs constants ou de la mémoire dynamique, mais n'y allez pas) .

Si vous voulez simplement un tableau où chaque emplacement peut pointer vers une chaîne via a[slot] = str c'est une chose. Mais vous vouliez probablement copier la chaîne entière en elle, donc vous devez utiliser memcpy (ou bien d'autres variations comme strcpy et autres) et la déclaration de tableau correct char var[n][n2]:

main.cpp

#include <string.h> 
#include <stdio.h> 

//This function takes a string and returns the ip adress 
void addIP(char* str, int index, char arr[][17]) 
{ 
    //Add the ip address to the index that was passed in. 
    memcpy(arr[index], str, strlen(str)); 
} 

int main() 
{ 
    //Array to hold ip address of people on local network 
    char ipArray[100][17]; 

    // Clean array and check starting contents. 
    memset(ipArray, 0, sizeof(ipArray)); 
    puts("-------------------------\nStarting array:\n"); 
    for (int i = 0; i < sizeof(ipArray)/sizeof(ipArray[0]); i++) 
    { 
     printf("ipArray[%i] = %s\n", i, ipArray[i]); 
    } 

    addIP("127.0.0.1", 0, ipArray); 

    // Check contents. 
    puts("-------------------------\nModified array:\n"); 
    for (int i = 0; i < sizeof(ipArray)/sizeof(ipArray[0]); i++) 
    { 
     printf("ipArray[%i] = %s\n", i, ipArray[i]); 
    } 

    return 0; 
} 

Assurez-vous de savoir ce que vous faites quand il s'agit de tailles correctes. S'il y a un risque que les chaînes puissent être plus grandes que ce que vous avez déclaré dans le tableau, vous demandez des problèmes. Aussi, soyez prudent à propos de la terminaison nulle (qui définit une chaîne de caractères).