Je n'ai pu trouver aucune information avec une recherche sur le Web. Où devrais-je chercher?
char myString[256]; // Input string
char dest[256]; // Destination string
strncpy(dest, myString, 10);
dest[10] = 0; // null terminate destination
char source[] = "abcdefthijklmn";
char target[100];
strncpy(target, source, 10);
target[10] = '\0'; // IMPORTANT!
Ajoutant aux réponses ci-dessus:
char* someString = "your string goes here";
int main()
{
int n = 10;
printf("(%.*s)\n", n, someString);
return 0;
}
Je dois le faire fonctionner comme ça.
# include <stdio.h>
# include <string.h>
//Strings. String lenght terminator.
//KHO2016.no1. mingw (TDM-GCC-32) . c-ansi .
int main ()
{
//declare
char src_str[20],dst_str[10];
//valuate
printf ("Enter a sentance of 20 letters\n");
gets (src_str);
strcpy (dst_str,src_str);
//calculate
dst_str [10] ='\0'; // from the "www.stack overflow"
printf ("%s",dst_str);
printf ("\n");
//terminate
return 0;
}
Si vous recherchez une bonne source, voici un exemple de page de manuel en ligne que vous pouvez utiliser: http://linux.die.net/man/3/strncpy
Important à noter: vous pouvez également utiliser memcpy au lieu de strncpy, mais cela vous oblige à ajouter votre propre octet de terminaison null.
Avertissement: S'il n'y a pas d'octet null parmi les n premiers octets de src, la chaîne placée dans dest ne sera pas terminée par la valeur NULL.
Par conséquent, memcpy et strncpy fonctionnent presque de la même manière ici, et memcpy est plus efficace et moins sujet aux erreurs.
Vous pouvez également utiliser sprintf
avec le format de précision .10
:
#include <stdio.h>
#include <string.h>
int main(void)
{
char source[] = "abcdefghijklmnopqrstuvwxyz";
char dest[11];
memset(dest, '\0', sizeof(dest));
sprintf(dest, "%.10s", source);
printf("%s", dest); // abcdefghij
return 0;
}
Il y a plusieurs façons d'atteindre votre objectif:
Vous pouvez utiliser snprintf
(le plus sûr):
char source[] = "abcdefthijklmn";
char target[100];
snprintf(target, sizeof target, "%.10s", source);
Vous pouvez utiliser strncat
si vous savez que la destination comporte au moins 11 éléments:
char source[] = "abcdefthijklmn";
char target[100];
*target = '\0';
strncat(target, source, 10);
Vous pouvez utiliser strlen
et memcpy
(même hypothèse sur la taille de la destination):
char source[] = "abcdefthijklmn";
char target[100];
size_t len = strlen(source);
if (len > 10)
len = 10;
memcpy(target, source, len);
target[len] = '\0';
Vous pouvez utiliser une boucle (même hypothèse sur la taille de la destination):
char source[] = "abcdefthijklmn";
char target[100];
size_t i;
for (i = 0; i < 10; i++) {
target[i] = source[i];
}
target[i] = '\0';