Sscanf函数未重现期望值

我正在用C编写一个程序,其中有多个线程同时运行,并且它必须支持带有rwlocks或互斥锁的解决方案,具体取决于您定义的内容。这里的问题有时是当收到命令时,sscanf返回3(令牌)而不是预期的2,并且当我执行printf命令时,它与sscanf中解析的字符串不同,正如您在代码和输出中所看到的那样下面。预先感谢您的帮助!

我已经尝试过每次删除命令并将其初始化为全0时,将vectorCommands的字符串的memset()设置为0。现在我不知道下一步该怎么做,我一无所知。 WAIT_SEM,WR_LOCK等只是sem_wait,sem_post,pthread_mutex_lock和具有错误检查的解锁功能。

main.c

void insertCommand(char* data) {
    WAIT_SEM(productor);

    WR_LOCK(lockCommandVector);
    memset(inputCommands[productorIndex],MAX_INPUT_SIZE);
    strcpy(inputCommands[productorIndex++],data);
    if(productorIndex >= MAX_COMMANDS) productorIndex = 0;

    POST_SEM(consumers);
    UNLOCK(lockCommandVector);
}
char* removeCommand() {
    WAIT_SEM(consumers);

    WR_LOCK(lockCommandVector);

    char* command;
    command = inputCommands[consumerIndex++];
    if(consumerIndex >= MAX_COMMANDS) consumerIndex = 0;

    if(strcmp(command,"x") == 0){  /* terminate consumer threads */
        memset(inputCommands[consumerIndex],MAX_INPUT_SIZE);
        strcpy(inputCommands[consumerIndex],"x");
        POST_SEM(consumers);
        return(command);
    }

    POST_SEM(productor);

    if(command) return command;
    return NULL;
}

void* applyCommands(void* args){
    while(1){
        const char* command = removeCommand();

        char token;
        char name[MAX_INPUT_SIZE];
        char new_name[MAX_INPUT_SIZE];

        int numTokens = sscanf(command,"%c %s %s",&token,name,new_name);

        if(!(token == 'r' && numTokens == 3) && !(token == 'x' && numTokens == 1) && numTokens != 2){
            printf("%d ",strcmp(new_name,""));
            printf("%d %c %s %s %s",numTokens,token,new_name,command);
            fprintf(stderr,"Error: invalid command in Queue\n");
            exit(EXIT_FAILURE);
        }

applycommands错误中的printf()的输出:

1- 错误:队列中的命令无效 0 3 l鼻烟d鼻烟

2- 错误:队列中的命令无效 0 3 l mart架c

tiankongxiangyun 回答:Sscanf函数未重现期望值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3155750.html

大家都在问