2017-03-22 1 views
0

Comme vous pouvez le voir ci-dessous, je crée un tableau 2D de chaînes. J'utilise aussi un tableau char nommé "buffer". Je veux copier la valeur du tampon à la position [5] [0] du tableau 2D. Le problème est que lorsque la valeur du tampon change, la valeur de la cellule du tableau change également. Je veux garder la première valeur.Copier la valeur du tableau char dans le tableau 2D

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

char * strNameList[10][2] = { 
    {"Luca", "Daniel"} , 
    {"Vivan", "Desmond"}, 
    {"Abdul", "Justin"}, 
    {"Nina", "Marlene"}, 
    {"Donny", "Kathlene"} 
}; 

int main() 
{ 
    int j, i; 
    int pos = 5; 
    char buffer[10204]; 

    strcpy(buffer, "A Value"); 

    strNameList[pos][0] = buffer; 
    strNameList[pos][1] = "Surname"; 
    for (i = 0; i < 9; i++) { 
     printf("\n"); 
     for (j = 0; j < 2; j++) 
      printf(" %s", strNameList[i][j]); 
    } 

    strcpy(buffer, "B Value");  
    for (i = 0; i < 9; i++) { 
     printf("\n"); 
     for (j = 0; j < 2; j++) 
      printf(" %s", strNameList[i][j]); 
    } 
} 

Sortie:

Luca Daniel 
Vivan Desmond 
Abdul Justin 
Nina Marlene 
Donny Kathlene 
A Value Surname 


Luca Daniel 
Vivan Desmond 
Abdul Justin 
Nina Marlene 
Donny Kathlene 
B Value Surname 
+0

Quelle est votre question? –

+0

Alors, quel est votre problème alors? Soyez précis à ce sujet. –

+0

Je veux que la première valeur soit permanente – Fotis455

Répondre

1

Le problème est que strNameList[pos][0]des points à buffer et ce n'est pas un emplacement de stockage indépendant, car il est tout simplement un pointeur, vous pouvez le modifier en utilisant soit buffer ou strNameList[pos][0] parce que les deux pointent vers le même endroit en mémoire.

Ne pas mélanger des pointeurs vers des chaînes littérales, et des pointeurs vers des tableaux non-const dans le même tableau de chaînes, utilisez plutôt

strNameList[pos][0] = strdup(buffer); 

et vous verrez la différence, même

strNameList[pos][1] = strdup("Surname"); 

vous aurez besoin d'un

free(strNameList[pos][0]); 
free(strNameList[pos][1]); 

plus tard, quand vous ne avez plus besoin des pointeurs.