2009-07-13 6 views
0

Je suis en train de itérer char*occultant CStrings dans une boucle

Est-il possible d'aimer réinitialiser ces char* dos lacé à blanc? J'essaie de réinitialiser de 1 et envoyer1.

Y at-il autre chose ne va pas avec mon code .. il est seulement la copie du premier fichier dans mon tableau

for(i = 0; i < 3; i++) 
{ 
    from1 = " "; 
    send1 = " "; 
    from1 = strncat(fileLocation,filesToExport[i],50); 
    send1 = strncat(whereAmI,filesToExport[i],50); 

    CopyFile(from1,send1,TRUE); 
    printf("%s\n",from1); 
    printf("%s",send1); 
} 
+0

qui carboniser les chaînes * ?? chaînes dans le tableau filesToExport? – Naveen

+0

Je suis convaincu que ce code est faux, vous ne pouvez pas réutiliser fileLocation de cette façon. S'il vous plaît voir ma suggeestion ci-dessous – djna

Répondre

1

La façon la plus simple est de mettre le premier octet à 0. Comme ceci:

from1[0] = 0; 
send1[0] = 0; 

C/C++ vérifie la fin d'une chaîne char* par la recherche de l'octet 0. Ça ne se soucie pas de ce qui suit.

0

tu veux dire comme

send1[0] = 0; 
from1[0] = 0; 

?

3

Les chaînes sont nulles, ce qui signifie qu'elles ont un caractère nul à la fin. Vous pouvez définir le premier caractère dans la chaîne à zéro pour tronquer de nouveau à être vide:

from1[0] = '\0'; 

Une autre façon serait de copier une chaîne vide:

strcpy(from1, ""); 
+1

+ 1 pour l'utilisation de «\ 0». –

+0

Je suis totalement d'accord avec Steven. char est le type correct ici. Merci d'utiliser le bon littéral. : D –

+0

Cela mettra une valeur nulle au début de la mise en file, donc la prochaine fois, la boucle sera erronée! Soit mettre la valeur null à la fin du fichier d'origine, soit utiliser un tampon séparé. – djna

1

Pour effacer une chaîne vide, de sorte que strncat() a une chaîne vide à concaténer à, il suffit de faire:

from1[0] = '\0'; 

Ceci définit le premier caractère à terminaison zéro qui indique la fin de chaîne, rendant ainsi la chaîne ont l ength 0. Cela suppose que from1 est un tampon char réel modifiable, mais votre appel à strncat() implique que c'est.

2

Que voulez-vous dire par "vide"? Zéro, espaces ou vide?

Pour remplir une zone de mémoire que vous êtes mieux à l'aide memset(), si

#include <string.h> 

memset(pBuffer, ' ', length); /* Fill with spaces */ 
pBuffer[length] = '\0'; /* Remember to null-terminate manually when using memset */ 

memset(pBuffer, '\0', length); /* Fill with zeroes */ 

pBuffer[0] = '\0'; /* Set first element to null -- effectively set the string 
        * to length 0 
        */ 
1

Vous copiez dans filelocation et whereami. Sont-ils des tampons ou des cordes? Vous pouvez écrire la fin de votre chaîne.

Je pense que vous feriez mieux d'allouer un tampon de taille appropriée

fromLen = strlen(fileLocation); 
fileLen = strlen(filesToExport[i]); 

from1 = malloc(fromLen + fileLen + 1); 

/* add check here that string fits */ 

strcpy(from1, filelocation); 
strcat(from1 + fromLen, filesToExport[i]); 

/** etc **/ 

free(from1); 
Questions connexes