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 \0barre 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 🙂
InformationsquelleAutor Huy | 2012-04-23