Essayez d'ajouter le caractère nul à la fin d'un tableau de char avant de strcpy
De travail sur un problème où j'ai commencé à lire des données à partir d'un fichier dans une structure à l'aide .
Le fichier est organisé de sorte qu'il y a un nom, quelques lignes de l'art ASCII terminée par un # et une notation. Voici un exemple
Sample Name
( S )
( S )
# 5
J'ai mon struct configurer comme ceci:
typedef struct
{
char* name;
char* art;
int rating;
}CASE;
Quand je compile ma source, je reçois les mises en garde suivantes:
multiple-character character constant
overflow in implicit constant conversion
sur cette ligne buffer[artCount] = '/0';
où artCount est strlen de la mémoire tampon.
Je suis simplement en ajoutant un caractère nul à la fin d'un tableau de caractères, afin de préparer un strcpy. Est-il quelque chose de mal avec ma logique ici?
fonction:
/*CASE* all is an empty array of CASE structs*/
void readFile(FILE* FPin, CASE* all)
{
CASE* walker = all;
int count = 0;
int artCount;
char buffer[160];
if((FPin = fopen("art.txt", "r")) == NULL)
{
printf("Error opening file.");
exit(100);
}
walker->name = (char*)malloc(sizeof(char)*100);
/*Reads in the name*/
while(fgets(walker->name, 100, FPin) != NULL)
{
/*Reads in the art*/
while(fscanf(FPin, "%c", buffer) != '#');
artCount = strlen(buffer);
buffer[artCount] = '/0';
walker->art = (char*)malloc(sizeof(char)*160);
strcpy(walker->art, buffer);
/*Reads in the rating*/
fscanf(FPin, "%d", &walker->rating);
count++;
walker++;
}
fclose(FPin);
return;
}
- La séquence d'échappement est
\0
– barre oblique inverse zéro sizeof(char)
est garantie 1 par la norme.- 6 ans et personne n'a souligné que
artCount = strlen(buffer); buffer[artCount] = '\0'
(même avec le droit `\`) ne fait rien? - C'est si vieux et je n'ai pas touché C depuis ce projet de classe 😛 Merci pour elle de toute façon
- Pas vraiment pour vous, plus pour les futurs lecteurs de la question. J'étais plutôt surpris 🙂
Vous devez vous connecter pour publier un commentaire.
La constante doit être
'\0'
(avec une barre oblique inverse), pas'/0'
(avec une barre oblique).