Quel est le problème avec mon code? Qu'est-ce que argv[1]?
Je suis en train de demander à l'utilisateur de saisir une chaîne de caractères, donc je vais imprimer la longueur de la chaîne. Mon code est construit réussi. Cependant, quand je suis entré un mot et appuyé sur "enter", le programme continue de s'exécuter. J'ai dû entrer dans un deuxième mot, la longueur de la première chaîne s'affiche. Je suis confus au argv[1]. Quelqu'un peut me donner quelques trucs et astuce sur comment résoudre ce problème? Merci d'avance pour votre temps.
Veuillez noter que je ne suis pas autorisé à utiliser n'importe quelle chaîne de fonction.
int main(int argc, char* argv[]){
char* s=argv[1];
char input[256];
s = input;
printf("Please enter a string: ");
scanf("%s\n", s);
int str_length = 0;
while (s[str_length] != ' int main(int argc, char* argv[]){
char* s=argv[1];
char input[256];
s = input;
printf("Please enter a string: ");
scanf("%s\n", s);
int str_length = 0;
while (s[str_length] != '\0')
{
str_length++;
if (s[str_length] == '\0') break;
}
printf("%d\n", str_length);
return 0;
}
')
{
str_length++;
if (s[str_length] == ' int main(int argc, char* argv[]){
char* s=argv[1];
char input[256];
s = input;
printf("Please enter a string: ");
scanf("%s\n", s);
int str_length = 0;
while (s[str_length] != '\0')
{
str_length++;
if (s[str_length] == '\0') break;
}
printf("%d\n", str_length);
return 0;
}
') break;
}
printf("%d\n", str_length);
return 0;
}
argv[1]
est le premier argument de ligne de commande, mais il n'est pas utilisé dans le présent code; s
est initialement mis au point pour elle, mais avant que la valeur est jamais utilisé, s
est mis au point pour input
.Je ne suis pas vraiment sûr que nous comprenons ce que vous voulez que votre code ne. Pouvez-vous nous donner un exemple d'entrée et de sortie que vous attendez?
Votre contribution peut être composé de plusieurs mots séparés par des espaces? Ou êtes-vous limiter à ce seul mot entrées?
ne modifiez pas votre question sur la base des réponses. il sera discontinue. au lieu d'indiquer clairement avec un "EDIT:"(ou similaire) pour indiquer le changement.
- Je savoir ce qui a mal tourné w/ mon code. Mon problème est résolu. Je vous remercie.
OriginalL'auteur user2203774 | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
argv[]
est le tableau qui contient vos paramètres de ligne de commande,argv[1]
est le premier d'une (autre que la représentation de commande lui-même dansargv[0]
, bien sûr). Vous pouvez l'affecter às
alors immédiatement remplacers
, il n'est donc pas vraiment nécessaire ici.La raison pour laquelle vous êtes d'avoir à entrer deux lignes est le
\n
à la fin de votre format d'entrée. Il exige que tout ce qui peut correspondre au format de chaîne de caractères suivie d'un saut de ligne, d'où le%s\n
est manger votre premier saut de ligne, de sorte quescanf
a revenir pour un autre.%s
sur elle la volonté de résoudre ce problème, mais d'introduire un autre, si ce que vous êtes après est plein ligne d'entrée - il seulement lu le premier espace. Pour une bonne entrée de ligne de la fonction, voir ici.Il n'gamme complète entrée avec protection contre les dépassements de tampon et de détection/nettoyage de lignes qui ont été trop longtemps, quelque chose manquaient cruellement dans le
scanf("%s")
de méthode d'entrée.En outre, la
if
de la déclaration dans lewhile
est superflu ici depuis lewhile
lui-même va attraper la fin de la chaîne, et il fait peu de sens à la foisinput
ets
reportez-vous à la même table (ce serait de sens que si vous avez changés
à un certain point, mais ce n'est pas ce qui se passe ici).Donc, une variante sans la ligne avancée iput fonction pourrait être aussi simple que:
Si vous entrez
Hello
, vous verrez qu'il imprime5
immédiatement. Vous verrez également5
si vous entrezHello Pax
, qui est une des raisons de choisir l'avancée de la fonction d'entrée (l'autre, très important, la raison est d'éviter l'introduction d'une vulnérabilité de dépassement de tampon dans votre programme).OriginalL'auteur paxdiablo
argv est utilisé pour transmettre des processus d'arguments. cela signifie que vous pouvez exécuter votre programme comme
argv[1] est déjà attribué à une valeur de 123. vous n'avez pas à le lire comme vous le faites maintenant. dans votre code , vous l'écrasez la référence de s à une nouvelle chaîne après l'affectation avec argv[1].
OriginalL'auteur Akhilesh Singh
C'est ce que vous voulez
La argv et argc, c'est autre chose comme ceci:
argv[0] = a.exe
argv[1] = 12345
argv est un tableau de (char*), c'est-à-dire bash> un.out A B C argc = 5, argv[0] = un.hors, argv[1] = A, argv[2] = B, argv[3] = C,
c'était juste une suggestion sur la façon dont vous pouvez modifier la réponse de l'améliorer 😉
Tous les droits....:)
OriginalL'auteur Harri Feng
Il suffit de changer le
scanf
ligne:Comme vous l'avez (
scanf("%s\n", s);
), il nécessite un sequnce de caractères se terminant par\n
, puis un autre\n
pour indiquer lorsque la saisie est terminée.OriginalL'auteur Beta