J'essaye de mettre en place une liste de noms de fichiers pour un paramètre à SHFileOperation. Je veux être en mesure de concaténer un nom de fichier sur le tableau char, mais je ne veux pas me débarrasser du caractère de fin. par exemple, je veux ceci:
C: \ ... \ 0E: \ ... \ 0F: \ ... \ 0 \ 0
quand j'utilise strcat(), il écrase le null, donc il ressemble à
C: \ ... E: \ ... F: \ ... 0 \
Y at-il un moyen facile de le faire? ou vais-je devoir coder un nouveau strcat pour moi-même?Comment concaténer des chaînes de 2 C sans écraser les caractères Null de terminaison?
2
A
Répondre
1
Le code est assez simple. Utilisez un pointeur d'aide pour suivre où la chaîne suivante devrait commencer. Pour mettre à jour le pointeur du suivi, incrémentez la longueur de la chaîne +1:
const char *data[] = { "a", "b", "c" };
size_t data_count = sizeof(data)/sizeof(*data);
size_t d;
size_t buffer_size;
char *buffer;
char *next;
// calculate the size of the buffer
for (d = 0; d < data_count; ++d)
buffer_size += (strlen(data[d] + 1);
buffer_size += 1;
buffer = malloc(buffer_size);
// Next will track where we write the next string
next = buffer;
for (d = 0; d < data_count; ++d)
{
strcpy(next, data[d]);
// Update next to point to the first character after the terminating NUL
next += strlen(data[d]) + 1;
}
*next = '\0';
1
Utilisez memcpy.
memcpy(dest, src1, strlen(src1)+1);
memcpy(&dest[strlen(src1)+1], src2, strlen(src2)+1);
0
Utilisation de la GNU stpcpy()
peut être un peu plus élégant, si vous savoir à l'avance la « longueur » maximale du tableau de caractères résultant.
char *src[] = {"C:\\foo", "E:\\bar", "F:\\foobar", 0};
char dst[MY_MAX_LEN], *p = dst;
int i;
for (i = 0; src[i]; i++)
p = stpcpy(p, src) + 1;
*p = 0;
assert(p < dst + sizeof dst);
Si nécessaire, stpcpy() peut être définie comme:
char *stpcpy(char * restrict dst, const char * restrict src)
{
return strcpy(dst, src) + strlen(src);
}
0
il suffit d'utiliser strcat pour ajouter à la chaîne d'origine, mais ajouter un au décalage de sorte que vous êtes sans passer par 0 de la chaîne précédente terminateur.
// an example
char testString [256];
strcpy (testString, "Test1");
strcat (testString + strlen(testString)+1, "Test2");
strcat (testString + strlen(testString)+1, "Test3");
testString va maintenant contenir "Test1 \ 0Test2 \ 0Test3 \ 0"
Questions connexes
- 1. Comment concaténer 2 chaînes dans NSIS
- 2. Comment concaténer des caractères dans Java?
- 3. Commutateur avec des chaînes de caractères C#
- 4. Concaténer les chaînes dans UrlMappings?
- 5. Comment concaténer deux chaînes de caractères larges en utilisant une macro en C?
- 6. Macro pour concaténer deux chaînes en C
- 7. Comment concaténer les listes en C#?
- 8. Comment concaténer les chaînes de manière concise dans Tcl?
- 9. Comment concaténer des chaînes dans VBA
- 10. Impossible d'imprimer tableau de chaînes sans obtenir des caractères ordures
- 11. Comment concaténer des chaînes avec des variables dans PowerShell?
- 12. C#: Argument de validation: les chaînes null/vide
- 13. Méthode correcte d'initialisation d'un tableau de chaînes à terminaison NULL dans C
- 14. Null ou terminaison canari
- 15. Comment concaténer des chaînes dans un fichier de commandes Windows?
- 16. dans les chaînes C, NULL, espaces blancs
- 17. Comment puis-je concaténer 2 chaînes de ressources ensemble dans une page aspx
- 18. comment concaténer deux chaînes _T?
- 19. C#: nouvelle ligne et caractères de tabulation dans les chaînes
- 20. Chaînes et codage de caractères en C++
- 21. Comment concaténer des chaînes avec des valeurs binaires en python?
- 22. Comment concaténer des vars dans une image programmée c?
- 23. SQLite3: Insérer BLOB avec des caractères NULL en C++
- 24. S'il vous plaît expliquer ce comportement avec des tableaux de caractères/chaînes de caractères dans C
- 25. Algorithme de comparaison des caractères dans les chaînes
- 26. bash scripting.Copier des fichiers sans écraser
- 27. Vérifier si 2 chaînes contiennent les mêmes caractères?
- 28. dossier Copie sans écraser
- 29. Comparaison de tableaux de caractères et de littéraux de chaînes en C++ sans cstring
- 30. Comment comparer les chaînes de caractères de manière optimale?
je mets en doute votre besoin de le faire. Cela dit, il n'y a pas de façon standard de le faire en dehors de l'écriture de votre propre implémentation. – jer