Non sono stato in grado di trovare alcuna informazione con una ricerca sul web. Dove dovrei cercare?Ottenere i primi 10 caratteri di una stringa?
risposta
char myString[256]; // Input string
char dest[256]; // Destination string
strncpy(dest, myString, 10);
dest[10] = 0; // null terminate destination
domanda veloce, potrei fare strncpy (myString, myString, 10)? – user2341069
se si desidera troncare la stringa su 10 caratteri, quindi inserire myString [10] = 0; (Questo dato che myString punta alla memoria e non a una stringa lettral) –
@ user2341069 no non puoi, come per la pagina man "Le stringhe non possono sovrapporsi, e la stringa di destinazione dest deve essere grande abbastanza per ricevere la copia." Poiché myString è un puntatore a un array di caratteri in memoria, l'uso dello stesso puntatore due volte significa che si "sovrappongono" in memoria e quindi causerà un errore. In sostanza, ciò significa che src non può essere una sottostringa di dst o viceversa. – TonyArra
char source[] = "abcdefthijklmn";
char target[100];
strncpy(target, source, 10);
target[10] = '\0'; // IMPORTANT!
Attenzione: 'target' è un puntatore non inizializzato. – michaelb958
@ michaelb958 Quindi cosa devo aggiungere o modificare? L'obiettivo – tianz
non è un puntatore non inizializzato. punti di destinazione a 100 byte di memoria nello stack. il \ 0 non è nessario come strncpy lo metterà –
Se siete alla ricerca di una buona fonte, ecco un esempio di una pagina di manuale on-line è possibile utilizzare: http://linux.die.net/man/3/strncpy
importante notare: si potrebbe anche usare memcpy invece di strncpy , ma richiede di aggiungere il proprio byte che termina con null.
Avviso: se non esiste alcun byte null tra i primi n byte di src, la stringa inserita in dest non verrà terminata con null.
Quindi memcpy e strncpy funzionano quasi allo stesso modo qui, e memcpy è più efficiente e meno incline all'errore.
Ho capito che funziona così.
# 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;
}
è anche possibile utilizzare sprintf
con il formato .10
precisione:
#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;
}
Ci sono molti modi per raggiungere il tuo obiettivo:
È possibile utilizzare
snprintf
(più sicuro):char source[] = "abcdefthijklmn"; char target[100]; snprintf(target, sizeof target, "%.10s", source);
È possibile utilizzare
strncat
se si conosce la destinazione ha almeno 11 elementi:char source[] = "abcdefthijklmn"; char target[100]; *target = '\0'; strncat(target, source, 10);
È possibile utilizzare
strlen
ememcpy
(stessa ipotesi circa il formato di destinazione):char source[] = "abcdefthijklmn"; char target[100]; size_t len = strlen(source); if (len > 10) len = 10; memcpy(target, source, len); target[len] = '\0';
È possibile utilizzare un ciclo (stessa ipotesi sulle dimensioni della destinazione):
char source[] = "abcdefthijklmn"; char target[100]; size_t i; for (i = 0; i < 10; i++) { target[i] = source[i]; } target[i] = '\0';
Aggiungendo alle risposte di cui sopra:
char* someString = "your string goes here";
int main()
{
int n = 10;
printf("(%.*s)\n", n, someString);
return 0;
}
- 1. Come rimuovere i primi 10 caratteri da una stringa?
- 2. Come ottenere i primi cinque caratteri di una stringa
- 3. C serie # stringa di ottenere solo i primi 10 valori
- 4. vi rimangono solo i primi 10 caratteri di una colonna
- 5. Limitazione SED ai primi 10 caratteri di una riga
- 6. Scala: come mascherare i primi N caratteri di una stringa
- 7. Selezionare solo i primi caratteri in una stringa C++
- 8. Espressione regolare estrai i primi tre caratteri da una stringa
- 9. Formattazione stringa a 10 caratteri
- 10. Restituisce primi N caratteri di stringa
- 11. Come ottenere i primi 10 valori in un file JSON
- 12. Javascript: come ottenere i primi 4 numeri in una stringa?
- 13. Come ottenere i primi x caratteri da una stringa, senza tagliare l'ultima parola?
- 14. Smarty stringa substr saltare primi caratteri
- 15. MySQL Select Query - Ottieni solo i primi 10 caratteri di un valore
- 16. Nascondere i primi caratteri x
- 17. Come rimuovere i primi tre caratteri dalla stringa con C?
- 18. Come arrivare primi 5 caratteri dalla stringa
- 19. registro primi 10 in git
- 20. necessario ritagliare i primi 11 caratteri di una stringa in SQL
- 21. Come selezionare i primi 30 caratteri in una query sql?
- 22. come controllare i primi tre caratteri in una variabile?
- 23. Come ottenere tutti i caratteri dopo l'ultimo '-' in una stringa
- 24. MySQL Rimuovere primi due caratteri di tutti i campi
- 25. Come recuperare i primi n caratteri di una variabile in Bash?
- 26. Come rimuovere i primi due e gli ultimi due caratteri in una stringa?
- 27. VBA - Copia i primi tre caratteri da una stringa in un'altra cella
- 28. Come ottenere i primi n elementi di una std :: map
- 29. come rimuovere i primi 3 caratteri da nsstring?
- 30. Come ottenere una stringa tra due caratteri?
'man strncpy' qui si va –
@ Ryan, o lasciare e dire che si tratta di C++ da quando avrebbe potuto significare che. – ikegami
Evita 'strncpy': https://randomascii.wordpress.com/2013/04/03/stop-using-strncpy-already/ – chqrlie