Tak więc mam ciąg znaków, który ma określoną liczbę bajtów (lub długość). Mówię bajty, ponieważ na końcu łańcucha nie ma żadnego NULL terminatora. Chociaż wiem, jak długi jest sznur. Normalnie, jak wszyscy wiemy, po printf("%s", str);
, będzie drukować każdy bajt, aż do uzyskania znaku NULL. Wiem, że nie ma łańcucha C, który nie jest NULL zakończony, ale mam dziwną sytuację, w której przechowuję rzeczy (Nie konkretnie ciągi) i nie przechowuję NULL, ale długość "rzeczy".Jak wydrukować ciąg pierwszych n bajtów, gdy długość łańcucha jest większa niż n?
Oto mały przykład:
char* str = "Hello_World"; //Let's use our imagination and pretend this doesn't have a NULL terminator after the 'd' in World
long len = 5;
//Print the first 'len' bytes (or char's) of 'str'
wiem, że mogą zrobić coś takiego:
printf("%.5s", str);
Ale z tej sytuacji, jestem ciężko kodowania 5 w, choć w mojej sytuacji 5 jest zmienną. Zrobiłbym coś takiego:
printf("%.(%l)s", len, str);
Ale wiem, że nie możesz tego zrobić. Ale daje ci wyobrażenie o tym, co próbuję osiągnąć.
Bardzo podobne pytanie zostało odebrane tutaj: http://stackoverflow.com/a/4777218/2163085 – Ninjammer
SO 4777218 jest związane, ale nieco inaczej (odnosząc się głównie do przypisania raczej niż drukowanie). –
Możesz użyć 'snprintf (format, sizeof (format)," %%.% Ds ", len);' aby utworzyć odpowiedni ciąg formatu, a następnie użyj 'format' w wywołaniu' printf() '. Jeśli robisz 'scanf()', praktycznie musisz to zrobić, jeśli długości wejściowe są różne ('' 'w' scanf() 'jest bardzo różne od' * 'w' printf() '). OTOH, mechanizm 'printf ("%. * S \ n ", len, str)' jest zwykle najbardziej odpowiedni dla 'printf()'. –