如何对字符串问题进行模运算?

时间:2019-09-09 22:44:02

标签: c

我正在尝试对我的伪数据msg使用模运算,如果味精多变8 msg%8,然后给我printf("[-] Error: Size too long");的输出,否则就可以了,但是使用直接使用msg%8并不意味着可以解决该问题?

错误输出

Error C2296 '%': illegal, left operand has type 'char [1000]'

int main() {
    char buf[8];
    char msg[1000];
    printf("Enter cookie:\n");
    scanf("%s", buf);
    printf("Your cookie %s \n", buf);

    if (strlen(buf) == 16) {
        printf(" [+] Header received: %d bytes \n", strlen(buf));
        if (stricmp("0x41414141414141", buf) == 0)
        {
            strcpy(buf, "hello");
            printf("Enter msg:\n");
            scanf("%s", msg);
            if (strlen(msg) <= 512) {
                if (msg % 8) {
                    printf("[-] Error: Size too long");
                }
                else {
                    printf("[-] Good");
                }

            }
            else {
                printf("  [-] Error: Invalid \n");
            }
        }
        else {
            printf("  [-] Error: Invalid \n");
        }
    }
    else {
        printf("  [-] Error: Invalid \n");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您不能对指针或地址使用模运算。您可以在整数上使用它。因此,您需要类似strlen(msg)%8的东西。像这样:

if (strlen(msg) <= 512) {      
       if (strlen(msg)  % 8) {
            printf("[-] Error: Size too long");
        }
        else {
            printf("[-] Good");
        }
}

在考虑字符数组时,您需要将它们视为一个序列。而且,获得数组的余数也不是什么,只有计数就可以除。但是序列是一个集合。除了集合之外,它没有其他任何价值。然后,您可以计算集合中的项目,安排它们,删除或添加项目。 Sequence没有复杂的成员。如果要以不同的方式使用模运算符,则需要自己实现。

还要注意,如果strlen(buf) > 7,则说明缓冲区溢出并调用了未定义的行为。