web-dev-qa-db-fra.com

Obtenir les 10 premiers caractères d'une chaîne?

Je n'ai pu trouver aucune information avec une recherche sur le Web. Où devrais-je chercher?

10
user2341069
char myString[256]; // Input string
char dest[256];     // Destination string

strncpy(dest, myString, 10);
dest[10] = 0; // null terminate destination
13
Lefteris E
char source[] = "abcdefthijklmn";
char target[100];

strncpy(target, source, 10);
target[10] = '\0'; // IMPORTANT!
4
tianz

Ajoutant aux réponses ci-dessus:

char* someString = "your string goes here";

int main() 
{
  int n = 10;
  printf("(%.*s)\n", n, someString);

  return 0;
}
2
Ashish Srivastava

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;
   }
0
Radar Blue

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.

0
TonyArra

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;
}
0
w.b

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';
    
  • Vous pourriez, mais ne devriez pas utiliser strncpy()

0
chqrlie