Je suis un débutant C et c'est mon code C: qui montrera une erreur. Alors, comment puis-je retourner une chaîne en code C? P> p>
6 Réponses :
Malheureusement, il n'y a aucun moyen de le faire.
Vous pouvez ajouter quelque chose à la fin de votre programme C comme: p>
Vous pourriez être capable d'utiliser des variables d'environnement pour cela. Pas sûr cependant. P>
Peut-être découvrir et Mettez à jour votre réponse (pas ici dans les commentaires)?
Si vous souhaitez renvoyer une chaîne d'une fonction (autre que principal code>), vous devez faire quelque chose comme ça. #include <stdio.h>
const char * getString();
int main()
{
printf("Hello, World!\n");
printf("%s\n", getString());
return 0;
}
const char * getString()
{
const char *x = "abcstring";
return x;
}
Attention, les littéraux strings sont Const - mais le compilateur ne le sais pas toujours!
@Martin Beckett, que diriez-vous d'ajouter const code> avant la déclaration? Tels que const char * code>.
@Martinbeckett, que voulez-vous dire par "mais le compilateur ne le sais pas toujours" i>?
@Pacerier Il n'y a pas de règles (AFAIK) sur ce qui arrive à la mémoire occupée par la chaîne lorsque cette fonction sort. Selon votre architecture, il peut être en lecture seule sur le segment de programme ou dans la mémoire de données. Donc, même si cela "fonctionne", ne comptez pas dessus.
@Martinbeckett, dis-tu que lorsque nous lisons la chaîne (la ligne printf ("% s \ n", getstring ()); code>), nous pouvons réellement obtenir des données de déchets?
Merci !!, ça m'aidez!
Vous ne retournez pas de chaîne. Applications Sortie avec un code de sortie entier. p>
classiquement, la sortie avec un retour de 0 indiquera toujours que votre application est sortie sans erreur / complétée. Vous retournez un entier autre que 0 pour montrer que votre demande est excitée anormalement. P>
Vous pouvez lancer une exception et la gérer avec une méthode de journalisation plus élevée dans la pile d'appels, ou vous pouvez simplement retourner quelque chose d'autre que 0 et vous assurer que vous l'aviez documenté dans vos notes de version sur le moyen d'entier d'erreur. < / p>
Vous pouvez le faire d'une manière similaire à scanf code>. En d'autres termes: void foo(char **value_to_return) {
*value_to_return = malloc(256); // Store 256 characters
strcpy(*value_to_return, "deposited string");
}
int main() {
char *deposit;
foo(&deposit);
printf("%s", deposit);
return 0;
}
La magie est dans le mot clé Ce code prend un caractère à chaque fois, puis les concaténe dans une chaîne et l'enregistre dans un fichier: P> statique code> qui conserve la teneur en mémoire de la chaîne même après la fin de la fonction. (Vous pouvez le considérer comme étendre la portée de la variable.) #include <stdio.h>
#include <conio.h>
char* strbsmallah ()
{
static char input[50];
char position = 0, letter;
scanf("%c", &letter);
while (letter != '~') { // Press '~' to end your text
input[position] = letter;
++position;
scanf("%c", &letter);
}
input[position] = '\0';
char *y;
y = (char*) &input;
//printf("%s\n ", y);
return y;
}
int main() {
printf("\n");
FILE *fp;
fp = fopen("bsmallah.txt", "w+");
fprintf(fp, strbsmallah());
while (!_kbhit())
;
return 0;
}
Mais il écrasera la mémoire si vous tapez plus de 50 caractères (?).
Qu'est-ce que _kbhit ()? Est-il spécifique à une plate-forme particulière (disons, Windows)?
Main code> doit renvoyer unint code>, non ifs, ands ou saut. Qu'est-ce que vous attendez exactement à cette chaîne? (Bien que la "chaîne" soit vraiment une constante de caractère car elle utilise des délimiteurs' code> au lieu de" code>)Une erreur? Copiez le message d'erreur exactement. Quoi, précisément, es-tu attendu?
Il manque un point-virgule après la déclaration de retour; cela est susceptible d'être l'erreur. Retourner
'SSS' code> à partir deprincipal code> fonctionnera techniquement (puisqu'il s'agit d'unint code>), mais ce n'est certainement pas ce qui est souhaité.Cette question doit être clarifiée, de nombreuses réponses ici supposent que vous demandez: "Comment puis-je retourner une chaîne au système d'exploitation en C?"
Dupliqué possible de renvoyer C chaîne de la fonction