Nie mogłem znaleźć żadnych informacji w wyszukiwarce internetowej. Gdzie powinienem szukać?Pierwsze 10 znaków ciągu?
Odpowiedz
char myString[256]; // Input string
char dest[256]; // Destination string
strncpy(dest, myString, 10);
dest[10] = 0; // null terminate destination
szybkie pytanie, czy mogę zrobić strncpy (myString, myString, 10)? – user2341069
jeśli chcesz obcinać łańcuch do 10 znaków, wtedy put myString [10] = 0; (To biorąc pod uwagę, że myString wskazuje na pamięć, a nie na ciąg lettral) –
@ user2341069 no cant, jak na stronie man "Łańcuchy mogą się nie nakładać, a docelowy ciąg znaków musi być wystarczająco duży, aby otrzymać kopię." Ponieważ myString jest wskaźnikiem do tablicy znaków w pamięci, użycie tego samego wskaźnika dwukrotnie oznacza, że "nakładają się" w pamięci, a zatem spowoduje błąd. Zasadniczo oznacza to, że src nie może być podłańcuchem dst ani na odwrót. – TonyArra
char source[] = "abcdefthijklmn";
char target[100];
strncpy(target, source, 10);
target[10] = '\0'; // IMPORTANT!
Uwaga: "target" to niezainicjowany wskaźnik. – michaelb958
@ michaelb958 Więc co muszę dodać lub zmienić? – tianz
cel nie jest niezainicjowanym wskaźnikiem. target wskazuje na 100 bajtów pamięci w stosie. \ 0 nie jest konieczne, ponieważ strncpy umieści go na –
Jeśli szukasz dobrego źródła, oto przykładem manualu online można użyć: http://linux.die.net/man/3/strncpy
Ważne, aby pamiętać: można też użyć memcpy zamiast strncpy , ale wymaga to dodania własnego bajtu kończącego.
Ostrzeżenie: Jeśli nie ma zerowego bajtu wśród pierwszych n bajtów src, ciąg znaków umieszczony w dest nie będzie zakończony znakiem NUL.
Dlatego memcpy i strncpy działają prawie tak samo, a memcpy jest wydajniejszy i mniej podatny na błędy.
Mam to do pracy w ten sposób.
# 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;
}
Można również użyć sprintf
z formatem .10
precyzji:
#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;
}
Istnieje wiele różnych sposobów, aby osiągnąć swój cel:
Można użyć
snprintf
(najbezpieczniejsze):char source[] = "abcdefthijklmn"; char target[100]; snprintf(target, sizeof target, "%.10s", source);
Można użyć
strncat
jeśli znasz docelowy ma co najmniej 11 elementów:char source[] = "abcdefthijklmn"; char target[100]; *target = '\0'; strncat(target, source, 10);
Można użyć
strlen
imemcpy
(tak samo założenie o wielkości przeznaczenia):char source[] = "abcdefthijklmn"; char target[100]; size_t len = strlen(source); if (len > 10) len = 10; memcpy(target, source, len); target[len] = '\0';
Możesz użyć pętli (to samo założenie co do wielkości miejsca docelowego):
char source[] = "abcdefthijklmn"; char target[100]; size_t i; for (i = 0; i < 10; i++) { target[i] = source[i]; } target[i] = '\0';
Dodając do powyższych odpowiedzi:
char* someString = "your string goes here";
int main()
{
int n = 10;
printf("(%.*s)\n", n, someString);
return 0;
}
- 1. Jak usunąć pierwsze 10 znaków z ciągu znaków?
- 2. Formatowanie ciągu znaków na 10 znaków
- 3. Pierwsze 5 znaków ciągu z zapytaniem mysql
- 4. Wyodrębnij pierwsze 2 znaki w ciągu znaków
- 5. Pierwsze dwa pierwsze słowa z ciągu znaków w php
- 6. MySQL pomiń pierwsze 10 wyników
- 7. Użyj awk, aby znaleźć pierwsze wystąpienie ciągu znaków po ograniczniku
- 8. JavaScript: Jak zdobyć pierwsze 4 cyfry w ciągu znaków?
- 9. Znajdź pierwsze wystąpienie ciągu znaków z wektora <string>
- 10. Zastąp pierwsze wystąpienie podciągu w ciągu znaków w SQL
- 11. Wyodrębnij pierwsze słowo ciągu znaków w zapytaniu do serwera SQL
- 12. Jak zamienić pierwsze wystąpienie ciągu znaków w języku Java?
- 13. Usunąć pierwsze słowo w ciągu znaków w Pythonie?
- 14. Usuń n znaków od początku ciągu znaków
- 15. Zastępowanie wiodących znaków w ciągu znaków
- 16. Pierwsze wartość ciągu z NSArray
- 17. Usuwanie znaków z ciągu znaków
- 18. Kwerenda SQLite Android - Pierwsze 10 rekordów
- 19. Pandy: uzyskać pierwsze 10 elementy serii
- 20. Pierwsze 10 wartości w pliku JSON
- 21. grep bez ciągu znaków
- 22. Tłumaczenie przypisanego ciągu znaków
- 23. Nieokreślona stała ciągu znaków
- 24. Opcje inicjalizacji ciągu znaków
- 25. Parsowanie ciągu znaków
- 26. Funkcje ciągu znaków?
- 27. Wyodrębnianie pierwszych dwóch znaków ciągu znaków (Shell Scripting)
- 28. Ogranicz liczbę zdań w ciągu znaków
- 29. Dopasowywanie sekwencji kolejnych znaków w ciągu znaków
- 30. Zliczanie liczby znaków w ciągu znaków
'man strncpy' tutaj idziesz –
@Ryan albo zostawić je i wspomnieć, że jest to C++, ponieważ on może mieć na myśli, że. – ikegami
Unikaj 'strncpy': https://randomascii.wordpress.com/2013/04/03/stop-using-strncpy-already/ – chqrlie