J'ai écrit le code C suivant pour obtenir une liste de chaînes de l'utilisateur. Mais les chaînes stockées donnent des valeurs bizarres.Les chaînes extraites de l'utilisateur en C sont brouillées
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LENGTH 50
void readInStrings(char* arr[],int n)
{
int i=0;
char line[MAX_STRING_LENGTH];
for(i=0;i<n;i++){
arr[i]=malloc(MAX_STRING_LENGTH);
printf("Enter another string : ");
scanf("%s",&arr[i]);
//fgets(&arr[i],MAX_STRING_LENGTH,stdin);
}
printf("Strings read in correctly.... \n");
printf("Displaying out all the strings: \n");
for(i=0;i<n;i++){
printf("%s\n",&arr[i]);
}
}
void testStringInputs()
{
printf("Enter the number of entries : ");
int n;
scanf("%d",&n);
char* strings[n];
readInStrings(strings,n);
}
Exemple d'entrée:
Entrez le nombre d'entrées: 3
Entrez une autre chaîne: Alladin
Entrez une autre chaîne: Barack Obama
Entrez une autre chaîne: Les chaînes lues correctement .. ..
Affichage de toutes les chaînes:
AllaBaraObama
BaraObama
Obama
Problèmes: 1) Pourquoi une chaîne ne prend pas en tant qu'entrée du tout?
2) Pourquoi les chaînes affichées sont-elles brouillées comme ça?
Le problème est le même si j'utilise gets() ou fgets() à la place de scanf().
fgets est une option beaucoup plus sûre si vous faites la correction qui est donnée dans la réponse. Vous pouvez facilement surcharger le tampon avec scanf (et% s) ou obtient. – jonsca
Si je n'utilise pas l'option & arr [i] dans l'instruction printf, le programme plante. Et le problème reste le même même avec fgets(), les chaînes sortent brouillées. Et une itération de l'entrée pour la boucle est également ignorée. –