Avatar billede bjering Nybegynder
02. januar 2005 - 23:48 Der er 9 kommentarer og
1 løsning

va_list fejl under compile i C

ikke så stort et spørgsmål, men hvorfor virker det her ikke?

int log(int timestamp, char *str, ...)
{
  char *Buffer;
  time_t now;
  now = time((time_t *)NULL);
 
  va_list ap; //args list
  va_start(ap, str);

  Buffer = malloc(strlen(str)+strlen(ap)+1);
  vsprintf(Buffer, str, ap); //copy it to buffer
  va_end(ap);
 
  if(logfile == NULL) //just check
      return -1;

  if(timestamp == 1)
  {
        fprintf(logfile, "<br><font color=\"#000000\">[%s] %s</font>", ctime(&now), Buffer);
  }
  else
  {
        fprintf(logfile, "<br><font color=\"#000000\">%s</font>", ctime(&now), Buffer);
  }
}

jeg får fejlene :

error C2275: 'va_list' : illegal use of this type as an expression
    C:\Programmer\Microsoft Visual Studio\VC98\INCLUDE\stdio.h(97) : see declaration of 'va_list'
error C2146: syntax error : missing ';' before identifier 'ap'
error C2065: 'ap' : undeclared identifier

jeg kan ikke se nogen fejl nogensom helst steder....

nogen der kan se fejlen ???
Avatar billede bjering Nybegynder
02. januar 2005 - 23:50 #1
okay fiksede lige nogen fejl, men nu får jeg

ogging.obj : error LNK2001: unresolved external symbol _va_end
Logging.obj : error LNK2001: unresolved external symbol _va_start
Avatar billede bjering Nybegynder
02. januar 2005 - 23:50 #2
ups skulle have været

Logging.obj : error LNK2001: unresolved external symbol _va_end
Logging.obj : error LNK2001: unresolved external symbol _va_start
Avatar billede bertelbrander Novice
02. januar 2005 - 23:58 #3
Hvis du flytter denne op i starten af funktionen:
  va_list ap; //args list

Og inkluderer:
#include <stdarg.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>

Burde det kompilere.
Avatar billede bjering Nybegynder
02. januar 2005 - 23:59 #4
ups tror det virker nu, manglede at include stdarg.h
Avatar billede bertelbrander Novice
03. januar 2005 - 00:03 #5
Man skal sætte warning level til 4 for at få en warning for kald af funktioner unden prototyper med Visual C++ (ved C kode). Jeg ved dog ikke hvor den får va_list fra.
Avatar billede bjering Nybegynder
03. januar 2005 - 01:56 #6
okay du har fortjent point'sne, men lige en sidste hvis du har tid:

int packetlog(int len, const unsigned char *buf)
{
    char logstring[1500];
    char tmp[32];
    char print[16];
    int offset;
    log(0, "<font color=\"#3B3C3C\">");

    for (offset = 0; offset < len;)
    {
        _snprintf(logstring, 1500, "[  DATA  ] (0x%.4x) ", int(offset/16)*16);

        int loffset;
        for (loffset = 0; (loffset < 16) && (offset < len); loffset++)
        {
            _snprintf(tmp, 32, " %.2X", buf[offset]);
            if (isprint(buf[offset]))
                print[loffset] = buf[offset];
            else
                print[loffset] = '.';
            strcat(logstring, tmp);
            offset++;
        }
        for (; loffset < 16; loffset++)
        {
                strcat(logstring, "  ");
                print[loffset] = 0;
        }
        strcat(logstring, "  ");
        strcat(logstring, print);
        strcat(logstring, "<br>");
        log(0, logstring);
        log(0, "</font><br>");
    }
    log(0, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<hr width=\"300\"><br>");
}

error C2059: syntax error : 'type'
error C2143: syntax error : missing ';' before 'type'

den fatter jeg ikke lige helt, og jeg har prøvet mange ting... virker den ikke i C (det er c++ kode jeg er ved at lave om til C)
Avatar billede bjering Nybegynder
03. januar 2005 - 01:59 #7
ups, det er self den her linie det er galt med

_snprintf(logstring, 1500, "[  DATA  ] (0x%.4x) ", int(offset/16)*16);
Avatar billede bjering Nybegynder
03. januar 2005 - 02:19 #8
har fundet ud af det, skulle bare rykke int loffset; op til de andre
Avatar billede bertelbrander Novice
03. januar 2005 - 19:55 #9
Jeg samler ikke på point.
Avatar billede bjering Nybegynder
03. januar 2005 - 22:24 #10
k
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB