小编lar*_*key的帖子

Rust的比赛早破

我想针对许多可能的情况进行切换x,有一种情况(在此x == 0)中,我想检查一些其他代码的结果以确定下一步要做什么。一种可能性是比赛早退。

在C语言中,我会使用break此返回值,但遗憾的是不允许这样做。return从父函数(在本例中为main())返回,而不是仅从匹配项返回(即println!,末尾的不会运行!)。

我可以否定子条件(在此处y == 0)并缩进下面的所有代码-但我发现这很丑陋且难以理解。

对于我来说,将子条件放入比赛后卫是没有选择的,因为它太大了。

是否可以在Rust中实现,还是有更好的选择(除了创建另一个子功能或其他解决方法)?

最小示例:

fn main() {
    let x = 1;

    match x {
        1 => {
            let y = 0;
            /*
             * do ev1l stuff to y that I don't want to put into the match-guard
             * as it's simply too much.
             */

            /* break early ... */
            if y == 0 {break;} // > error: `break` outside of …
Run Code Online (Sandbox Code Playgroud)

pattern-matching break match rust

5
推荐指数
4
解决办法
3879
查看次数

EVP_DecryptFinal_ex 失败,返回码 0

我正在尝试使用 openssl AES GCM 方法解密数据。然而,这总是失败并返回代码 0。

我确实在堆栈溢出上搜索了这个,并看到许多关于同一问题的问题。但所有建议的答案都不适合我。

因此再次问同样的问题。

这是我尝试使用的代码

int gcm_encrypt(std::vector<uint8_t>& key, std::vector<uint8_t>& plainText, std::vector<uint8_t>& encData)
{
    unsigned char iv[AES_BLOCK_SIZE] = {'T', 'H', 'I', 'S', 'I', 'S', 'S', 'E', 'C', 'R', 'E', 'T', 'K', 'E', 'Y', 'Y'};
    unsigned char tag[AES_BLOCK_SIZE] = {0};
    int encDataLen = plainText.size() + EVP_CIPHER_block_size(EVP_aes_256_gcm()) + sizeof(tag);
    unsigned char* et = (unsigned char*) calloc(encDataLen, sizeof(unsigned char));

    std::cout << "Plain text Len: " << plainText.size() << std::endl;
    std::cout << "Tag Len: " << sizeof(tag) << std::endl;
    std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ openssl aes

5
推荐指数
0
解决办法
1968
查看次数

为什么 while(*s++ == *t++) 不能比较两个字符串

我正在通过比较两个字符串之间不同的第一个值来实现strcmp(char *s, char *t)返回 <0 if s<t、0 ifs==t和 >0 if s>t

通过分离后缀增量和关系等于运算符来实现:

for (; *s==*t; s++, t++)
    if (*s=='\0')
        return 0;
return *s - *t;

Run Code Online (Sandbox Code Playgroud)

然而,分组后缀增量和关系等于运算符不起作用(像这样):

while (*s++ == *t++)
    if (*s=='\0')
        return 0;
return *s - *t;
Run Code Online (Sandbox Code Playgroud)

后者总是返回 0。我认为这可能是因为我们增加指针的速度太快了,但即使两个字符串的差异出现在 10 个索引 5 处,仍然产生相同的结果。

示例输入: strcomp("hello world", "hello xorld");

返回值: 0

我的预感是这是因为运算符优先级,但我并不乐观,如果是这样,我无法准确指出原因。

感谢您的时间!

c pointers string-comparison

5
推荐指数
1
解决办法
209
查看次数

标签 统计

aes ×1

break ×1

c ×1

c++ ×1

match ×1

openssl ×1

pattern-matching ×1

pointers ×1

rust ×1

string-comparison ×1