RT, si j'attribue directement une valeur à la chaîne à afficher en utilisant char* et que je code directement en dur la longueur de la chaîne dans RETURN_STRINGL, le résultat sera affiché pendant l'exécution, mais ensuite un "erreur de segmentation, le noyau a été vidé" sera signalé . Mais si vous utilisez la fonction spprintf officiellement recommandée pour attribuer une valeur et obtenir la longueur, aucune erreur ne sera signalée. Pourquoi cela ?
PS : Dans le code de l'image, si le deuxième paramètre de RETURN_STRINGL est modifié à 2, la même erreur sera signalée. Je l'ai changé en 3 car je pensais que PHP inclurait le 0 à la fin, mais après l'avoir essayé. quelques fois, j'ai trouvé que ça ne devrait pas être le problème ici
La chaîne renvoyée par RETURN_STRINGL doit être la mémoire allouée par la gestion de la mémoire PHP. Elle sera publiée par PHP lui-même après la fin. spprintf est la gestion de la mémoire PHP utilisée. Dans ce cas, vous pouvez définir le troisième paramètre sur 1, ce qui signifie que PHP alloue lui-même la mémoire correspondante pour copier une chaîne.