错误、漏洞、问题 - 页 2578 1...257125722573257425752576257725782579258025812582258325842585...3184 新评论 [删除] 2019.09.28 05:45 #25771 尝试 StringInit(out, 200, 32); ... if ( memcpy_s(out, 200*sizeof(wchar_t), data, wcslen(data)*sizeof(wchar_t)+sizeof(L'\0')) ) { // что-то пошло не так } 在这一方法奏效后,我将把注意力转向wcscpy。 Roman 2019.09.28 06:13 #25772 Vict: 尝试 在这一方法奏效后,我将把注意力转向wcscpy。 不,不是这样的,字符串没有被传递,但也没有问题。 没有零也能工作,但字符串的末尾却漂浮着额外的字符。 StringInit(out, 200, 32); if (memcpy_s(out, 200 * sizeof(wchar_t), data, wcslen(data) * sizeof(wchar_t))) // + sizeof(L'\0'))) { MessageBoxW(NULL, L"Problem", L"Problem", MB_OK); } Roman 2019.09.28 06:27 #25773 我初始化时有一个指针大小,在memcpy 中使用一个指针,所以它是可以的:)) StringInit(out, 1400, 32); if (memcpy_s(out, 200 * sizeof(wchar_t*), data, wcslen(data) * sizeof(wchar_t*))) { MessageBoxW(NULL, L"Problem", L"Problem", MB_OK); } Vladimir Simakov 2019.09.28 06:37 #25774 Roman: 不,不是这样的,字符串没有被传递,但也没有问题。 但它的工作原理是这样的,但字符串的末尾又浮现出额外的字符。 仔细阅读std::wcslen文档。 返回一个宽字符串的长度,即在结束的空宽字符之前的非空宽字符的数量。 如果不明白,请谷歌帮助我。 返回一个宽字符串的长度,也就是在结束的空宽字符之前的非空宽字符的数量。如果我们完全不相信,我们就写一张支票。#include <iostream> #include <cwchar> int main() { const wchar_t* text = L"12345"; std::cout << std::wcslen(text); return 0; } 启动并查看:重写。 if (memcpy_s(out, 200 * sizeof(wchar_t), data, (wcslen(data)+1) * sizeof(wchar_t))) 结论:首先我们看了docks,不明白,就去论坛,看了论坛,记得有人在论坛上写文章,可能和你是同一个大师,分别后,在论坛上再次打开docks,写了一个测试,哦,被论坛上一个大师的知识所迷惑,认为自己聪明如鸭,写代码,哦,被bug迷惑,再次循环docks-forum,了解ub,找到错误所在,哦,被自己愚蠢所迷惑。 大致上是这样的。 PS。这是C语言,这是硬核,在这里你不应该抽论坛,只抽严肃的出版物和文件,只抽你自己的大脑。 [删除] 2019.09.28 06:42 #25775 Roman: 不,它没有工作,字符串没有通过,但也没有问题。 但是,它在没有零的情况下是这样工作的,但是它在字符串的末端浮现了额外的字符。 如果没有成功,那么就向输入端输入一个空字符串。我的选项是正确的,而且在工作,你的选项则不是。 #include <cstring> #include <iostream> using namespace std; int main() { wchar_t out[200]; wchar_t data[] = L"Hello world"; memcpy(out, data, wcslen(data)*sizeof(wchar_t)+sizeof(L'\0')); wcout << "string = " << out << endl; } // string = Hello world 你直截了当地用一个大的空白覆盖缓冲区,自然也就捕捉到了想要的那一行。 Roman 2019.09.28 06:50 #25776 Vladimir Simakov: PS。这是C,这是硬核,这里没有论坛可抽,只有严肃的出版物和文件,只有你自己的大脑。 这个硬核(wcslen(data)+1) 我已经试过了,现在我又试了一下你的版本,字符串根本就没有被复制。 Vladimir Simakov 2019.09.28 06:56 #25777 Roman: 这个硬核(wcslen(data)+1) 我已经试过了,现在我又试了一下你的选项,字符串根本就没有复制。 而memspy_s函数中的第二个参数是什么意思? Vladimir Simakov 2019.09.28 06:57 #25778 Vladimir Simakov: memspy_s函数中的第二个参数是什么意思? 让我尝试猜测一下 -字符串的长度 出来了,只有+1个字符,这一点/000忘记了。 Roman 2019.09.28 07:01 #25779 Vict: 如果没有成功,那么就向输入端输入一个空字符串。我的选项是正确的,而且在工作,你的选项则不是。 你愚蠢地覆盖了缓冲区,有很大的余地,当然,正确的字符串也被捕获。 如何是一个空字符串?当字符串来自插座时,在其他变体中,虽然它是歪的,但它不是空的。 我不是说你的变体是错的,但在你的变体中,你使用了一个字符串数组。 在我的例子中,它是一个指针。 const wchar_t* data = getData(); socket函数返回一个指向const wchar_t*的指针。 因为我把它归咎于mql的bug,因为我已经尝试了很多不同的C函数,硬核+1或+2。 它只是不会工作。 Roman 2019.09.28 07:08 #25780 Vladimir Simakov: 让我尝试猜测一下 -字符串的长度 出来了,只有+1个字符,这一点/000忘记了。 如果你是指关于这个 StringInit(out, 201, 32); if (memcpy_s(out, 201 * sizeof(wchar_t), data, (wcslen(data) + 1) * sizeof(wchar_t))) 那么字符串的复制就非常少,而且有很大的时间滞后。 这个变体在一开始就已经试过了,往前翻几页,我在那里贴了截图。 下面是与第二张截图相同的行为,修改者为什么把krakozrabryy上的文件名替换掉。 你看,即使是wcscpy(out, data) 这个自动计算字符串长度的函数,也会导致同样的行为,时间上跳过整个字符串。 1...257125722573257425752576257725782579258025812582258325842585...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
尝试
在这一方法奏效后,我将把注意力转向wcscpy。
尝试
在这一方法奏效后,我将把注意力转向wcscpy。
不,不是这样的,字符串没有被传递,但也没有问题。
没有零也能工作,但字符串的末尾却漂浮着额外的字符。
不,不是这样的,字符串没有被传递,但也没有问题。
但它的工作原理是这样的,但字符串的末尾又浮现出额外的字符。
仔细阅读std::wcslen文档。
返回一个宽字符串的长度,即在结束的空宽字符之前的非空宽字符的数量。
如果不明白,请谷歌帮助我。
返回一个宽字符串的长度,也就是在结束的空宽字符之前的非空宽字符的数量。如果我们完全不相信,我们就写一张支票。
启动并查看:重写。
结论:首先我们看了docks,不明白,就去论坛,看了论坛,记得有人在论坛上写文章,可能和你是同一个大师,分别后,在论坛上再次打开docks,写了一个测试,哦,被论坛上一个大师的知识所迷惑,认为自己聪明如鸭,写代码,哦,被bug迷惑,再次循环docks-forum,了解ub,找到错误所在,哦,被自己愚蠢所迷惑。
大致上是这样的。
PS。这是C语言,这是硬核,在这里你不应该抽论坛,只抽严肃的出版物和文件,只抽你自己的大脑。
不,它没有工作,字符串没有通过,但也没有问题。
但是,它在没有零的情况下是这样工作的,但是它在字符串的末端浮现了额外的字符。
如果没有成功,那么就向输入端输入一个空字符串。我的选项是正确的,而且在工作,你的选项则不是。
你直截了当地用一个大的空白覆盖缓冲区,自然也就捕捉到了想要的那一行。
PS。这是C,这是硬核,这里没有论坛可抽,只有严肃的出版物和文件,只有你自己的大脑。
这个硬核(wcslen(data)+1) 我已经试过了,现在我又试了一下你的版本,字符串根本就没有被复制。
这个硬核(wcslen(data)+1) 我已经试过了,现在我又试了一下你的选项,字符串根本就没有复制。
而memspy_s函数中的第二个参数是什么意思?
memspy_s函数中的第二个参数是什么意思?
-字符串的长度 出来了,只有+1个字符,这一点/000忘记了。
如果没有成功,那么就向输入端输入一个空字符串。我的选项是正确的,而且在工作,你的选项则不是。
你愚蠢地覆盖了缓冲区,有很大的余地,当然,正确的字符串也被捕获。
如何是一个空字符串?当字符串来自插座时,在其他变体中,虽然它是歪的,但它不是空的。
我不是说你的变体是错的,但在你的变体中,你使用了一个字符串数组。
在我的例子中,它是一个指针。
const wchar_t* data = getData();
socket函数返回一个指向const wchar_t*的指针。
因为我把它归咎于mql的bug,因为我已经尝试了很多不同的C函数,硬核+1或+2。
它只是不会工作。
让我尝试猜测一下
-字符串的长度 出来了,只有+1个字符,这一点/000忘记了。
如果你是指关于这个
那么字符串的复制就非常少,而且有很大的时间滞后。
这个变体在一开始就已经试过了,往前翻几页,我在那里贴了截图。
下面是与第二张截图相同的行为,修改者为什么把krakozrabryy上的文件名替换掉。
你看,即使是wcscpy(out, data) 这个自动计算字符串长度的函数,也会导致同样的行为,时间上跳过整个字符串。