En C, j'ai deux tableaux de chars :
char array1[18] = "abcdefg";
char array2[18];
Comment copier la valeur de array1
a array2
? Puis-je simplement faire ceci : array2 = array1
?
En C, j'ai deux tableaux de chars :
char array1[18] = "abcdefg";
char array2[18];
Comment copier la valeur de array1
a array2
? Puis-je simplement faire ceci : array2 = array1
?
Je recommande d'utiliser memcpy() pour copier les données. De plus, si nous assignons un tampon à un autre comme array2 = array1
Les deux tableaux ont la même mémoire et tout changement dans le tableau 1 se répercute dans le tableau 2. Mais si nous utilisons memcpy, les deux tampons ont des tableaux différents. Je recommande memcpy() parce que strcpy et les fonctions connexes ne copient pas le caractère NULL.
Les fonctions c ci-dessous seulement ... c++ vous devez faire un tableau de chars puis utiliser une copie de chaîne de caractères puis utiliser les fonctions de tokenizor de chaîne de caractères ... c++ a rendu beaucoup plus difficile de faire quoi que ce soit
#include <iostream>
#include <fstream>
#include <cstring>
#define TRUE 1
#define FALSE 0
typedef int Bool;
using namespace std;
Bool PalTrueFalse(char str[]);
int main(void)
{
char string[1000], ch;
int i = 0;
cout<<"Enter a message: ";
while((ch = getchar()) != '\n') //grab users input string untill
{ //Enter is pressed
if (!isspace(ch) && !ispunct(ch)) //Cstring functions checking for
{ //spaces and punctuations of all kinds
string[i] = tolower(ch);
i++;
}
}
string[i] = '\0'; //hitting null deliminator once users input
cout<<"Your string: "<<string<<endl;
if(PalTrueFalse(string)) //the string[i] user input is passed after
//being cleaned into the null function.
cout<<"is a "<<"Palindrome\n"<<endl;
else
cout<<"Not a palindrome\n"<<endl;
return 0;
}
Bool PalTrueFalse(char str[])
{
int left = 0;
int right = strlen(str)-1;
while (left<right)
{
if(str[left] != str[right]) //comparing most outer values of string
return FALSE; //to inner values.
left++;
right--;
}
return TRUE;
}
Eh bien, techniquement, tu peux
typedef struct { char xx[18]; } arr_wrap;
char array1[18] = "abcdefg";
char array2[18];
*((arr_wrap *) array2) = *((arr_wrap *) array1);
printf("%s\n", array2); /* "abcdefg" */
mais ce ne sera pas très beau.
A moins que vous n'utilisiez le préprocesseur C
#define CC_MEMCPY(DESTARR, SRCARR, ARRSIZE) \
{ struct _tmparrwrap_ { char xx[ARRSIZE]; }; *((struct _tmparrwrap_ *) DESTARR) = *((struct _tmparrwrap_ *) SRCARR); }
Vous pouvez alors le faire :
char array1[18] = "abcdefg";
char array2[18];
CC_MEMCPY(array2, array1, sizeof(array1));
printf("%s\n", array2); /* "abcdefg" */
Et cela fonctionnera avec n'importe quel type de données, pas seulement char
:
int numbers1[3] = { 1, 2, 3 };
int numbers2[3];
CC_MEMCPY(numbers2, numbers1, sizeof(numbers1));
printf("%d - %d - %d\n", numbers2[0], numbers2[1], numbers2[2]); /* "abcdefg" */
(Oui, le code ci-dessus est accordé pour travailler toujours et c'est portable)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.