小编Mar*_*k R的帖子

如果有不明智的字符,如何将URL转换为URI?

我有URL对象,路径包含不明智的字符(RFC 2396)在我的情况下它是"|" (管)字符.现在我需要安全地将其转换为URI,但URL.toURI()抛出异常.

我读过URL文档,但这部分让我感到困惑:

URL类本身不会根据RFC2396中定义的转义机制对任何URL组件进行编码或解码.调用者负责编码任何字段,这些字段需要在调用URL之前进行转义,并且还要解码从URL返回的任何转义字段.此外,由于URL不知道URL转义,因此它无法识别相同URL的编码或解码形式之间的等效性.

那我该怎么办呢?在转换过程中对此字符进行编码的模式是什么?我是否需要创建URL对象的编码副本?

java url uri http

6
推荐指数
1
解决办法
1849
查看次数

使用HA1的HTTPURLSession摘要认证(不是密码)

简单地说,我有使用user nameHA1值进行摘要认证的场景(在过去某处计算过,或者通过对其他服务器的认证是提供者).密码不可用.

现在我该如何处理这种情况NSURLSession

我是否必须手动完成(计算HA2response我自己)或者是否有一些解决方案?(它应该存在,因为将密码保存为纯文本是一个安全问题).

请注意我的场景HA1来自对其他服务器的身份验证,因此NSURLCredential 持久化NSURLCredentialPersistencePermanent不能解决我的问题.

macos objective-c digest-authentication ios nsurlsession

6
推荐指数
0
解决办法
166
查看次数

为什么iostream会用某些词语切掉第一个字母?

注意:请在回答之前阅读评论.问题似乎是编译器特定的.

我有一个简单的程序,它从文件或控制台读取名称和一些等级到结构Student_info,然后通过重载<<和>>运算符打印出一些数据.但是,该程序正在切断部分甚至整个单词并移动数据.例如,输入

Eunice 29 87 42 33 18 13 
Mary 71 24 3 96 70 14 
Carl 61 12 10 44 82 36 
Debbie 25 42 53 63 34 95 
Run Code Online (Sandbox Code Playgroud)

回报

Eunice: 42 33 18 13 
Mary: 3 96 70 14 
rl: 10 44 82 36 
25: 63 34 95 
Run Code Online (Sandbox Code Playgroud)

暗示不知何故,流已经忽略了Carl的前两个字母,然后将整个流转移了1个字.我一直试图在一小时的大部分时间内调试这个,但它似乎是随意的.对于不同的名称,不同的单词被切断,没有明显的模式.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

struct Student_info {
    friend std::ostream &operator<<( std::ostream &output,
                                    const Student_info &S ) { // overloads operator to print name and grades …
Run Code Online (Sandbox Code Playgroud)

c++ iostream

6
推荐指数
1
解决办法
376
查看次数

具有不完整类型的 lambda 函数

以下代码可以正常编译:

\n
#include <cstddef>\n\nstruct A {\n    char a;\n    static constexpr int off(void) { return offsetof(A, a); }\n    static constexpr int (*off_p)(void) = off;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

以下看似相似的代码\n仅使用 lambda 简称,但无法编译:

\n
#include <cstddef>\n\nstruct A {\n    char a;\n    static constexpr int (*off_p)(void) =\n         [](void) static constexpr ->int { return offsetof(A, a); };\n};\n
Run Code Online (Sandbox Code Playgroud)\n
$ g++ -std=c++23 bad.cpp \nIn file included from /usr/include/c++/13/cstddef:50,\n                 from bad.cpp:1:\nbad.cpp: In static member function \xe2\x80\x98A::<lambda()> static\xe2\x80\x99:\nbad.cpp:5:74: error: invalid use of incomplete type \xe2\x80\x98struct A\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

所以基本上我有两个不同的问题,因为我不明白这里发生了什么。

\n
    \n
  1. 为什么在第一种情况下允许使用不完整类型?
  2. \n …

c++ c++23

6
推荐指数
1
解决办法
219
查看次数

基于“intrinsicContentSize”的自动布局纵横比(非恒定)

是否可以应用这种自动布局约束和基于动态计算的纵横比intrinsicContentSize?在文档中,我只发现了具有固定比率值的约束。

intrinsicContentSize在我的用例中,实际的高度和高度并不重要,我希望保留动态变化的视图的高度和宽度比。

我应该提供我自己的约束实现吗?或者,还有更好的方法?

macos objective-c ios autolayout

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

无法使用声明中的初始化列表初始化const char*/string数组的向量

最初我开始尝试使用initilizer-list声明初始化const char*[3]的向量

vector<const char*[3]> v = { { "a", "b", "c" } };
Run Code Online (Sandbox Code Playgroud)

这给出了错误

matrix must be initialized with a brace-enclosed initializer
Run Code Online (Sandbox Code Playgroud)

我认为这可能是由于const char*,虽然看起来很奇怪,但却把它变成了字符串

vector<string[3]> v = { { "a", "b", "c" } };
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在.我尝试了几种括号组合无济于事.实际上是否可以使用初始化列表初始化声明的结构?

c++ c++11

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

CMakeLists.txt 处的 CMake 错误:251(消息):无法确定正则表达式后端的源文件

我尝试从源代码构建的项目cmake 主要是用 C/C++ 和 Python 编写的。

其源代码链接: https: //github.com/rapidsai/cuml

在“cpp”子文件夹中成功运行命令后:

$ cmake . 
Run Code Online (Sandbox Code Playgroud)

我在那里启动了“make”并收到错误消息:

CMake Error at CMakeLists.txt:251 (message):
  Failed to determine the source files for the regular expression backend
Run Code Online (Sandbox Code Playgroud)

c++ cmake

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

为什么对 C 函数的无效使用可以正常编译而没有任何警告?

与 C 相比,我更喜欢 C++,但这个简单的代码示例让我大吃一惊:

int foo() {
    return 3;
}

int main() {
    int x;
    foo(&x);
    return x;
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/4ov9nTzjM

没有警告,没有链接问题,但此代码仍然无效。

当一些初学者用具有这个奇怪问题的代码提出问题时,我偶然发现了这一点。有人在其他网站(非英语网站)上提出了问题,我想向他提供更好的解释为什么它可以编译(并了解一些有关 C 的知识)。如果有人需要的话,他的原始代码。

我怀疑这个sis在某种程度上与隐式函数声明有关,但我不完全确定。为什么编译器不会抱怨foo使用参数调用?

更新:

这是一个程序集

foo:
        push    rbp
        mov     rbp, rsp
        mov     eax, 3
        pop     rbp
        ret
main:
        push    rbp
        mov     rbp, rsp
        sub     rsp, 16
        lea     rax, [rbp-4]
        mov     rdi, rax
        mov     eax, 0
        call    foo
        mov     eax, DWORD PTR [rbp-4]
        leave
        ret
Run Code Online (Sandbox Code Playgroud)

如您所见,x仍未初始化。

c function-call function-declaration function-definition

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

`glm::linearRand(-1.0f, 1.0f)` 给出的负数多于正数。这是为什么?“兰德”似乎没问题

我用来生成和glm::linearRand(-1.0f, 1.0f)之间的随机浮点数。然后,我输出正数(或以上)的百分比。-110.0f

std::srand(time(0)); // Give glm a new seed

uint32_t samples = 1000000000;
uint32_t positive = 0;
uint32_t negative = 0;

for (uint32_t i = 0; i < samples; i++) {
    float rand = glm::linearRand(-1.0f, 1.0f);

    if (rand >= 0.0f) {
        positive++;
    } else {
        negative++;
    }
}

std::cout << "positive %: " << std::setprecision(6) << ((float)positive / samples) * 100 << std::endl;
Run Code Online (Sandbox Code Playgroud)

49.6%无论我运行程序的频率如何(使用不同的种子!),正数的百分比总是以 左右结束。如果我正确理解浮点数,则-1.0f0.0f之间的数与0.0f和之间的数同样多1.0f

那么为什么这个程序生成的负数总是多于正数呢? …

c++ random glm-math

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

PIMPL 习惯用法实际上可以使用 std::unique_ptr 工作吗?

我一直在尝试通过使用 unique_ptr 来实现 PIMPL 习惯用法。\n我从几篇文章中得到启发,这些文章总是强调相同的要点:仅在实现 PIMPL 的类的标头中声明析构函数,然后在您的 . .cpp 文件。否则,您将收到诸如“Incomplete type bla bla”之类的编译错误。

\n

好吧,我做了一个尊重这一点的小测试,但我仍然有“不完整类型”错误。代码就在下面,非常短。

\n

A.hpp:

\n
#pragma once\n#include <memory>\n\nclass A\n{\npublic:\n  A();\n  ~A();\nprivate:\n  class B;\n  std::unique_ptr<B> m_b = nullptr;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

A.cpp:

\n
#include "A.hpp"\n\nclass A::B\n{\n\n};\n\nA::A()\n{\n\n}\n\nA::~A() // could be also \'= default\'\n{\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

主要.cpp:

\n
#include "A.hpp"\n\nint main()\n{\n  A a1;\n\n  return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我用两种(快速和肮脏的)方式构建,从我的角度来看,结果非常令人惊讶。

\n

首先我在没有链接 A.cpp 的情况下构建

\n
g++ -c A.cpp\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止没有错误。

\n

然后,我编译了 A.cpp 和 main.cpp 以创建可执行文件

\n
g++ A.cpp main.cpp -o test\n
Run Code Online (Sandbox Code Playgroud)\n

这就是我遇到麻烦的地方。这里我得到了关于不完整类型的著名错误:

\n
In …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14

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