RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-258486

Elvin's questions

Martin Hope
Elvin
Asked: 2023-10-14 05:11:33 +0000 UTC

为什么返回类型使用 typename 而不是 decltype?

  • 5

众所周知,std::result_of函数调用时需要确定返回值的类型。它的 C++17 更新版本的工作原理类似 -invoke_result

#define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING
#include <type_traits>

int fn(int) 
{ 
     return int();
}  

int main() 
{
     std::result_of<decltype(&fn)(int)>::type y; // y - это int
     y = 5;


     std::invoke_result<decltype(&fn),int>::type k;
     k = 6;

     return 0;

}

当使用 std::result_of<F(void)> 显式指定类型时,为什么在此答案中使用 typename?

template<typename F>                            
std::future<typename std::result_of<F()>::type> 
runCmd(const std::string& cmd, F callback)
{
 ...

第二个问题:runCmd一个lambda传递给函数,其类型由模板类型F描述,即类型是已知的,不需要通过decltype来识别,对吧?


补充指定问题的示例,代码decltype如下:

#include <thread>
#include <future>
#include <string>
#include <iostream>
#include <type_traits>

void system()
{
     std::cout << "Executing system with argument '" << "ls" << "'\n";
}



template<class F>
auto runCmd(F callback) -> std::future<decltype(callback())>
{
     auto fut = std::async(std::launch::async, [callback] { system(); return callback(); });
     return fut;
}


int main()
{
     auto fut = runCmd([] { std::cout << "Executing callback\n"; });
     fut.get();
}
c++
  • 1 个回答
  • 43 Views
Martin Hope
Elvin
Asked: 2023-07-31 03:08:46 +0000 UTC

为什么我不能在 Cmake 中包含头文件?

  • 6

我有一个这样的目录:

Структура папок
Серийный номер тома: C85A-2EBA
C:.
│   CMakeLists.txt
│
├───build
├───example
│       app.cpp
│
├───shape
│       CMakeLists.txt
│       printer.h
│       shape.cpp
│       shape.h
│
└───square
        CMakeLists.txt
        info.h
        square.cpp
        square.h

我想编译两个 dll(shapelib、squarelib),但尚未将它们的函数导出到客户端的 app.cpp。

根 CMakeLists.txt 如下所示:

cmake_minimum_required(VERSION 3.25)

project(geometry LANGUAGES CXX)

if(MSVC)
    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
endif()

add_library(shapelib SHARED)
add_library(squarelib SHARED)
target_include_directories(squarelib PRIVATE ${PROJECT_SOURCE_DIR})
add_subdirectory("square")
target_include_directories(shapelib PRIVATE ${PROJECT_SOURCE_DIR})
add_subdirectory("shape")

shape文件夹中的CMakeLists.txt:

target_sources(shapelib
    PRIVATE shape.cpp
    PUBLIC FILE_SET HEADERS
    BASE_DIRS ${PROJECT_SOURCE_DIR}/shape # если не писать "/shape", то include в square.h придется писать полностью 
    FILES shape.h)

方形文件夹中的 CMakeLists.txt:

target_sources(squarelib 
    PRIVATE square.cpp info.h
    PUBLIC FILE_SET HEADERS
    BASE_DIRS ${PROJECT_SOURCE_DIR}
    FILES square.h)

头文件square.h:

//#include"shape/shape.h" // этот include работает как надо
#include"shape.h"
class Square: public Shape
{
    public:
            virtual std::string GetName() override;

            void WriteInfo();
};

但编译时出现错误:fatal error C1083: Cannot open include file: 'shape.h': No such file or directory

但是,如果您使用带注释的 include 且不执行 do BASE_DIRS ${PROJECT_SOURCE_DIR}/shape,那么一切都会按预期进行。但我想使用 cmake 以缩短的方式(按名称)连接标头。

如果我使用显式指定头文件的路径,为什么会出现错误FILE_SET HEADERS BASE_DIRS ${PROJECT_SOURCE_DIR}/shape FILES shape.h

c++
  • 2 个回答
  • 47 Views
Martin Hope
Elvin
Asked: 2023-07-03 06:10:04 +0000 UTC

target_include_directories 如何理解要使用哪个头文件?为什么不需要显式指定头文件的名称?

  • 5

我有一个这样的目录

C:.
│   CMakeLists.txt
│   main.cpp
│
├───include
│       dog.h
│       log.h
│       operations.h
│
└───src
        dog.cpp
        log.cpp
        operations.cpp

我想创建一个静态库 Operations.lib。为此我有这个 CmakeList.txt

cmake_minimum_required(VERSION 3.5)

project (HelloApp 
        VERSION 0.0.1
        DESCRIPTION "The leading Hello World App"
        LANGUAGES CXX)



# static library creation
add_library(operations STATIC src/operations.cpp)

# вот тут возникает вопрос: как Cmake узнает, что в папке include нужен именно файл 
# operations.h
target_include_directories(operations PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

target_compile_features(operations PUBLIC cxx_std_20)
# static library creation

add_executable(HelloAppBinary main.cpp 
        src/dog.cpp
        src/log.cpp)



        message("The path is:" ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(HelloAppBinary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_features(HelloAppBinary PUBLIC cxx_std_20)
target_link_libraries(HelloAppBinary PUBLIC operations)

静态库正在生成,没关系。

问题是:Cmake 如何知道为了创建一个库,它需要准确地包含 Operations.h,而不是其余的头文件(dog.h、log.h)?我的猜测是,他是从函数原型中执行此操作的(由于操作中的函数体,他知道了该函数原型),是这样吗?这就是为什么您不需要显式命名头文件(operations.h)的原因吗?

c++
  • 2 个回答
  • 42 Views
Martin Hope
Elvin
Asked: 2022-04-21 20:58:44 +0000 UTC

为什么只运行备份命令时数据库卡在“正在恢复...”状态?

  • 0

我想备份数据库。为此,我使用以下命令:

BACKUP DATABASE test4 TO DISK = 'C:\\db_backup'
go
BACKUP LOG test4 TO DISK = 'C:\\log_backup' with NORECOVERY

起初有一个错误,但在根据这个答案Msg 3201, Level 16, State 1, Line 1 Cannot open backup device Operating system error 5(Отказано в доступе.).将 NT Service\MSSQLSERVER 更改为内置帐户 - 本地系统之后。一切似乎都有效:

Processed 480 pages for database 'test4', file 'test4' on file 1.
Processed 2 pages for database 'test4', file 'test4_log' on file 1.
BACKUP DATABASE successfully processed 482 pages in 0.060 seconds (62.695 MB/sec).

Processed 5 pages for database 'test4', file 'test4_log' on file 1.
BACKUP LOG successfully processed 5 pages in 0.015 seconds (2.604 MB/sec).

然而,在那之后,在对象资源管理器中,test4 数据库变成了:test4 (Restoring...)。并且数据库不能再使用了。Database 'test4' cannot be opened. It is in the middle of a restore.

  1. 如果我只做了备份,没有运行恢复,为什么会出现正在恢复状态?
  2. 为什么不能再使用数据库?使用 test4 给出Database 'test4' cannot be opened. It is in the middle of a restore.?

如何解决以上问题?

sql
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2022-04-16 19:12:23 +0000 UTC

为什么优化会恶化时间以及如何优化查询?

  • 3

我有一个请求 - 显示所有学生并为所有参加过“文学”课程的人指明成绩,格式为:全名,成绩:

SELECT T1.FIO, T2.ItogovayaOcenka 
FROM ( SELECT DISTINCT ( SELECT Chelovek.FIO 
                         FROM Chelovek 
                         WHERE Chelovek.NumerPassporta = ObuchayushchijsyaNumerPassporta) FIO  
       FROM Ocenka) T1
LEFT JOIN ( SELECT ( SELECT Chelovek.FIO 
                     FROM Chelovek 
                     WHERE Chelovek.NumerPassporta = ObuchayushchijsyaNumerPassporta ) FIO,
                   ItogovayaOcenka 
            FROM Ocenka 
            WHERE ZHurnal_OcenokKursNazvanie='Литература') T2 ON T2.FIO=T1.FIO;

下面是它的物理计划: 在此处输入图像描述 现在,不添加索引,我将查询更改为这个(优化查询):

WITH 
T1 AS ( SELECT DISTINCT ( SELECT Chelovek.FIO 
                          FROM Chelovek 
                          WHERE Chelovek.NumerPassporta = ObuchayushchijsyaNumerPassporta) FIO  
        FROM Ocenka ),
T2 as ( SELECT ( SELECT Chelovek.FIO 
                 FROM Chelovek 
                 WHERE Chelovek.NumerPassporta = ObuchayushchijsyaNumerPassporta) FIO ,
               ItogovayaOcenka 
        FROM Ocenka 
        WHERE ZHurnal_OcenokKursNazvanie='Литература'),
JOINED AS ( SELECT T1.FIO, T2.ItogovayaOcenka 
            FROM T1 
            LEFT JOIN T2 ON T2.FIO=T1.FIO)
SELECT * FROM JOINED; 

但是通过 DATEDIFF 的时间测量指标显示第一个(非优化查询)表现更好。而他的物理位面并没有改变: 在此处输入图像描述

优化第一个查询的最佳方法是什么?

Chelovek 表定义如下:

CREATE TABLE Chelovek               
(
NumerPassporta NVARCHAR(200) PRIMARY KEY NOT NULL CHECK (NumerPassporta!=''), 
FIO NVARCHAR(200) UNIQUE NOT NULL CHECK(FIO !='')
);

评价表:

CREATE TABLE Ocenka
(
    Id INT IDENTITY ,--PRIMARY KEY,
    PromezhutochnyeOcenka1 INT NOT NULL CHECK (PromezhutochnyeOcenka1>0),--ПромежуточныеОценки
    PromezhutochnyeOcenka2 INT NOT NULL CHECK (PromezhutochnyeOcenka2>0),--ПромежуточныеОценки
    PromezhutochnyeOcenka3 INT NOT NULL CHECK (PromezhutochnyeOcenka3>0),--ПромежуточныеОценки
    ItogovayaOcenka int NOT NULL CHECK (ItogovayaOcenka>0),
    ZHurnal_OcenokKursNazvanie NVARCHAR(200) NOT NULL CHECK (ZHurnal_OcenokKursNazvanie!=''),
    CONSTRAINT FOREIGN_KursNazvanie FOREIGN KEY (ZHurnal_OcenokKursNazvanie)  REFERENCES ZHurnal_Ocenok(KursNazvanie),
    ObuchayushchijsyaNumerPassporta NVARCHAR(200)  NOT NULL CHECK (ObuchayushchijsyaNumerPassporta!=''),
    --FOREIGN KEY (ObuchayushchijsyaNumerPassporta) REFERENCES Obuchayushchijsya(NumerPassporta)
    CONSTRAINT PRIMARY_KEY_Id PRIMARY KEY(Id)
    
);

这些表填充在一个循环中:

Declare @_NumPass varchar(11)
Set @_NumPass = ''

Declare @_FIO varchar(80)
Set @_FIO = ''

Declare @_PromezhutochnyeOcenka1 int
Set @_PromezhutochnyeOcenka1 = 0

Declare @_PromezhutochnyeOcenka2 int
Set @_PromezhutochnyeOcenka2 = 0

Declare @_PromezhutochnyeOcenka3 int
Set @_PromezhutochnyeOcenka3 = 0

Declare @_ItogovayaOcenka int
Set @_ItogovayaOcenka = 0

Declare @_ZHurnal_OcenokKursNazvanie varchar(80)
Set @_ZHurnal_OcenokKursNazvanie = ''

Declare @RandNumForSubject int
Set @RandNumForSubject=0






Declare @top int 
Set @top = 1000000

Declare @cnt int
Set @cnt = 0

While @cnt < @top
Begin   
    set @_NumPass = convert(varchar(36),newid())
    set @_FIO = convert(varchar(36),newid())
    set @RandNumForSubject = ABS(CHECKSUM(NEWID())) % 7+1
    IF @RandNumForSubject = 1
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='Matematica'
        END;
    IF @RandNumForSubject = 2
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='История'
        END;
    IF @RandNumForSubject = 3
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='Литература'
        END;
    IF @RandNumForSubject = 4
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='География'
        END;
    IF @RandNumForSubject = 5
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='Базовая'+'информатика'
        END;
    IF @RandNumForSubject = 6
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='Биология'
        END;
    IF @RandNumForSubject = 7
        BEGIN
            set @_ZHurnal_OcenokKursNazvanie='Химия'
        END;
    set @_PromezhutochnyeOcenka1 = ABS(CHECKSUM(NEWID())) % 5+1
    set @_PromezhutochnyeOcenka2 = ABS(CHECKSUM(NEWID())) % 5+1
    set @_PromezhutochnyeOcenka3 = ABS(CHECKSUM(NEWID())) % 5+1
    set @_ItogovayaOcenka = (@_PromezhutochnyeOcenka1+@_PromezhutochnyeOcenka2+@_PromezhutochnyeOcenka3)/3


    Insert Into Chelovek values (@_NumPass,@_FIO)

    Insert Into Ocenka values (@_PromezhutochnyeOcenka1,@_PromezhutochnyeOcenka2,@_PromezhutochnyeOcenka3,@_ItogovayaOcenka,@_ZHurnal_OcenokKursNazvanie,@_NumPass)


    Set @cnt = @cnt + 1
End
sql
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2022-03-04 00:51:05 +0000 UTC

如何摆脱左连接中的重复项?

  • 0

我有一张桌子 RaspisanieZanyatij:

id  KursNazvanie             VremyaNachala
1   Matematica                1300000000
5   БазоваяИнформатика        1312345678
6   Биология                  1318765432
4   География                 1322222222
2   История                   1300000000
3   Литература                1311111111

我想输出这样的值是这样的:

1300000000  1311111111
1311111111  1312345678
1312345678  1318765432
1318765432  1322222222
1322222222  NULL 

也就是我要输出“值-值稍大”

但我的代码是:

SELECT DISTINCT
    --i1.id,
    i1.VremyaNachala AS time,
    i2.VremyaNachala AS greater_time
FROM
    RaspisanieZanyatij AS i1
    LEFT JOIN  RaspisanieZanyatij AS i2 ON   i2.VremyaNachala > i1.VremyaNachala

给出重复项:

1300000000  1311111111
1300000000  1312345678
1300000000  1318765432
1300000000  1322222222
1311111111  1312345678
1311111111  1318765432
1311111111  1322222222
1312345678  1318765432
1312345678  1322222222
1318765432  1322222222
1322222222  NULL

如何修复代码以删除左侧的重复项并仅输出大于右侧的最小项?

sql
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2022-02-03 20:41:04 +0000 UTC

为什么dx.bat 找不到java jdk?

  • 2

我想编译classes.jar 并获取.dex一个模块以使用 DexClassLoad 进一步加载它。但是,在编译时,我收到以下错误:

C:\Users\today\AppData\Local\Android\Sdk\build-tools\26.0.1>dx -dex -output loadable.dex classes.jar

ERROR: No suitable Java found. In order to properly use the Android Developer
Tools, you need a suitable version of Java JDK installed on your system.
We recommend that you install the JDK version of JavaSE, available here:
  http://www.oracle.com/technetwork/java/javase/downloads

If you already have Java installed, you can define the JAVA_HOME environment
variable in Control Panel / System / Avanced System Settings to point to the
JDK folder.

You can find the complete Android SDK requirements here:
  http://developer.android.com/sdk/requirements.html

不过我注册了JAVA_HOME,也就是jdk的路径已经在PATH里面了:

C:\Program Files\Java\jdk-11.0.8

我开始检查 find_java.bat:

PS C:\Users\today\AppData\Local\Android\Sdk\tools\lib> ./find_java.bat

ERROR: No suitable Java found. In order to properly use the Android Developer
Tools, you need a suitable version of Java JDK installed on your system.
We recommend that you install the JDK version of JavaSE, available here:
  http://www.oracle.com/technetwork/java/javase/downloads

If you already have Java installed, you can define the JAVA_HOME environment
variable in Control Panel / System / Avanced System Settings to point to the
JDK folder.

You can find the complete Android SDK requirements here:
  http://developer.android.com/sdk/requirements.html

找不到java

java
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-08-05 01:31:51 +0000 UTC

如何将字符串与正则表达式进行比较?

  • 0

我想使用正则表达式比较这两个字符串。为此,我使用了这个问题regex_match的代码。但由于某种原因,比较返回。如果可能,最好不要更改 string ,因为在它的位置可能存在这种类型的字符串,并且很难添加,例如,转义特殊字符(或正则表达式的其他附加字符)地方。是否可以像本例一样普遍匹配程序名称?falsenot*.exe

    std::string string("notepad.exe");
    std::regex regex("not*.exe");
    std::cout << std::boolalpha << std::regex_match(string, regex);

当其中一个完全已知并且另一个包含正则表达式时,如何正确比较相似的字符串?

c++
  • 2 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-05-15 03:50:02 +0000 UTC

这样的正则表达式是如何工作的?

  • 1

我不知道这个正则表达式在 Lex 中是如何工作的:

1)     \"([^\\\"]|\\\n|\\.)*\"

第一个表达式捕获这样的条目 :"one"或"test". 也就是说,双引号中的单词。以下是我对第一个正则表达式的了解:

\" - экранирование спец. символа кавычка
(что-то в скобках)* - звёздочка означает любое (в том числе и 0) число вхождений символа

然后括号里面是|,表示или,即[^\\\"]要么 要么\\\n被选中\\.

我试图弄清楚[^\\\"]这些是什么\\\n意思\\.。

我将从 [^\\\"]. 方括号中的抑扬符(^)表示如果字符不相等则选择任何字符串\ или "(我看到斜线转义和引号转义)。

然后 or 符号后跟\\\n。在这里,我再次看到斜线字符的转义和到新行的过渡。

然后 -\\.转义点(根据定义,点接受除 \n 之外的任何字符)。也就是模板要找字符\.

问题:以上所有内容如何帮助捕捉像"one"or之类的词"test"?我是否正确识别每个条目的含义?尚不清楚为什么有\\\n必要\\.

регулярные-выражения
  • 2 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-04-02 20:06:38 +0000 UTC

为什么手动在控制台中键入的命令可以工作,但在 makefile 中却不行?

  • 1

我想创建一个 makefile 来将 freetype 库静态编译成ubuntu. 从她的安装说明中发现

The following  should work  on all Unix  systems where  the `make'
    command invokes GNU Make:

      ./configure [options]
      make
      make install           (as root)

    The default installation path  is `/usr/local'.  It can be changed
    with the `--prefix=<path>' option.  Example:

      ./configure --prefix=/usr

对此只做了一点补充:我只需要静态库,不需要动态库。因此,我用手在控制台中输入的命令如下所示:

elvin@ubuntu:~/lab1/freetype$ ./configure --prefix=/home/elvin/lab1/freetype --enable-freetype-config --enable-static --disable-shared

它没有错误地工作,并且在没有 sudo 的情况下启动。然后(根据文档)我们执行命令make:

elvin@ubuntu:~/lab1/freetype$ make

其输出的一小部分'a:

./builds/unix/libtool --mode=compile gcc -pedantic -ansi -I/home/elvin/.local/share/Trash/files/freetype.16/objs -I./builds/unix -I/home/elvin/.local/share/Trash/files/freetype.16/include  -c -Wall -g -O2 -fvisibility=hidden -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="<ftmodule.h>" -DFT_CONFIG_OPTIONS_H="<ftoption.h>" -o /home/elvin/.local/share/Trash/files/freetype.16/objs/ftsystem.lo builds/unix/ftsystem.c

最后(应该是 sudo):

elvin@ubuntu:~/lab1/freetype$ sudo make install

一切都组装好了,静态库出现了。

现在我正在做同样的事情,但在 makefile 的帮助下:

PathFreetype:=freetype

#to know the folder
mkfile_path2 := $(abspath $(lastword $(MAKEFILE_LIST)))
mkfile_dir2 := $(dir $(mkfile_path2))
#makefile узнает,где он
LIB:=lib
empty:=
space:= $(empty) $(empty)

mkfile_dir2:=$(subst $(space),$(empty),$(mkfile_dir2))
mkfile_dir2:=$(mkfile_dir2)$(PathFreetype)
#удаляю пробел в конце пути к папке и дописываю freetype
# we need this to make static compile of libpng as it requiers the full absolute path to create a static lib ./configure [--prefix=/path] <---— path!
static:
echo "$(mkfile_dir2)" #проверяю,что имя папки уже с freetype
cd $(mkfile_dir2) && sudo ./configure —prefix=$(mkfile_dir2) --enable-freetype-config --enable-static --disable-shared ; make ; sudo $(MAKE) install

Запускаю: elvin@ubuntu:~/lab1$ make static 

但是 make 不起作用并发出以下错误:

make[1]: Entering directory '/home/elvin/lab1/freetype'
./builds/unix/libtool --mode=compile gcc -pedantic -ansi -I/home/elvin/lab1/freetype/objs -I./builds/unix -I/home/elvin/lab1/freetype/include  -c -Wall -g -O2 -fvisibility=hidden -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="<ftmodule.h>" -DFT_CONFIG_OPTIONS_H="<ftoption.h>" -o /home/elvin/lab1/freetype/objs/ftsystem.lo builds/unix/ftsystem.c
libtool: compile:  gcc -pedantic -ansi -I/home/elvin/lab1/freetype/objs -I./builds/unix -I/home/elvin/lab1/freetype/include -c -Wall -g -O2 -fvisibility=hidden -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include "-DFT_CONFIG_CONFIG_H=<ftconfig.h>" -DFT2_BUILD_LIBRARY "-DFT_CONFIG_MODULES_H=<ftmodule.h>" "-DFT_CONFIG_OPTIONS_H=<ftoption.h>" builds/unix/ftsystem.c -o /home/elvin/lab1/freetype/objs/ftsystem.o
builds/unix/ftsystem.c:19:10: fatal error: ft2build.h: No such file or directory
 #include <ft2build.h>

如您所见,由于某种原因,make(manual)和makefilovsky进入了不同的目录。为什么会出现这样的错误以及如何解决?

makefile
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-04-01 00:14:06 +0000 UTC

为什么 substr makefile 示例不起作用

  • 0

我正在尝试在 ubuntu 下使用 substr 函数运行示例 makefile。这个例子

comma:= ,
empty:=
space:= $(empty) $(empty)
foo:= a b c
bar:= $(subst $(space),$(comma),$(foo))
# bar is now `a,b,c'.

在我的makefile中我是这样写的

all:
    comma:= ,
    empty:=
    space:= $(empty) $(empty)
    foo:= a b c
    bar:= $(subst $(space),$(comma),$(foo))
    # bar is now `a,b,c'.

启动时,出现以下错误:

elvin@ubuntu:~$ make all
comma:= ,
/bin/sh: 1: comma:=: not found
makefile:2: recipe for target 'all' failed
make: *** [all] Error 127

在这个例子中我做错了什么以及如何摆脱这个错误?

makefile
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-03-22 01:04:03 +0000 UTC

为什么 masm 对字符串或文本文字太长发誓,为什么在结构中设置 db 或 dw?

  • 0

我正在按照这个例子编写 c-shellcode。我重复示例中的步骤以填充结构:示例本身:

    ;IA86 and AMD64
    IFDEF _M_IA86
    .386
    .model flat, stdcall
    ENDIF

    ;set code section .shell
    .CODE shell

    ;data struct
    Shell_Static_Data STRUCT 
        phrase_ldrloaddll db 16 dup(0)
        phrase_msgbox db 16 dup(0) //почему byte?
        phrase_hello db 16 dup(0)
        phrase_hello_title db 16 dup(0)
        phrase_user32 dw 16 dup(0)//почему word? 
        phrase_ntdll dw 16 dup(0)
    Shell_Static_Data ENDS

    shelldata Shell_Static_Data <"LdrLoadDll", "MessageBoxA", "Hello hacker", "Shellcode", \
         {'u', 's', 'e', 'r', '3', '2', '.', 'd', 'l', 'l'}, {'N', 't', 'd', 'l','l', '.', 'd', 'l', 'l'}>
;getting ptr to shelldata struct

IFDEF _M_IA86

get_data_struct_ptr PROC
;delta
    call get_delta
get_delta:
    pop eax
;calc var
    sub eax, 5
    sub eax, sizeof shelldata
    ret
get_data_struct_ptr ENDP

ELSEIFDEF _M_AMD64

get_data_struct_ptr PROC
;delta
    call get_delta
get_delta:
    pop rax
;calc var
    sub rax, 5
    sub rax, sizeof shelldata
    ret
get_data_struct_ptr ENDP

ENDIF

END

为什么确切地暴露了 db 或 dw 。这与在 C 结构中声明的数组的大小有什么关系?按照这个汇编代码,编写了一个 C 结构体:

 #pragma pack(push, 1)
typedef struct _Shell_Static_Data {
    char phrase_ldrloaddll[16];
    char phrase_msgbox[16];
    char phrase_hello[16];
    char phrase_hello_title[16];
    wchar_t phrase_user32[16];
    wchar_t phrase_ntdll[16];
} Shell_Static_Data, *PShell_Static_Data;
#pragma pack(pop)

extern PShell_Static_Data __stdcall get_data_struct_ptr();

__declspec(noinline) void entry();

void *get_module_base_addr(wchar_t *mod_name);
void *get_proc_addr(void *mod_addr, char *proc_name);

该示例正在运行,并且按照说明运行。

现在我正在根据这个例子编写我的模拟:MASM:

     ;IA86 and AMD64
        IFDEF _M_IA86
        .386
        .model flat, stdcall
        ENDIF

        ;set code section .shell
        .CODE shell

        ;data struct
        Shell_Static_Data STRUCT 
            phrase_ldrloaddll db 16 dup(0)
            phrase_ntdll dw 16 dup(0)
            phrase_kernel32 dw 16 dup(0)
            phrase_FindFirFil db 16 dup(0)
            phrase_FindNexFileA db 16 dup(0)
            phrase_DelFilA db 16 dup(0)
            phrase_FindCL db 16 dup(0)
            phrase_ExPr db 16 dup(0)
            phrase_PathM db 42 dup(0) ;не понимаю какое число нужно выставлять, это зависит от размера массива?
    ;что нужно выбрать db или dw, может dt ? На чём завязан этот выбор?
            phrase_path db 38 dup(0)
        Shell_Static_Data ENDS

        shelldata Shell_Static_Data <"LdrLoadDll", {'N','t','d','l','l','.','d','l','l'},{'K','e','r','n','e','l','3','2','.','d','l','l'},"FindFirstFileA","FindNextFileA","DeleteFileA","FindClose","ExitProcess","C:\\Users\\Documents\\delete\\d*.*","C:\\Users\\Documents\\delete\\">
;getting ptr to shelldata struct

IFDEF _M_IA86

get_data_struct_ptr PROC
;delta
    call get_delta
get_delta:
    pop eax
;calc var
    sub eax, 5
    sub eax, sizeof shelldata
    ret
get_data_struct_ptr ENDP

ELSEIFDEF _M_AMD64

get_data_struct_ptr PROC
;delta
    call get_delta
get_delta:
    pop rax
;calc var
    sub rax, 5
    sub rax, sizeof shelldata
    ret
get_data_struct_ptr ENDP

ENDIF

END

在这里,我试图通过与示例类比来写下我的函数和字符串(因为由于直接链接而禁止在教程中使用指针,但在 shellcode 中不允许这样做)我不明白结构字段是用汇编写的:如何理解是否需要db或dw,它后面的数字,它应该是什么以及它取决于什么(可能取决于引号中的字符数?)C中的结构如下所示:

#pragma pack(push, 1)
typedef struct _Shell_Static_Data {
    char phrase_ldrloaddll[16];
    wchar_t phrase_ntdll[16];
    wchar_t phrase_kernel32[16];
    char phrase_FindFirFil[16];//findfirstfilea
    char phrase_FindNexFileA[16];
    char phrase_DelFilA[16];
    char phrase_FindCL[16];//findclose
    char phrase_ExPr[16];//exitproc
    char phrase_PathM[42];//путь с маской
    char phrase_path[38];
} Shell_Static_Data, *PShell_Static_Data;
#pragma pack(pop)

extern PShell_Static_Data __stdcall get_data_struct_ptr();

__declspec(noinline) void entry();

设置当前设置后,VS 说:

A2041 字符串或文本文字太长
(shellcode_native.asm)

A2006 未定义符号:shelldata

帮助解决错误

c
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-02-14 07:12:57 +0000 UTC

为什么矩阵没有分配内存?

  • 0

我想访问一个目录并获取其中所有文件的名称。然后将这些二进制文件的内容读入一个矩阵(将每个文件的内容读入矩阵的单独一行)。0x009c5be0 {0xcdcdcdcd <Ошибка при чтении символов строки.>}但在调试器memblock中,我看到memblock = new char*[(counter+1)];. 这是代码本身:

    void find_bounds()
{
    int counter = 0;
    //в директории узнаём названия файлов,чтобы по ним пройтись
    WIN32_FIND_DATA data;
    char** memblock;
    HANDLE hFind = FindFirstFile("C:\\Users\\Elvin\\Documents\\all_configs\\*", &data);  // 
    if (hFind != INVALID_HANDLE_VALUE) 
    {

        do {
            std::cout << data.cFileName << std::endl;
            memblock = new char*[(counter+1)];//хочу на каждый файл досоздавать новую строку




            streampos size;
            string temp_name = data.cFileName;
            //temp_name = temp_name + ".bin";
            ifstream file("C:\\Users\\Elvin\\Documents\\all_configs\\"+temp_name, ios::in | ios::binary | ios::ate);
            if (file.is_open())
            {
                size = file.tellg();
                memblock[counter] = new char[size];//выделяю столбцы для новой строки, но память не выделяется, пишет "Ошибка при чтении символов строки"
                file.seekg(0, ios::beg);
                file.read(memblock[counter], size);//запись данных в строку матрицы
                file.close();
                counter++;
                cout << "the entire file content is in memory";

                //delete[] memblock;
            }
            //else cout << "Unable to open file";




        } while (FindNextFile(hFind, &data));
        FindClose(hFind);
    }

}

但不幸的是,memblock即使是第一次也没有为矩阵分配内存,如何解决这个问题?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-02-09 04:40:24 +0000 UTC

为什么 yacc 程序会出现分段错误?

  • 2

我正在尝试从此HOW-TO运行示例(4.3。处理配置文件) 。这是作为 L1 语言输入的代码:

zone "." {
        type hint;
        file "/etc/bind/db.root";
};

这些是我正在使用的来源:

LEX-файл (example6.l)
%{
#include <stdio.h>
#include "y.tab.h"
%}

%%

zone            return ZONETOK;
file            return FILETOK;
[a-zA-Z][a-zA-Z0-9]*    yylval=strdup(yytext); return WORD;
[a-zA-Z0-9\/.-]+        yylval=strdup(yytext); return FILENAME;
\"                      return QUOTE;
\{                      return OBRACE;
\}                      return EBRACE;
;                       return SEMICOLON;
\n                      /* ignore EOL */;
[ \t]+                  /* ignore whitespace */;
%%

下面是一个带有语法 (yacc) 的文件 (example6.y)

%{
#include <stdio.h>
#include <string.h>

#define YYSTYPE char *

int yydebug=0;//пока без дебага

void yyerror(const char *str)
{
    fprintf(stderr,"error: %s\n",str);
}

int yywrap()
{
    return 1;
}

main()
{
    yyparse();
}

%}

%token WORD FILENAME QUOTE OBRACE EBRACE SEMICOLON ZONETOK FILETOK

%%

commands:
    |    
    commands command SEMICOLON
    ;


command:
    zone_set 
    ;

zone_set:
    ZONETOK quotedname zonecontent
    {
        printf("Complete zone for '%s' found\n",$2);
    }
    ;

zonecontent:
    OBRACE zonestatements EBRACE 

quotedname:
    QUOTE FILENAME QUOTE
    {
        $$=$2;
    }
    ;

zonestatements:
    |
    zonestatements zonestatement SEMICOLON
    ;

zonestatement:
    statements
    |
    FILETOK quotedname 
    {
        printf("A zonefile name '%s' was encountered\n", $2);
    }
    ;

block: 
    OBRACE zonestatements EBRACE SEMICOLON
    ;

statements:
    | statements statement
    ;

statement: WORD | block | quotedname

我正在编译上述文件:

yacc -d example6.y
lex (example6.l)
cc lex.yy.c y.tab.c -o example6

我发现了分段错误

elvin@ubuntu:~/Documents/myfirstlex/conf_file$ ./example6
zone "." {
        type hint;
        file "/etc/bind/db.root";
};Segmentation fault (core dumped)
elvin@ubuntu:~/Documents/myfirstlex/conf_file$

试图找出错误,我在调试模式下运行

elvin@ubuntu:~/Documents/myfirstlex/conf_file$ ./example6
Starting parse
Entering state 0
Reducing stack by rule 1 (line 30):
-> $$ = nterm commands ()
Stack now 0
Entering state 1
Reading a token: zone "." {
        type hint;
        file "/etc/bind/db.root";
        type hint;
};Next token is token ZONETOK ()
Shifting token ZONETOK ()
.............................
Stack now 0 1 3 7 10 13 15
Entering state 18
Reducing stack by rule 10 (line 65):
$1 = token FILETOK ()
$2 = nterm quotedname ()
Segmentation fault (core dumped)

你能解释一下可能是什么问题吗?如果 strdup 是问题所在,如何避免使用它?

c
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-12-20 19:50:39 +0000 UTC

为什么无法访问 MyIterator 字段?

  • 1

我正在写 map 中插入的第二个版本,除了插入的对之外,您还需要传递一个迭代器,也就是说,我编写了这样一个插入的类似物:

std::map<char,int>::iterator it = mymap.begin();
  mymap.insert (it, std::pair<char,int>('b',300));  // max efficiency inserting
  mymap.insert (it, std::pair<char,int>('c',400));  // no max efficiency inserting

在这个 STL 示例中,我不明白他们为什么传递一个迭代器并将其称为高效插入。迭代器将遍历这些值,直到找到正确的对。什么是有效的?

template<class T,class R>
class Map 
{


public:
    Map();
    ~Map();
    R& operator[](T index)
    {
        return tree.searchOperator(index);
    }
    class MyIterator : public iterator<bidirectional_iterator_tag, RBTNode<T, R>>
    {
        friend class Map;
        public:
        MyIterator(RBTNode<T, R> *it)
        {
            second = it->Element.second;
            first = it->Element.first;
            temp = it;
        }
        MyIterator()
        {

        }
        MyIterator& operator=(const MyIterator& it) 
        {
            first = it.first;
            second = it.second;
            temp = it.temp;
            return (*this);
        }
        MyIterator& operator*()
        {

            return (*this);
        }
        MyIterator(const MyIterator& source)
        {
            first = source.first;
            second = source.second;
            temp = source.temp;
            /*temp->left = source.temp->left;
            temp->right = source.temp->right;
            temp->parent = source.temp->parent;
            temp->Element.first = source.temp->Element.first;
            temp->Element.second = source.temp->Element.second;
            temp->color = source.temp->color;*/
        }

        MyIterator operator++(int) 
        {//Post ++
            int j = 0;
            if (temp->right != NULL)
            {
                temp = temp->right;
            }
            if (temp->parent != NULL)//если root
            {
                temp = temp->parent;
            }


            first = temp->Element.first;
            second = temp->Element.second;
            return *this;
        }
        MyIterator *operator->() 
        {
            // 
            return (this);
        }

    public:
        T first;
        R second;
    private:
        RBTNode<T, R>* temp;
    };
    MyIterator begin()
    {
        RBTNode<T, R>* pt = tree.f_begin();
        MyIterator temp(pt);

        return temp;
    }
    pair<MyIterator, bool> insert(const std::pair<T,R> tempo)// first insert function
    {
        std::pair<MyIterator, bool> returnable;
        if (!tree.search(tempo.first))// проверка на уникальность
        {
            //RBTNode<T, R> tempnode;

            tree.insert(tempo.first, tempo.second);
            MyIterator ret(tree.search(tempo.first));//конструктор,чтобы знать ноду
            returnable.first = ret;
            returnable.second = 1;
            return returnable;
        }
        else 
        {
            MyIterator ret(tree.search(tempo.first));//конструктор,чтобы знать ноду
            returnable.first = ret;
            returnable.second = 0;
            return returnable;
        }


        //return ret;
    }

    MyIterator insert(MyIterator& it,  const std::pair<T, R> tempo)//second insertation function
    {


    }

private:
      RBTree<T,R> tree;

    //RBTNode<T, R> tempnode;
};

template <class T,class R>
Map<T, R>::Map() {


}
template <class T, class R>
Map<T,R>::~Map()
{

}

出于某种原因,我在此功能中无法使用 it 字段。如何使它们可用?

MyIterator insert(MyIterator& it,  const std::pair<T, R> tempo)//second insertation function
        {


              it-> // не работает, хоть и оператор -> перегружен
              it. // не работает доступ к полям(хотя бы public first и second)

        }
c++
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-12-17 00:19:59 +0000 UTC

为什么嵌套类没有声明为朋友?

  • -1

内部类 MyIterator 需要访问RBTree<T,R> tree外部类 Map 中的私有字段:

template<class T,class R>
class Map 
{
    friend class MyIterator;

public:
    Map();
    ~Map();
    R& operator[](T index)
    {
        return tree.searchOperator(index);
    }
class MyIterator : public iterator<bidirectional_iterator_tag, RBTNode<T, R>>
    {

        public:
        MyIterator(RBTNode<T, R> it)
        {
            second = it.Element.second;
            first = it.Element.first;

        }
        MyIterator()
        {

        }
        MyIterator& operator=(const MyIterator& it) 
        {

        }
        MyIterator& operator*()
        {
            //пустует. 

        }
        MyIterator(const MyIterator& source)
        {
            first = source.first;
            second = source.second;
        }
        MyIterator operator++(int) 
        {//Post ++

            RBTNode<T, R>* pt = tree.search(first);
            pt =tree.Inc(pt);
            //MyIterator tmp = *this;
            *this.first=pt.Element.first;
            *this.second = pt.Element->second;
            return *this;
        }
        MyIterator operator->()
        {
            //
            return (**this);
        }

    public:
        T first;
        R second;
    };

    MyIterator begin()
    {
        RBTNode<T, R> pt = tree.f_begin();
        MyIterator temp(pt);

        return temp;
    }

private:
     RBTree<T,R> tree;//хочу сделать доступным в MyIterator
    //RBTNode<T, R> tempnode;
};

template <class T,class R>
Map<T, R>::Map() {


}
template <class T, class R>
Map<T,R>::~Map()
{

}

谁以及如何声明一个朋友,以便这个重载可以访问树实例?

        MyIterator operator++(int) 
        {//Post ++
            RBTNode<T, R>* pt = tree.search(first);//Ошибка tree идентификатор не найден
            pt =tree.Inc(pt);
            //MyIterator tmp = *this;
            *this.first=pt.Element.first;
            *this.second = pt.Element->second;
            return *this;
        }
c++
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-12-04 04:36:25 +0000 UTC

静态链接和动态链接有什么区别?

  • 3

静态链接和动态链接有什么区别?

为什么当这些短语被谷歌搜索时,结果是关于静态和动态库的?是同样的事情还是发生同样的事情?

而这又是如何与目标文件的链接联系起来的:例如,我写了代码,它经历了预处理器、目标文件的编译和出现、然后链接的阶段。那么如何理解 .exe 中的目标文件是如何在 VS 中链接的:动态还是静态?但仍然主要的问题是:静态链接和动态链接有什么区别?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-12-01 07:00:03 +0000 UTC

更改模板类中的函数模板参数

  • 0

我有一个模板化的红黑树类:

template<class T>
class  RBTree
{
public:
    RBTree();
    ~RBTree();

    void insert(T key);    // Insert node, key is the key value, external interface
    void remove(T key); // Delete the node of the key
    RBTNode<T>* search(T key);
    void print();
    void preOrder();    // Pre - order traversal Print red black tree
    void inOrder();    //Intermediate traversal
    void postOrder();    // Post - order traversal



private:
    void leftRotate(RBTNode<T>* &root, RBTNode<T>* x);// left-handed
    void rightRotate(RBTNode<T>* &root, RBTNode<T>* y);// right handed

    void insert(RBTNode<T>* &root, RBTNode<T>* node);// insert node, internal interface
    void InsertFixUp(RBTNode<T>* &root, RBTNode<T>* node);
    void destory(RBTNode<T>* &node);

    void remove(RBTNode<T>*& root, RBTNode<T>*node); // Delete the node as KEY
    void removeFixUp(RBTNode<T>* &root, RBTNode<T>* node, RBTNode<T>*parent);

    RBTNode<T>* search(RBTNode<T>*node, T key) const;
    void print(RBTNode<T>* node)const;
    void preOrder(RBTNode<T>* tree)const;
    void inOrder(RBTNode<T>* tree)const;
    void postOrder(RBTNode<T>* tree)const;
private:
    RBTNode<T>*root;
};

我想允许一些函数,例如,insert()带模板带第二个参数,即将类内部函数的声明更改为

template<class T,typename R> 
void insert(T key,R info); 

不以任何方式更改课程的开头:

template<class T>
class  RBTree
{
public:
...

因此,在函数定义中,改为:

template<class T>       //insert
void RBTree<T>::insert(T key)
{
    RBTNode<T>*z = new RBTNode<T>(key, Red, NULL, NULL, NULL);
    insert(root, z);
};

这个 :

    template<class T,class R>       //insert
void RBTree<T>::insert(T key,R info)
{
    RBTNode<T>*z = new RBTNode<T>(key, Red, NULL, NULL, NULL,info);
    insert(root, z);
};

但由于这样的错误,我无法这样做 - 没有与给定类型对应的重载函数“RBTree::insert”的实例

甚至有可能做到这一点吗?如果是这样,怎么做?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-11-03 19:57:07 +0000 UTC

如何让一个类了解另一个类的实例?

  • 1

我有一个BinTree描述二叉搜索树的类:

 class BinTree
    {
    public:
        BinTree();

        ~BinTree();

        bool IsEmpty();
        bool IsFull();
        const int Size() const;

        bool Add(Item data);
        bool In(Item data);
        bool Delete(Item data);
        void Traverse();
...
}

对于 BinTree 类,我在 int main() 中创建了它的一个实例:

#include<iostream>
#include"BinTree.h"
#include"menu.h"
//extern BinTree mytree;
int main()
{
    BinTree mytree;//экземпляр
    return 0;
}

我需要这个实例也可以在另一个类中使用-menu

class menu
{
private:

    static void upp(string str);
public:

    static void addpet();
};
void menu::upp(string str)
{
    for (int i = 0; i < str.length; i++)
    {
        str[i] = toupper(str[i]);
    }
}
void menu::addpet()
{
    Item temp;
    cout << "Please enter name of pet: " << endl;
    //std:sin >> temp.Name;
    getline(std::cin, temp.Name);
    cout << "Please enter pet kind: " << endl;
    getline(std::cin, temp.Kind);
    upp(temp.Name);
    upp(temp.Kind);
    mytree.Add(temp);

}

问题出现在这一行

mytree.Add(temp);

因为“id mytree 未定义”。那么如何让菜单类了解另一个类的实例呢?我想到的唯一一件事是在文件之间使用全局范围extern(但这是一个极端情况)。有没有更好的方法,即不使用全局变量?

c++
  • 2 个回答
  • 10 Views
Martin Hope
Elvin
Asked: 2020-09-23 09:12:02 +0000 UTC

这样的 typedef 是什么意思?

  • 0

我无法弄清楚这个 typedef 以及 WINAPI(stdcall) 宏在那里做了什么

typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

进一步描述了以下内容:

LPFN_ISWOW64PROCESS fnIsWow64Process;

void x_32_64(list <info> &gqlist)
{
    BOOL bIsWow64 = FALSE;

    //IsWow64Process is not available on all supported versions of Windows.
    //Use GetModuleHandle to get a handle to the DLL that contains the function
    //and GetProcAddress to get a pointer to the function if available.

    fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
        GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
    list <info> ::iterator it;
    for (it = gqlist.begin(); it != gqlist.end(); ++it)
    {
        if (NULL != fnIsWow64Process)
        {
            if (!fnIsWow64Process(OpenProcess(PROCESS_QUERY_INFORMATION, false, it->num_PID), &bIsWow64))
            {
                it->x_bit = 9;
            }
        }
     ///////////
     }

目前尚不清楚这里发生了什么:

fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
        GetModuleHandle(TEXT("kernel32")), "IsWow64Process");

为什么它fnIsWow64Process开始表现得像一个函数?

c
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5