2 votes

Notation bizarre du format fprintf en C

J'essayais de résoudre une erreur de corruption de pile dans une fonction lorsque j'ai remarqué ce bout de code :

fprintf( fp, "\n%s %3c %12s %2c %12s %2c %12s %2c %12s %2c"
             "%12s %2c %12s", 
             xys_field[3],      x,
             xyzFunc(val1, 0),  x, 
             xyzFunc(val2, 0),  x, 
             xyzFunc(val3, 0),  x,
             xyzFunc(val4, 0),  x, 
             xyzFunc(val5, 0),  x, 
             xyzFunc(val6,0) );

Ce que je demande, c'est à propos de cette ligne "\n%s %3c %12s %2c %12s %2c %12s %2c %12s %2c" "%12s %2c %12s" Je ne comprends même pas comment cela se compile, car je n'ai jamais vu deux formats se suivre comme ça. Merci pour toute aide.

6voto

Amadan Points 41944

Ce ne sont pas deux formats - remarquez l'absence de virgule, ou de tout autre élément les séparant à l'exception de l'espace blanc. C'est la syntaxe C pour la continuation d'une longue chaîne. En C, ils sont équivalents :

"abc" "def"
"abcdef"

Notez que cela ne fonctionne que pour les chaînes littérales ; vous ne pouvez pas concaténer les variables de chaînes. Il s'agit d'une erreur de syntaxe :

string1 string2

2voto

larsmans Points 167484

En C, les littéraux de chaîne juxtaposés (avec seulement des espaces entre eux) désignent une seule chaîne :

int main()
{
    puts("Hello, " "world!");
    return 0;
}

imprime Hello, world! .

1voto

user7116 Points 39829

Cela n'a rien à voir avec les spécificateurs de format et tout à voir avec le fait que le C vous permet de diviser un fichier chaîne littérale en plusieurs parties (par exemple, entre les lignes pour plus de clarté) et le faire concaténer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X