Printf gebruiken met een string die niet op nul eindigt

Stel dat je een string hebt die NIET nullbeëindigd is en je weet de exacte grootte, hoe kun je die string dan afdrukken met printfin C? Ik herinner me zo’n methode, maar ik kan er nu niet achter komen…


Antwoord 1, autoriteit 100%

Er is een mogelijkheid met printf, het gaat als volgt:

printf("%.*s", stringLength, pointerToString);

Het is niet nodig om iets te kopiëren, het is niet nodig om de originele string of buffer te wijzigen.


Antwoord 2, autoriteit 17%

Hier is een uitleg van hoe %.*swerkt en waar het is gespecificeerd.

De conversiespecificaties in een printf-sjabloonstring hebben de algemene vorm:

% [ param-no $] flags width [ . precision ] type conversion

of

% [ param-no $] flags width . * [ param-no $] type conversion

De tweede vorm is om de precisie uit de lijst met argumenten te halen:

U kunt ook een precisie van ‘*’ specificeren. Dit betekent dat het volgende argument in de argumentenlijst (vóór de werkelijke waarde die moet worden afgedrukt) als precisie wordt gebruikt. De waarde moet een int zijn en wordt genegeerd als deze negatief is.

— Uitvoer conversiesyntaxisin de glibc-handleiding

Voor %stekenreeksopmaak heeft precisie een speciale betekenis:

Er kan een precisie worden opgegeven om het maximum aantal te schrijven tekens aan te geven; anders worden tekens in de tekenreeks tot maar niet inclusief het afsluitende null-teken naar de uitvoerstroom geschreven.

— Overig uitvoerconversiesin de glibc-handleiding

Andere handige varianten:

  • "%*.*s", maxlen, maxlen, valzal rechts uitlijnen, spaties ervoor invoegen;
  • "%-*.*s", maxlen, maxlen, valzal links uitvullen.

Antwoord 3, autoriteit 13%

Je kunt een fwrite() gebruiken om te stdouten!

fwrite(your_string, sizeof(char), number_of_chars, stdout);

Op deze manier voert u de eerste tekens (getal gedefinieerd in variabele number_of_chars ) uit naar een bestand, in dit geval naar stdout (de standaarduitvoer, uw scherm)!


Antwoord 4, autoriteit 7%

printf("%.*s", length, string)werkt NIET.

Dit betekent het afdrukken van bytes met een maximale lengte OF een null-byte, afhankelijk van wat zich het eerst voordoet. Als uw niet-null-beëindigde array-of-char null bytes bevat VOOR de lengte, zal printf daarop stoppen en niet doorgaan.


Antwoord 5, autoriteit 2%

printf("%.5s", pointerToNonNullTerminatedString);

De lengte van de tekenreeks is 5.


Antwoord 6

#include<string.h> 
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
 int i;
 for(i=0;i<n;i++)
 {
 printf("%c",str[i]);
 }
 return 0;
}

Ik heb de code bewerkt, hier is een andere manier:

#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}

Other episodes