Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
En seconde année de licence d'informatique, cours magistral de langage C :
« La taille nécessaire pour stocker une chaîne de caractères s en mémoire est strlen(s) »

Heu… +1 peut-être pour le final ?

Enseigner le C et faire des erreurs de débutants… PEBKAC.
PEBKAC #9269 proposé par Walbum le 15/01/2014 | 25 commentaires | 👍🏽 👎🏽 +142
C'est déjà pas mal qu'il parle d'occupation mémoire et pas de nombre de caractères de la chaîne.
Commentaire #125405 écrit par aDev le 15/01/2014 à 13h04 | 👍🏽 👎🏽
Peut-être un raccourci malheureux sur le thème : Mon string tiens dans un tableau d'indice maximal s, donc pas besoin de le définir en xl
Pars faire les soldes sur la lingerie
Commentaire #125408 écrit par ygnobl le 15/01/2014 à 13h16 | 👍🏽 👎🏽
des erreurs de débutants
"des erreurs de débutant"
FTFY
Commentaire #125410 écrit par Alfred456654 le 15/01/2014 à 13h19 | 👍🏽 👎🏽
Si tu traduis "char" par caractère, ça retourne bien le nombre de caractères utilisés.


Et si on veux enculer des mouches il est techniquement possible de stocker la chaine de caractère sans son caractère null, il faut juste une autre méthode pour en connaitre la longueur (et le rajouter à chaque fois qu'on veux utiliser une fonction standard).
Bon on est d'accord que faire cette erreur avec des débutants alors que même si on leur dit que c'est un des pièges de la manipulation de chaine de caractères en C ils arriveront a se planter dessus...
Commentaire #125438 écrit par Bear'sBeard le 15/01/2014 à 16h19 | 👍🏽 👎🏽
Ça ne dépend pas aussi de l'encodage ? Ca fait un moment que je n'ai pas fait de C, donc je dis peut être une grosse connerie.
Commentaire #125441 écrit par aDev le 15/01/2014 à 16h56 | 👍🏽 👎🏽
J'ai googlé un peu, et il semble que j'avais bien raison :

http://www.developpez.net/forums/d824145/c-cpp/c/strlen-utf-8-a/
Commentaire #125442 écrit par aDev le 15/01/2014 à 17h06 | 👍🏽 👎🏽
Sauf que le type "char" veux dire caractère et strlen renvoie bien de nombre de "char" de la chaine.
C'est certes un reliquat de l'ASCII mais on continu d'appeler ça un "char" même si certains codage on besoin de plusieurs "char" pour stocker un symbole.
Commentaire #125446 écrit par Bear'sBeard le 15/01/2014 à 17h16 | 👍🏽 👎🏽
tient* (GN, ne me flagellez pas, par pitié)
Commentaire #125448 écrit par ygnobl le 15/01/2014 à 17h28 | 👍🏽 👎🏽
Oui mais du coup aujourd'hui avec l'UTF-8 (et pas que) il vaut mieux dire aux élèves que strlen ne retourne pas un nombre de caractères mais bien un nombre d'octets. CQFD.
Commentaire #125449 écrit par aDev le 15/01/2014 à 17h30 | 👍🏽 👎🏽
S'il ne te tiens pas rigueur pour le tiens, il sera plus sévère pour le pars à mon avis.
Commentaire #125463 écrit par Aaargh!!! le 15/01/2014 à 18h14 | 👍🏽 👎🏽
FTFY ? C'est dans quel langage de prog ça ?



(Ok, je me doute que c'est pas de la prog, mais c'est pas la 1re fois que je lis ça... et je ne sais pas ce que c'est)
Commentaire #125464 écrit par Aaargh!!! le 15/01/2014 à 18h15 | 👍🏽 👎🏽
J'ai verifié, c'est pas du LOLCODE (ça aurais pu)

Sinon FTFY = Fix This For You, une variante du FYP (Fix Your Post).
Commentaire #125477 écrit par Bear'sBeard le 15/01/2014 à 18h53 | 👍🏽 👎🏽
Ton string en c sur internet.
Commentaire #125505 écrit par spidermoon le 15/01/2014 à 21h35 | 👍🏽 👎🏽
Cool, on peut donc écrire IMHO, FYI GN FTFY. (Fouet en supplément)
Commentaire #125506 écrit par spidermoon le 15/01/2014 à 21h38 | 👍🏽 👎🏽
haha une fois j'ai vu quelqu'un qui pensait trouver la longueur de sa chaîne de caractères comme ça :
char * mystring = "foo";
 int size =  sizeof(mystring);

(dernière année de master je précise)
Commentaire #125517 écrit par yomama le 15/01/2014 à 22h52 | 👍🏽 👎🏽
strlen() ne peut pas être utilisée avec autre chose qu'une chaîne de caractères ASCII, constituée de char (1 octet), et donc pas avec une chaîné encodée en UTF-8. strlen renvoie toujours un nombre de caractères. Pour des widechar (2 octets), il y a wcslen().
Commentaire #125520 écrit par n0p le 16/01/2014 à 00h02 | 👍🏽 👎🏽
Ok, merci, connaissais pas cette variante.
Commentaire #125547 écrit par Aaargh!!! le 16/01/2014 à 09h15 | 👍🏽 👎🏽
Hein ? Mais pourquoi il a fait ça ? Même moi je vois de suite que c'est nul.
Commentaire #125549 écrit par Aaargh!!! le 16/01/2014 à 09h16 | 👍🏽 👎🏽
Il cherchait la taille de sa chaîne, il a vu une fonction sizeof(), il n'a pas été voir ce qu'elle fait vraiment avant de l'utiliser et s'est dit que c'était bon.
Commentaire #125573 écrit par Acorah le 16/01/2014 à 10h19 | 👍🏽 👎🏽
Bah pour le coup, dans ton exemple, ça marche. Contrairement à :
char mystring[10] = "foo";
 int size =  sizeof(mystring);
Commentaire #125582 écrit par Bear'sBeard le 16/01/2014 à 10h45 | 👍🏽 👎🏽
hein?
Commentaire #125587 écrit par yomama le 16/01/2014 à 11h18 | 👍🏽 👎🏽
char * mystring = "foo";
 int size =  sizeof(mystring);


size = 4 : "foo/0"

char mystring[10] = "foo";
 int size =  sizeof(mystring);


size = 10.

Mais on est d'accord que c'est sans doute un coup de bol que ça fasse ce qu'il veux.
Commentaire #125589 écrit par Bear'sBeard le 16/01/2014 à 11h55 | 👍🏽 👎🏽
sizeof() ne renvoie-il pas la taille en octet du type de variable?

Dans ce cas ce serait le nombre d'octets que prend le pointeur "mystring" dont la taille me semble-t'il peut varier en fonction du type d'architecture (16, 32, 64 bits, etc.)?
Commentaire #125605 écrit par Jema le 16/01/2014 à 13h40 | 👍🏽 👎🏽
Ok, en effet je mérite des baffes...
Le 4 que j'obtenais correspondait à la taille du pointeur.

Le code qui marcherai serait :
char mystring[] = "foo";
 int size =  sizeof(mystring);
Commentaire #125615 écrit par Bear'sBeard le 16/01/2014 à 14h33 | 👍🏽 👎🏽
Oups, j'étais parti faire des soldes sur l'aurtaugarf
Commentaire #125655 écrit par ygnobl le 16/01/2014 à 20h11 | 👍🏽 👎🏽