Avatar billede _et Praktikant
03. november 2010 - 11:35 Der er 3 kommentarer og
1 løsning

Hvad f... er der galt her?

Jeg har denne c kode der mod forventning konkatanere variablerne CmdMode og Value
Hvorfor eller hvor sker det?

-------------- Kode
void main()
{
char CmdType[3] = "";
char CmdMode[4] = "";
char Value[4]  = "";

    while(1)
    {
        printf("Syntax: Cmd Mode\nSkriv kommando!\n");
        scanf("%s%s", CmdType, CmdMode);

        if (!strcmp(CmdType, "set"))
        {
            printf("Enter Value: ");
            scanf("%s", Value);

            if (!strcmp(CmdMode, "lcd1"))
            {
                //set lcd linje 1 = CmdVal
                printf("Set LCD1 = %s\n", Value);
            }
            else
                printf("Ukendt kommando : %s %s %s\n", CmdType, CmdMode, Value);

        }
    }
}

-------------- Output
Syntax: Cmd Mode
Skriv kommando!

set lcd1
Enter Value:
123
Ukendt kommando : set lcd1123 123
Syntax: Cmd Mode
Skriv kommando!

det
Avatar billede arne_v Ekspert
03. november 2010 - 11:50 #1
char CmdType[3] kan kun indeholde 2 tegn fordi der skal være plads til terminerende nul byte.

Prøv med char CmdType[4] eller måske char CmdType[80].

Tilsvarende for de andre.
Avatar billede _et Praktikant
03. november 2010 - 12:49 #2
Du er som altid en SuperHelt arne_v

Det var problemet, og i bagspejlet naturligt.

Tak og svar
Avatar billede arne_v Ekspert
03. november 2010 - 12:56 #3
svar
Avatar billede segmose Nybegynder
03. november 2010 - 14:06 #4
Se her http://www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html for et af de mange problemer med scanf
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