2011-05-27 9 views
0

je voudrais copier des données de char* à une autre dernière adresse de char*Impossible de copier le caractère dans la dernière adresse de caractère * (chaîne)?

illustration

var1 -> O 
var2 -> K 

première étape

var1 -> OK 
var2 -> K 

copie var2 à var1

résultat

var1 -> OK

code écrit

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

void timpah(char *dest, char *src, int l_dest, int l_src) 
{ 
    int i = 0; 
    while(i < l_dest) 
    { 
     dest[l_dest+i] = src[l_src+i]; 
    i++; 
    } 
} 

int main() 
{ 

char res[2024]; 
res[1] = 0x4f; 

char a[] = {0x4b}; 


timpah(res,a,1,1); 

printf("%s [%d]\n",res,strlen(res)); 
return 0; 
} 

run

[email protected]:/tmp# gcc -o a a.c 
[email protected]:/tmp# ./a 
[0] 

ques Pourquoi mon code ne fonctionne pas?

Pourquoi mon code ne fonctionne pas? ou existe-t-il une fonction existe déjà pour les exécuter, mais je ne le sais pas encore?

thx pour toute l'attention

+0

Qu'advient-il si vous imprimez res juste après 'res [1] = 0x4F;'? Qu'y a-t-il dans 'res [0]'? –

+0

je suis tout à fait sûr que c'est comme des fautes de frappe, mais lorsque je corrige 'res [1] = 0x4f' à' res [0] = 0x4f' et 'timpah (res, a, 1,1)' à 'timpah (res, a, 1,2) ', le résultat est toujours le même .. une solution? – capede

+0

Que sont l_dest et l_src? Sont-ils censés être des longueurs ou des compensations? –

Répondre

4

Vous ne définissez pas res[0] à tout moment. Si res[0] contient \0 votre chaîne se termine là. Vous êtes probablement en train de rendre les choses plus difficiles qu'elles ne le doivent; vous pouvez toujours utiliser strncpy et strncat.

0

Vous devriez probablement jeter un oeil à strncat(), strncpy(), etc

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

void timpah(char *dest, char *src, int l_dest, int l_src) 
{ 
    int i = 0; 
    while(i < l_dest) 
    { 
     dest[l_dest+i] = src[l_src+i]; 
    i++; 
    } 
} 

int main() 
{ 

char res[2024]; 
res[0] = 0x4f; 


char a[] = {0x4b}; 


timpah(res,a,1,0); 

res[2] = '\0'; 
printf("%s [%d]\n",res,strlen(res)); 
return 0; 
} 
Questions connexes