0

どういうわけか、私のswitchステートメントは私のケースのいずれにも当てはまりませんが、1つにまとめるべきではありませんか?(私はhttps://stackoverflow.com/a/4014981/960086を参照として使用しています)。

出力はなく、その後アプリケーションはブロックされます。

#include <stdio.h>

#include <stdlib.h>

#define BADKEY -1
#define string1 1
#define string2 2
#define string3 3
#define string4 4
char *x = "string1";

typedef struct {char *key; int val; } t_symstruct;

static t_symstruct lookuptable[] = {
    { "string1", string1 }, { "string2", string2 }, { "string3", string3 }, { "string4", string4 }
};

#define NKEYS (sizeof(lookuptable)/sizeof(t_symstruct))

int keyfromstring(char *key) {
    int i;
    for (i=0; i < NKEYS; i++) {
        t_symstruct *sym = lookuptable + i;
        printf("before: \n");
        if (strcmp(sym->key, key) == 0) { //creates the ERROR
            printf("inside: \n");
            return sym->val;
        }
        printf("after: \n");
    }
    return BADKEY;
}

void newFunction(char *uselessVariable) {
    printf("keyfromstring(x): %i \n", keyfromstring(x));
            switch(keyfromstring(x))      {
                case string1:
                   printf("string1\n");
                   break;
            case string2:
                   printf("string2\n");
                   break;
            case string3:
                   printf("string3\n");
                   break;
            case string4:
                   printf("string4\n");
                   break;
           case BADKEY:
                printf("Case: BADKEY \n");
                break;
        }
}

int main(int argc, char** argv) {
    newFunction(line);
    return (EXIT_SUCCESS);
}
4

2 に答える 2

5
  • 「 string1 lookuptable[]」の後にスペースがあり、他のエントリと矛盾しています。私はあなたがこれを望まなかったような気がします。
  • インクリメントkeyfromstring()sym間違っています(これによりセグメンテーション違反が発生します)。と置換する:

int keyfromstring(char *key)
{
    int i;
    for (i=0; i < NKEYS; i++) {
        t_symstruct *sym = lookuptable + i;
        if (strcmp(sym->key, key) == 0)
            return sym->val;
    }
    return BADKEY;
}

また

int keyfromstring(char *key)
{
    int i;
    for (i=0; i < NKEYS; i++) {
        if (strcmp(lookuptable[i].key, key) == 0)
            return lookuptable[i].val;
    }
    return BADKEY;
}

  • あなたのprintf("Case: nothing happen\n");中に入れてくださいdefault
于 2013-03-08T14:14:54.093 に答える
-3

あなたはそれをそのようにすることはできません。switch整数(定数)に対して機能し、文字列はそれらのいずれでもありません。その上、ここを見てください、このトピックはすでに議論されています。

于 2013-03-08T13:49:48.293 に答える