strupr () e strlwr () nella parte string.h sono dello standard ANSI?

Stavo cercando questo su internet e in ogni posto con le funzioni di string.h questi due non sono menzionati.

È perché cosa? Non sono in ogni compilatore?

Sono funzioni non standard dalla libreria C di Microsoft. MS li ha deprecati in favore dei _strlwr() ribattezzati _strlwr() e _strupr() :

  • strlwr() doc
  • strupr() doc

Si noti che i documenti MS affermano che sono funzioni POSIX, ma per quanto posso dire non sono mai stati.

Se hai bisogno di usarli su una toolchain non MS, sono abbastanza facili da implementare.

 char* strlwr(char* s) { char* tmp = s; for (;*tmp;++tmp) { *tmp = tolower((unsigned char) *tmp); } return s; } 

Queste funzioni non sono funzioni standard C. Quindi è definito dall’implementazione se sono supportati o meno.

Queste funzioni non sono standard e infatti le loro firme sono rotte / non utilizzabili. Non è ansible eseguire una mapping caso per caso una stringa sul posto in generale, poiché la lunghezza può variare in base al caso.