我正在编译一个静态库,其中包含位于其中一个源文件中的主要函数。问题是:为什么在构建其他带有main函数和库的源文件时,不会因为多重定义而出现编译错误?
Marionette's questions
HTML 页面是用不同的样式和 JavaScript 代码编写的。页面上有一些字段(实际上是纯文本),在将页面保存到磁盘之前,必须在 Python 中根据情况更改其值。
目前,已经找到了实现此机制的此类选项:为描述符分配唯一标识符(id),然后使用 HTML 库编辑值,或者代替有意义的文本,在字段中指定%UniqueValue%并使用平庸的字符串替换.
你能告诉我是否有更快、更高效、更优雅的解决方案吗?
A 是整数的集合,B 是集合 A 的子集,由恒定数量的元素组成。N 是集合 A 的元素个数,S 是子集 B 的元素之和。
也就是说,B 是集合 A 的子集,有 n 个元素,其中 n < N,其和等于 S。
N - 36, P - 编码集合 A - 7 的最大数的位数。
需要确定子集 B 的数量并找到它们。简单来说,这个任务听起来是这样的:你需要从给定的集合中找到这样的元素,使得它们的数量等于 n,并且总和严格等于 S。
你能推荐解决这个问题的最有效算法吗?
更新:这是函数现在的样子(动态编程):
int results[A_SET_SIZE][B_SET_SUM];
for (size_t i = 0; i < A_SET_SIZE; i++) {
results[0][B_SET_SUM - 1] = 0;
}
for (size_t i = 1; i < A_SET_SIZE; i++) {
for (size_t j = 0; j < B_SET_SUM; j++) {
if (j > A[i]) {
results[i][j] = max(results[i - 1][j], results[i - 1][j - A[i]] + A[i]);
} else {
results[i][j] = results[i - 1][j];
}
}
}
使用组合公式,我们设法确定具有所需元素数量的子集的总数 - 但是如何找到正确的?或者更确切地说,如何在其中找到所有也满足总和约束的子集?
示例:该集合由 4 个元素组成(A = {1, 2, 3, 4})。我们需要找到所有这些基数为 2 且总和为 5 的子集。事实证明,有两个子集满足这些条件:{1, 4} 和 {2, 3}。任务正是找到这样的子集。
有一台笔记本电脑UEFI。有必要安装Linux分发工具包Debian- 具有完全加密和LVM.
我在系统安装过程中对磁盘进行了分区:
nvme0n1:
|--nvme0n1p1 (EFI, vfat)
|--nvme0n1p2 (crypto_LUKS):
|--LVM:
|--swap
|--root
|--home
EFI只有文件存储在分区上GRUB:
/EFI/debian:
BOOTX64.CSV
fbx64.efi
grub.cfg
grubx64.efi
mmx64.efi
shimx64.efi
事实证明,据我了解,这些是首先启动的加载程序文件。但是,系统本身并没有启动:一切都停在控制台上GRUB。
boot引导加载程序告诉命令您必须首先指定内核映像的路径。但是有一个问题:该分区/boot没有单独的挂载点,并且包含在/, -root中。而这反过来又是加密的。
有两个假设:/boot在对磁盘进行分区时需要单独配置分区,-将其排除在加密之外,-或者GRUB它无法开始解密分区(似乎它不应该这样做,因为在我看来它的任务是启动内核)。
请告诉我,如何处理这个 - 启动系统?
在带有UEFI/GPT. 但是系统不会启动。
在此之前,我在ISO帮助模式下在 USB 驱动器上创建了一个可启动映像Rufus。在安装系统的过程中,我创建了一个分区EFI并加密,覆盖LVM了剩余的磁盘空间。
注意:我发现安装程序会提示您选择要安装的磁盘GRUBmode MBR/BIOS,但在我的情况下 - 或总是在UEFI- 这不会发生。
注 2:笔记本电脑安装了 NVME 驱动器
注 3:lsGRUB 中的命令输出:(proc) (hd0) (hd0, gpt2) (hd0, gpt1). 除以外的所有磁盘都(proc)具有相同的大小。
更新:在 MBR 模式下创建了一个闪存驱动器 ( BIOS/UEFI) 并重新安装了系统。问题仍然存在,但是,其中出现了一个包含 debian 文件(hd0, gp1)的目录。efi
该项目具有以下代码:
#define SIZE 4096U
...
void *t_ptr = (void *) (*(uintptr_t *) test->field & ~(SIZE - 1U));
使用它,您需要获取指向列表第一个元素的指针,因为内存最初是使用对齐分配的SIZE。
例如,地址可以是 - 0x460028。
但是,执行此行的结果是NULL. 奇怪之处在于,当使用不同的指针时,代码本身就非常成功。
test是描述某个内存区域的结构。field- 指向另一个辅助结构的指针。
struct Test {
...
struct Field *field;
};
struct Field {
...
Test *test;
};
Test *test = (Test *) mem;
test->field = (Field *) mem1;
在这种情况下,如果ptr相等0x4a0028,将返回0x4a0000。
ptr- 普通指针 -void *
#define SIZE 4096U
...
void *t_ptr = (void *) (*(uintptr_t *) ptr & ~(SIZE - 1U));
有一些代码将数据写入内存。
假设给了他一个指向内存块开头的指针 - void *, - 和一个要写入的数值 - data。指针转换为类型int,并写入差异data - val。
void write(void *addr, int data = 1024) {
*((int*) addr) = data - 18;
}
为了检查程序的正确运行,我将内存块的每个字节复制到一个文件中,然后研究它。
for (std::size_t i = 0; i < size; i++)
fout << std::hex << ((int) *((char*) addr + i));
特殊之处在于,例如,1024 - 18文件中表达式的结果如下所示:ffffffee, 3, 0, 0,但它应该:ee, 3, 0, 0。
为什么会出现这种怪异现象?一个字节怎么能存储这么大的数字呢?
输入是一个字符串 - 更准确地说,是由空格分隔的几个单词 - 然后输入一个新行, - 用户按下Enter- 但在接收下一行之前,程序必须处理前一行并返回结果。此外,将行中的下一个单词读入类型变量std::string以进行进一步处理很重要 - 不必将每个单词写入唯一变量,您可以覆盖前一个值。
程序必须循环,也就是说,它只在Ctrl+Cor 关键字之后结束exit。
条件算法如下所示。
while (s != "exit")
{
std::cin >> s;
// Обработка слова в строке
if (s == "\r\n")
{
//Вывод результата
}
}
阅读和处理模块恰好出现了困难。
我很难理解 C++ 如何处理内存。我希望解决它们。
假设有一些用 C++ 编写的程序,它刚刚在计算机 (x86_64) 上启动。
据我所知,当程序启动时,会分配两个内存结构——堆栈和堆。堆栈存储有关函数、地址的传递值的信息,也许还有其他东西。在堆中,有一些程序资源和其他数据:用户字符串、变量——通常是在程序运行期间出现的数据。
- 术语“池” - 这是什么意思?它与堆有某种关系吗?如果是这样,怎么做?
- 当操作系统将堆传递给程序时 - 它是否填充了零?
- 如果是这样,为什么
\0在输出没有的字符串时会出现额外的字符?这里有更详细的介绍 - 在这种情况下,为什么变量在创建时会包含内存中的任意数据?
- 如果是这样,为什么
new即使堆有空闲空间,操作员是否可以向操作系统请求额外的内存?在这样的操作期间是否可以
array = new char[7];分配超过七个字节?四舍五入对齐?分配器 - 一种在堆上分配内存的机制?
在我看来,我遇到了操作员的一种相当奇怪的行为new。下面的程序以一个字符串为输入,实际上只需要找出输入的字符个数——算法简化来演示问题,实际上所有变量都被全部使用——然后为一个name.length()字符数组。
问题的本质:当你输入一个字符串时,观察条件:name.length() % 8 == 0,额外的字符出现 - 额外的垃圾 - 在输出。
#include <iostream>
#include <string>
int main()
{
std::string name;
char * key;
getline(std::cin, name);
key = new char[name.length()];
for (unsigned i = 0; i < name.length(); i++)
{
key[i] = 'A';
}
std::cout << key << std::endl;
return 0;
}
- 输入数据:qwertyui;输出:AAAAAAAha>
- 输入数据:qwertyu;输出:AAAAAAA
有哪些方法可以让一个 AsyncTask 用于不同的请求?
考虑到需要从不同的类调用不同的函数onPostExecute。
有一个任务:使用 PHP 通过引用保存文件并在 Android 应用程序中提供对它的访问。
下面是保存文件的代码。
function SaveFile($URL, $Path) {
return copy($URL, $Path);
}
假设您想以 MP3 格式保存音乐文件。该函数成功将文件保存到服务器(该文件在服务器上没有扩展名),但是在OS Windows中下载并安装文件扩展名后,无法正常播放。没有音乐,只有一些奇怪的声音。
与图像完全相同 - 源文件实际上无法识别。
顺便说一句,使用 MediaPlayer OS Android 成功播放了相同的音乐文件。
为什么会这样?如何解决这个问题?
替代功能。
private function SaveFile($URL, $Path) {
$ReadFile = fopen ($URL, "rb");
if ($ReadFile) {
$WriteFile = fopen ($Path, "wb");
if ($WriteFile){
while(!feof($ReadFile)) {
fwrite($WriteFile, fread($ReadFile, 4096));
}
fclose($WriteFile);
}
fclose($ReadFile);
}
}
字符串嵌入问题。您需要url()在 : 中有以下内容'/path/to/file/img.jpg'。字符串(不带单引号)存储在$_SESSION['img']. 期望的结果:url('/path/to/file/img.jpg');
echo '<body> <div id="img" style="background: url();"></p> </body>';
JavaScript
$(document).ready(function () {
'use strict';
$('#u_button').click(function () {
var file_data = $('#u_jfile').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
$.ajax({
url: "http://example.ru/script.php",
dataType: 'json',
cache: false,
contentType: false,
processData: false,
data: {
class: $('#u_class').val(),
subject: $('#subject').val()
}, form_data,
type: 'post',
success: function(data) {
console.log(data.message);
}
});
});
});
PHP
<?php
if ( ( !empty( $_FILES[ 'file' ] ) ) && ( $_FILES[ 'file' ][ 'error' ] == 0 ) ) {
$filename = basename( $_FILES[ 'file' ][ 'name' ] );
$ext = substr( $filename, strrpos( $filename, '.' ) + 1 );
if ( ( $ext == "txt" ) && ( $_FILES[ "uploaded_file" ][ "size" ] < 350000000 ) ) {
$newname = "../one/two/" . $_POST[ 'class' ] . "/" . $_POST[ 'subject' ] . ".txt";
if ( ( move_uploaded_file( $_FILES[ 'file' ][ 'tmp_name' ], $newname ) ) ) {
$date = date( 'd.m.Y_H:i:s' );
$newfile = "../one/two/{$_POST['class']}/{$_POST['subject']}/{$date}.bak.txt";
if ( !copy( $newname, $newfile ) ) {
echo json_encode( array( "status" => "FALSE", "message" => "Ошибка загрузки" ) );
die();
} else {
echo json_encode( array( "status" => "TRUE", "message" => "Загружено" ) );
die();
}
} else {
echo json_encode( array( "status" => "FALSE", "message" => "Ошибка загрузки" ) );
die();
}
} else {
echo json_encode( array( "status" => "FALSE", "message" => "cerr: ext or size" ) );
die();
}
} else {
echo json_encode( array( "status" => "FALSE", "message" => "cerr: i not found file" ) );
die();
}
?>
HTML
<label class="file_upload" id="u_file">
<span>Выбрать файл</span>
<input type="file" id="u_jfile" name="n_jfile" accept=".txt">
</label>
我面临一个错误:
cerr:我没有找到文件。

