javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

c-建立.so也是可执行文件

因此,每个人都可能知道glibc的/lib/libc.so.6可以像普通可执行文件一样在shell中执行,在这种情况下,它会打印其版本信息并退出。 这是通过在.so中定义一个入口点来完成的。 在某些情况下,将其用于其他项目也可能很有趣。 不幸的是,您可以通过ld的-e选项设置的低级入口点有点低级:动态加载程序不可用,因此您无法调用任何适当的库函数。 因此,glibc通过该入口点中的裸系统调用来实现write()系统调用。

我现在的问题是,谁能想到一种好方法,如何从该入口点引导一个完整的动态链接器,以便一个人可以从其他.so存取功能?

trans by 2020-02-29T19:19:24Z

c-&&逻辑和||的是非 逻辑标签

C语言表真/假

我听说过&&或||的C语言表为true false。 是一种数学,他们说如果true + true = true和false + true = false

我对此感到困惑,我尝试进行研究,但找不到任何表格

我只希望有这张桌子做笔记,因为我将用C语言做更多的事情

如果有人可以将我带到他们对此有更多解释的网站或资源


我已经对原始问题进行了编辑,以使其成为我自己学习的笔记。 感谢@thiton提供了出色的参考,其余的都为您提供了出色的答案/资源。

!true: false

!true: false

!true: false

!true: false

!true: false

逻辑或(||)

!true: false

!true: false

!true: false

!true: false

逻辑非(!)

!true: false

!true: false

trans by 2020-02-29T18:10:46Z

C ++-使用opencv编写鲁棒的(颜色和尺寸不变)圆检测(基于霍夫变换或其他功能)

我编写了以下非常简单的python代码以在图像中查找圆:

import cv
import numpy as np

WAITKEY_DELAY_MS = 10
STOP_KEY = 'q'

cv.NamedWindow("image - press 'q' to quit", cv.CV_WINDOW_AUTOSIZE);
cv.NamedWindow("post-process", cv.CV_WINDOW_AUTOSIZE);

key_pressed = False
while key_pressed != STOP_KEY:

    # grab image
    orig = cv.LoadImage('circles3.jpg')

    # create tmp images
    grey_scale = cv.CreateImage(cv.GetSize(orig), 8, 1)
    processed = cv.CreateImage(cv.GetSize(orig), 8, 1)


    cv.Smooth(orig, orig, cv.CV_GAUSSIAN, 3, 3)

    cv.CvtColor(orig, grey_scale, cv.CV_RGB2GRAY)

    # do some processing on the grey scale image
    cv.Erode(grey_scale, processed, None, 10)
    cv.Dilate(processed, processed, None, 10)
    cv.Canny(processed, processed, 5, 70, 3)
    cv.Smooth(processed, processed, cv.CV_GAUSSIAN, 15, 15)

    storage = cv.CreateMat(orig.width, 1, cv.CV_32FC3)

    # these parameters need to be adjusted for every single image
    HIGH = 50
    LOW = 140

    try: 
        # extract circles
        cv.HoughCircles(processed, storage, cv.CV_HOUGH_GRADIENT, 2, 32.0, HIGH, LOW)

        for i in range(0, len(np.asarray(storage))):
            print "circle #%d" %i
            Radius = int(np.asarray(storage)[i][0][2])
            x = int(np.asarray(storage)[i][0][0])
            y = int(np.asarray(storage)[i][0][1])
            center = (x, y)

            # green dot on center and red circle around
            cv.Circle(orig, center, 1, cv.CV_RGB(0, 255, 0), -1, 8, 0)
            cv.Circle(orig, center, Radius, cv.CV_RGB(255, 0, 0), 3, 8, 0)

            cv.Circle(processed, center, 1, cv.CV_RGB(0, 255, 0), -1, 8, 0)
            cv.Circle(processed, center, Radius, cv.CV_RGB(255, 0, 0), 3, 8, 0)

    except:
        print "nothing found"
        pass

    # show images
    cv.ShowImage("image - press 'q' to quit", orig)
    cv.ShowImage("post-process", processed)

    cv_key = cv.WaitKey(WAITKEY_DELAY_MS)
    key_pressed = chr(cv_key & 255)

从下面的两个示例中可以看出,“寻圆质量”变化很大:

情况1:

input1 detection1 post-processed1

案例2:

input2 detection2 post-processed2

Case1和Case2基本是同一张图片,但是算法仍然可以检测到不同的圆圈。 如果我向算法显示大小不同的圆圈的图像,则圆圈检测甚至可能完全失败。 这主要是由于HIGHLOW参数需要针对每个新图片分别进行调整。

因此,我的问题是:使该算法更强大的各种可能性是什么? 它应该是大小和颜色不变的,以便检测到具有不同颜色和大小的不同圆圈。 也许使用霍夫变换不是做事的最佳方法? 有更好的方法吗?

trans by 2020-02-29T14:27:08Z

c-跟踪分段fau的python

我正在从python ad开发C扩展,我得到了一些段错误(在开发过程中不可避免...)。

我正在寻找一种方法来显示段错误发生在哪一行代码(一个想法就像跟踪每一行代码),我该怎么做?

trans by 2020-02-29T09:46:47Z

使用C或C ++以编程方式删除非空目录

如何在C或C ++中删除非空目录? 有功能吗? rmdir仅删除空目录。 请提供一种不使用任何外部库的方法。

还告诉我如何删除C或C ++中的文件?

trans by 2020-02-23T01:43:36Z

c-标头fi中的全局变量

我有2个模块(.c文件)和一个.h头文件:

file1.c:

#include <stdio.h>
#include "global.h"

int main()
{
    i = 100;
    printf("%d\n",i);
    foo();
    return 0;
}

文件2.c

#include <stdio.h>
#include "global.h"

void foo()
{
    i = 10;
    printf("%d\n",i);
}

全局

int i;
extern void foo()

当我做gcc file1.c file2.c时,一切正常,我得到了预期的输出。 现在,当我在头文件中将变量“ i”初始化为0并再次编译时,出现链接器错误:

/tmp/cc0oj7yA.o:(.bss+0x0): multiple definition of `i'
/tmp/cckd7TTI.o:(.bss+0x0): first defined here

如果我只是在头文件即gcc file1.c中通过初始化来编译file1.c(删除对foo()的调用),那么一切都会很好。 到底是怎么回事?

trans by 2020-02-22T10:27:41Z

ffmpeg.c什么是pts和dts? 这个代码块在ffmpeg.c中做什么?

  • 简单来说,什么是pts和dts值?
  • 在对[decode-encode]视频进行转码时,为什么它们很重要?

此代码位在ffmpeg.c中有什么作用,目的是什么?

01562    ist->next_pts = ist->pts = picture.best_effort_timestamp;
01563    if (ist->st->codec->time_base.num != 0) {
01564        int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
01565        ist->next_pts += ((int64_t)AV_TIME_BASE *
01566                         ist->st->codec->time_base.num * ticks) /
01567                         ist->st->codec->time_base.den;
01568    }
trans by 2020-02-22T10:08:07Z

python-如何在Windows 7中安装pywin32模块

这个问题已经在这里有了答案:

  • ImportError:没有名为win32api的模块                                     4个答案

我正在尝试安装pywin32。 我从sourceforge.net下载了它。 当我跑步

setup.py install

它显示“无法找到vcvarsall.bat”。 我在Google上搜索了一下,发现我必须安装MinGW并设置路径然后运行

python setup.py build --compiler=mingw32

但它显示

Can't find a version in Windows.h

有人可以帮忙吗? (我已经安装了Visual Studio 2010 Ultimate的试用版,并且安装了MinGW C和C ++编译器。操作系统:Windows7。)

谁能告诉我从哪里可以下载已经在MinGW中编译的Python二进制文件的源,因此我不必做所有这些事情。 或者,如果我可以获取已经具有Windows模块的python。

trans by 2020-02-22T08:34:02Z

c-如何在读取函数调用中实现超时?

我想使用串行com端口进行通信,并且每次调用read函数调用时都想实现超时。

int filedesc = open( "dev/ttyS0", O_RDWR );

read( filedesc, buff, len );

编辑:

我正在使用Linux OS。 如何使用选择函数调用实现?

trans by 2020-02-22T07:17:28Z

c-释放指针后,是否应该将指针真正设置为“ NULL”?

似乎有两个争论,为什么一个人在释放它们后应该设置一个指向NULL的指针。

避免在两次释放指针时崩溃。

简介:设置为someStruct->lastMember时,意外地第二次致电NULL不会崩溃。

  • 几乎总是掩盖一个逻辑错误,因为没有理由第二次致电NULL。 让应用程序崩溃并能够对其进行修复是更安全的。

  • 它不能保证会崩溃,因为有时会在同一地址分配新的内存。

  • 当有两个指针指向同一地址时,通常会发生双重释放。

逻辑错误也可能导致数据损坏。

避免重用释放的指针

简短说明:如果NULL在同一位置分配内存,则访问释放的指针可能导致数据损坏,除非将释放的指针设置为someStruct->lastMember

  • 如果偏移量足够大(someStruct->lastMembertheArray[someBigNumber]),则无法保证程序在访问NULL指针时崩溃。 不会崩溃,不会有数据损坏。

  • 将指针设置为NULL不能解决具有相同指针值的其他指针的问题。

问题

这是一个有关释放后盲目将指针设置为NULL的帖子。

  • 哪一个更难调试?
  • 有可能两者兼得吗?
  • 这些错误导致数据损坏而不是崩溃的可能性有多大?

随意扩展这个问题。

trans by 2020-02-22T04:19:16Z

PHP中&和&&之间的区别

我对&&&感到困惑。我有两本PHP书。 一个说它们是相同的,但是另一个说它们是不同的。 我以为他们也一样。

他们不一样吗?

trans by 2020-02-21T23:50:46Z

如何从C中的pthread线程返回值?

我是C的新手,并且想玩一些线程。 我想使用pthread_exit()从线程返回一些值

我的代码如下:

#include <pthread.h>
#include <stdio.h>

void *myThread()
{
   int ret = 42;
   pthread_exit(&ret);
}

int main()
{
   pthread_t tid;
   void *status;

   pthread_create(&tid, NULL, myThread, NULL);
   pthread_join(tid, &status);

   printf("%d\n",*(int*)status);   

   return 0;
}

我希望程序输出“ 42 \ n”,但它输出一个随机数。 如何打印返回值?

编辑:根据第一个答案,问题是我正在返回指向局部变量的指针。 返回/存储多个线程的变量的最佳实践是什么? 全局哈希表?

提前致谢

trans by 2020-02-21T22:41:53Z

浮点-将双精度数字赋给C中的int变量的非直观结果

有人可以给我一个解释,为什么我会得到两种不同数字,分别。 14和15,作为以下代码的输出?

#include <stdio.h>  

int main()
{
    double Vmax = 2.9; 
    double Vmin = 1.4; 
    double step = 0.1; 

    double a =(Vmax-Vmin)/step;
    int b = (Vmax-Vmin)/step;
    int c = a;

    printf("%d  %d",b,c);  // 14 15, why?
    return 0;
}

在这两种情况下,我都希望获得15分,但似乎我缺少该语言的一些基础知识。

我不确定是否相关,但是我正在CodeBlocks中进行测试。 但是,如果我在某个在线编译器中键入相同的代码行(例如,这一行),则对于两个打印变量我得到的答案为15。

trans by 2020-02-21T18:56:12Z

如何检查给定进程在运行时加载了哪些共享库?

有没有办法检查正在运行的进程在使用哪些库?

更具体地说,如果程序使用dlopen加载某些共享库,则readelf或ldd不会显示它。是否有可能从正在运行的进程中获取该信息? 如果是,怎么办?

trans by 2020-02-21T13:40:29Z

C和汇编语言实际上可以编译为什么?

因此,我发现C(++)程序实际上不会编译为普通的“二进制”(在这里我可能弄错了一些东西,在这种情况下,我很抱歉:D),而是将其编译为一系列东西(符号表) ,与操作系统相关的内容,...),但是...

  • 汇编程序是否可以“编译”为纯二进制文件? 这意味着除了预定义的字符串等资源外,没有多余的东西。

  • 如果C编译为普通二进制以外的其他程序,那么那个小型汇编程序引导加载程序如何将指令从HDD复制到内存并执行呢? 我的意思是,如果OS内核(可能是用C编写)编译为与普通二进制文件不同的东西-引导程序如何处理它?

编辑:我知道汇编程序不会“编译”,因为它只具有您机器的指令集-对于汇编程序“汇编”到的内容,我找不到很好的词。 如果您有一个,请将其留在此处作为评论,我将对其进行更改。

trans by 2020-02-20T09:53:10Z

c-intXX_t和int_fastXX_t有什么区别?

我最近发现存在标准最快的类型,主要是int_fast32_t和int_fast64_t。

经常有人告诉我,对于在主流体系结构上的正常使用,最好使用classic int&long,它应始终适合处理器的默认读取容量,因此避免了无用的数字转换。

在C99标准中,它在§7.18.1.3p2中说:

“ typedef名称int_fastN_t指定宽度至少为N的最快有符号整数类型。typedef名称uint_fastN_t指定宽度至少为N的最快无符号整数类型。”

§7.18.1.3p1中也有关于它的报价:

“不能保证指定的类型在所有目的上都是最快的;如果实现没有明确的理由选择一种类型而不是另一种,则它将简单地选择一些满足签名和宽度要求的整数类型。”

我不清楚最快的真正含义是什么。 我不知道什么时候应该使用这种类型,什么时候不应该使用。

我对此进行了一些搜索,发现一些开源项目已将其某些功能更改为它,但并非全部。 他们并没有真正解释为什么将代码的一部分更改为一部分。

您知道int_fastXX_t确实比传统情况快时的具体情况/用法是什么?

trans by 2020-02-20T07:34:48Z

在C / C ++中包含头文件的数量超过了

这个问题已经在这里有了答案:

  • 在任何情况下,您都不想包括警卫人员吗?                                     6个答案

在C或C ++中多次包含一个头文件是否有用?

如果从未使用过该机制,为什么编译器会担心两次包含一个文件? 如果确实没有用,如果新的编译器确保每个标头仅包含一次,会不会更方便?

编辑:

我了解有一些标准的处理方式,例如一次包含警卫和杂注,但是为什么还要指定呢? 只包含一次文件不是编译器的默认行为吗?

trans by 2020-02-20T04:14:18Z

内核-操作系统使用哪种C语言编写?

像操作系统这样的东西将用C编写是有意义的。但是,其中有多少,以及哪种C? 我的意思是,在C语言中,如果需要一些堆内存,则可以调用malloc。 但是,操作系统是否甚至有堆? 据我所知,malloc向操作系统请求内存,然后将其添加到链表,二进制树或其他内容中。 那调用栈呢? 操作系统负责设置其他应用程序使用的所有这些东西,但是它是如何做到的呢? 当您要使用C打开或创建文件时,适当的功能会向操作系统询问该文件。 那么...该呼叫的另一端是哪种C? 还是在内存分配的另一端?

另外,实际上有多少操作系统将用C编写? 所有的? 那么依赖于体系结构的代码呢? 那么更高级别的抽象呢?曾经用更高级别的语言(例如C ++)编写吗?

我的意思是,我只是出于好奇而问。 我现在正在下载最新的linux内核,但是它将永远存在。 我不确定是否会遵循该代码,或者是否会陷入一个我从未见过的复杂的东西网络中。

trans by 2020-02-20T01:46:35Z

c-远指针和近指针有什么区别?

有人可以告诉我C中的far指针和near指针之间的区别吗?

trans by 2020-02-20T01:10:14Z

通过C中的套接字传递结构

我正在尝试将整个结构从客户端传递到服务器,反之亦然。 让我们假设我的结构如下

struct temp {
  int a;
  char b;
}

我正在使用sendto并发送结构变量的地址,并使用recvfrom函数在另一端接收它。 但是我无法获得在接收端发送的原始数据。 在sendto函数中,我将接收到的数据保存到struct temp类型的变量中。

n = sendto(sock, &pkt, sizeof(struct temp), 0, &server, length);
n = recvfrom(sock, &pkt, sizeof(struct temp), 0, (struct sockaddr *)&from,&fromlen);

其中pkt是struct temp类型的变量。

即使我正在接收8字节的数据,但是如果我尝试打印,它只是显示垃圾值。 对修复有帮助吗?

注意:不必使用第三方库。

EDIT1:我真的是这个序列化概念的新手。.但是如果不进行序列化,是否可以通过套接字发送结构?

EDIT2:当我尝试使用sendto和recvfrom函数发送字符串或整数变量时,我在接收器端正确接收了数据。 为什么不使用结构? 如果我不必使用序列化功能,那么我应该分别发送结构的每个成员吗? 这确实不是一个合适的解决方案,因为如果成员数量为n,那么仅添加了n行代码即可发送或接收数据。

trans by 2020-02-20T00:54:56Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共89页