小编Nli*_*tis的帖子

Bash(grep)正则表达式意外执行

我有一个文本文件,其中包含一个日期dd/mm/yyyy(例如20/12/2012).

我试图用来grep解析日期并在终端中显示它,并且它是成功的,直到我遇到某个案例:

这些是我的测试用例:

  • grep -E "\d*" 返回20/12/2012
  • grep -E "\d*/" 返回20/12/2012
  • grep -E "\d*/\d*" 返回20/12/2012
  • grep -E "\d*/\d*/"没有回报
  • grep -E "\d+"没有回报

有人可以向我解释为什么我会出现这种意外行为吗?

编辑:如果我用"(弱引号)替换(强引号),我会得到相同的行为'.

regex bash shell grep

8
推荐指数
1
解决办法
3672
查看次数

了解JVM中的对象开销

我正在研究java,我记得在某个地方读过java对象,在JVM中有一些开销,这是由虚拟机用于管理的原因.所以我的问题是,有人可以告诉我是否以及如何在HotSpot JVM中获取对象的总大小,以及它可能带来的任何开销?

java memory jvm object overhead

7
推荐指数
1
解决办法
5599
查看次数

由malloc和自由行为混淆

free()对C中数据结构的使用感到困惑.

如果我有以下数据结构:

struct Person {
    char *name;
    int age;
    float weight;
    float height;
};
Run Code Online (Sandbox Code Playgroud)

我通过malloc()同样的方式为结构分配内存:struct Person *me = malloc(sizeof(struct Person));

在完成使用我的结构之后(在结束程序之前),我继续释放分配的内存,如下所示:

free(person_pointer->name);
free(person_pointer);
Run Code Online (Sandbox Code Playgroud)

释放name指针指向的内存对我来说是必要的,因为如果我只是释放person_pointer 我只释放分配用于存储数据结构及其成员 的内存,而不释放指针所指向的内存 - 结构成员.

但是我的实现valgrind似乎暗示第一个free()是无效的.

所以我的问题归结为:当我通过指针释放结构所占用的内存时,我是否应该抢先释放成员指针所指向的内存?

编辑:这是我的整个代码:

#include <stdio.h>
#include <stdlib.h>

struct Person {
    char *name;
    int age;
    float weight;
    float height;
};

int main(int argc, char **argv)
{
    struct Person *me = malloc(sizeof(struct Person));
    me->name = "Fotis";
    me->age = 20; …
Run Code Online (Sandbox Code Playgroud)

c malloc free

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

Python中意外的浮点表示形式

您好,我在Python中使用字典来存储一些城市及其人口,例如:

population = { 'Shanghai' : 17.8, 'Istanbul' : 13.3, 'Karachi' : 13.0, 'mumbai' : 12.5 }
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用命令print population,我将得到结果:

{'Karachi': 13.0, 'Shanghai': 17.800000000000001, 'Istanbul': 13.300000000000001, 'mumbai': 12.5}
Run Code Online (Sandbox Code Playgroud)

相反,如果使用命令print population['Shanghai'],则得到的初始输入17.8

我对你的问题是如何的17.813.3变成17.80000000000000113.300000000000001分别?所有这些信息是如何产生的?为何将其存储在此处,因为我的最初输入表明我至少在我所知的范围内不需要这些额外信息。

python dictionary hashtable

4
推荐指数
1
解决办法
608
查看次数

如何将Clang诊断保存到文件中?

我正在写一个Web服务器,主要是为了练习,并决定学习make和makefiles.我的目标是自动化构建到我的vps,使用Clang/LLVM构建软件,并将诊断保存到文本文件,以便脚本提交到我的电子邮件地址.我似乎无法实现的是将诊断保存到我的文件中.

虽然我的Clang成功构建并生成诊断,并且我的makefile似乎有效,但我无法从makefile内部和命令行重定向诊断程序.

我的makefile(正常工作,但略微修改,以满足保存结果的需要):

# Makefile to build Ironman HTTP Server
# We will use the clang frontend from the llvm compiler infrastructure
# for building

# --- targets
Ironman : 
        clang -o Ironman src/Ironman.c > report

# --- remove binary and executable files
clean:
        rm -f Ironman
        rm -f report
Run Code Online (Sandbox Code Playgroud)

我怀疑(我可能在这里非常错误)这是因为clang并没有真正返回诊断,它只是打印它们.我不知道是否是这种情况,并且Clang用户指南没有提出类似的建议.

[编辑]:我和Clang玩了一下,看到在成功编译时它返回0.我测试它的方法是:

$ clang <source_file.c>
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

这表明我的理论可能是正确的,这使事情复杂化: - \

有人能指出我正确的方向吗?

makefile clang

4
推荐指数
1
解决办法
2059
查看次数

C中的字符串反转:我做错了什么?

我正在读K&R C,主要是为了刷我的C技能,并且在尝试编写一个程序来反转给定的字符串时,我有一个困扰的错误,最糟糕的是,我无法调试 - 也没有可能是什么原因造成的.

我的代码如下:

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

char * reverse(char *string);

int main(int argc, char *argv[])
{
    printf("Please input a string: \t");

    char string[256];

    scanf("%s", string);

    char *reversed = reverse(string);

    printf("The reversed string is %s\n", reversed);

    return 0;
}

char * reverse(char string[])
{
    int size = strlen(string);
    printf("DEBUG: The size of the string that we got as input was: %d\n", size);
    int counter;
    char reversed[size + 1];

    for(counter = size - 1; counter >= 0; counter--) …
Run Code Online (Sandbox Code Playgroud)

c string

4
推荐指数
2
解决办法
243
查看次数

C语言中出现意外的函数原型行为

我正在从K&R学习C,并在本书的第4.4部分中提到范围规则时感到困惑.在进一步讨论之前,让我发布我正在处理的源文件.

#include <stdio.h>

void first(void);

int main(void) {
    printf("In main.\n");

    first();
    second();

    return 0;
}

void first(void) {
    printf("In first.\n");
}

void second(void) {
    printf("In second.\n");
}
Run Code Online (Sandbox Code Playgroud)

现在,除非我比我想象的更愚蠢,否则本书给出了一个想法,即函数原型(与函数定义在同一个文件中)存在作为范围界定的原因.也就是说,它们的存在是为了允许在编译文件的顶部声明函数,以便为源文件的其余部分通知是否存在"对象",如果我可以提前调用它的话.

我与上面的代码的问题是,在Arch Linux的虚拟机,我的工作与GCC version 4.7.1上述文件可以编译并提供了以下错误:conflicting types for second.

然而,当相同的代码运行到我的物理机器,运行UCCntu 12.04GCC版本4.6.3,它编译就好了.

我的问题是:这是一个编译器功能吗?因为如果不是这样的话,我很惊讶它会编译,因为没有函数原型second,main(如果我已经正确理解)应该不能知道它second的存在.

c function function-prototypes

3
推荐指数
1
解决办法
184
查看次数

c ++中不同指针语法之间的语义差异?

在C++中,这种形式在int *p语义上与这一形式不同int* p吗?或者这显然是风格问题?

现在这个问题可能很愚蠢,但我记得我曾经看到过两种风格同时被使用,导致我相信这些形式之间可能存在不同的语义.

c++ syntax pointers semantics

3
推荐指数
1
解决办法
204
查看次数

为什么这段代码无限循环?

我正在为体验和知识编写搜索引擎.现在,我正在构建一个爬虫及其附带的实用程序.其中之一是URL规范化程序.这就是我现在正在努力构建的内容,更具体地说,我不得不采用一种方法来获取网址,并将字母大写为"%"符号.我的代码到目前为止:

def escape_sequence_capitalization(url):
        ''' The method that capitalizes letters in escape sequences.
        All letters within a percent - encoding triplet (e.g. '%2C') are case
        insensitive and should be capitalized.

        '''
    next_encounter = None
    url_list = []
    while True:
        next_encounter = url.find('%')
        if next_encounter == -1:
            break

        for letter in url[:next_encounter]:
            url_list.append(letter)

        new_character = url[next_encounter + 1].upper()
        url_list.append(new_character)
        url = url[next_encounter:]

    for letter in url:
        url_list.append(letter)

    return ''.join(url_list)
Run Code Online (Sandbox Code Playgroud)

有人可以指导我到我的错误的位置吗?我会很感激.谢谢.

编辑:这是我想要实现的:

http://www.example.com/a%c2%b1b ? http://www.example.com/a%C2%B1b
Run Code Online (Sandbox Code Playgroud)

python infinite-loop

2
推荐指数
1
解决办法
161
查看次数

为什么我在这里收到 UnicodeDecodeError ?

我正在尝试制作一个 python 脚本来查找 USB 闪存驱动器中的重复文件。

我遵循的过程是创建文件名列表,对每个文件进行哈希处理,然后创建一个逆字典。然而,在这个过程中的某个地方我得到了一个UnicodeDecodeError. 有人可以帮助我了解发生了什么事吗?

from os import listdir
from os.path import isfile, join
from collections import defaultdict
import hashlib

my_path = r"F:/"

files_in_dir = [ file for file in listdir(my_path) if isfile(join(my_path, file)) ]
file_hashes = dict()

for file in files_in_dir:
    file_hashes[file] = hashlib.md5(open(join(my_path, file), 'r').read()).digest()

inverse_dict = defaultdict(list)

for file, file_hash in file_hashes.iteritems():
    inverse_dict[file_hash].append(file)

inverse_dict.items()
Run Code Online (Sandbox Code Playgroud)

我面临的错误是:

Traceback (most recent call last):
  File "C:\Users\Fotis\Desktop\check_dup.py", line 12, in <module>
    file_hashes[file] = hashlib.md5(open(join(my_path, file), 'r').read()).digest()
  File "C:\Python33\lib\encodings\cp1253.py", …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

2
推荐指数
1
解决办法
676
查看次数